Merge branch 'patch-1' of https://github.com/niclash/incubator-weex
diff --git a/.eslintignore b/.eslintignore
index ebc4e43..60ec529 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -2,6 +2,7 @@
 html5/test/case/*/*.source.js
 html5/test/case/*/*.output.js
 html5/test/render/vue/vender/*
+html5/test/render/vue/data/*
 *.css
 doc/themes/weex/source/*/*.js
 doc/themes/weex/source/*/*/*.js
diff --git a/.eslintrc b/.eslintrc
index bcd53f8..a5697b6 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,4 +1,14 @@
 {
+  "parser": "babel-eslint",
+
+  "extends": [
+    "plugin:flowtype/recommended"
+  ],
+
+  "plugins": [
+    "flowtype"
+  ],
+
   "parserOptions": {
     "ecmaVersion": 6,
     "sourceType": "module"
@@ -19,10 +29,16 @@
     "callNative": false,
     "callNativeModule": false,
     "callAddElement":false,
-    "callJS": false
+    "callJS": false,
+    "notifyTrimMemory": false,
+    "markupState": false,
+    "compileAndRunBundle": false,
+    "expect": false,
+    "sinon": false
   },
 
   "rules": {
+    "flowtype/no-types-missing-file-annotation": 0,
     "accessor-pairs": 2,
     "arrow-spacing": [2, { "before": true, "after": true }],
     "block-spacing": [2, "always"],
@@ -137,8 +153,14 @@
     "no-var": 2,
     "prefer-const": 2,
     "object-curly-spacing": [2, "always", {
-      objectsInObjects: false
+      "objectsInObjects": false
     }],
     "array-bracket-spacing": [2, "never"]
+  },
+
+  "settings": {
+    "flowtype": {
+      "onlyFilesWithFlowAnnotation": true
+    }
   }
 }
diff --git a/.flowconfig b/.flowconfig
new file mode 100644
index 0000000..0dd9cea
--- /dev/null
+++ b/.flowconfig
@@ -0,0 +1,16 @@
+[ignore]
+.*/node_modules/.*
+.*/test/.*
+.*/build/.*
+.*/examples/.*
+.*/doc/.*
+.*/android/.*
+.*/ios/.*
+.*/bin/.*
+.*/dist/.*
+.*/flow-typed/.*
+
+[include]
+
+[options]
+experimental.strict_type_args=false
diff --git a/.gitignore b/.gitignore
index dc96cc2..c5a3be7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,7 @@
 
 # Created by Builder
 examples/build
-examples/web-entry
+web-entry
 test/build
 weex_tmp
 coverage
@@ -31,6 +31,9 @@
 html5/test/e2e/screenshots
 html5/test/e2e/logs
 
+# render test
+html5/test/render/vue/data/build
+
 # Created by Weex Web Packer
 html5/browser/extend/packer.js
 html5/render/browser/extend/packer.js
diff --git a/.rat-excludes b/.rat-excludes
new file mode 100644
index 0000000..45a4dce
--- /dev/null
+++ b/.rat-excludes
@@ -0,0 +1,11 @@
+\.gitignore
+\.git/.*
+ios/playground 
+.rat-excludes
+build
+.*\.json
+Info\.plist
+.*\.xml
+.*\.pch
+main\.js
+\./ios/playground/Pods/.*
diff --git a/.travis.yml b/.travis.yml
index 2531dbb..4d64a45 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,22 +1,66 @@
-language: objective-c
+os:
+  - osx
+  - linux
+language: node_js
+node_js: 7
 rvm: 2.0.0
-osx_image: xcode8.2
-jdk: oraclejdk8
 env:
-    matrix:
-        - TEST_SUITE=android
-        - TEST_SUITE=ios
-        - TEST_SUITE=danger
-        - TEST_SUITE=jsfm
+  - TEST_SUITE=ios
+  - TEST_SUITE=danger
+  - TEST_SUITE=jsfm
+  - TEST_SUITE=android
 matrix:
     fast_finish: true
+    exclude:
+      - os: linux
+        env: TEST_SUITE=ios
+      - os: osx
+        env: TEST_SUITE=danger
+      - os: osx
+        env: TEST_SUITE=jsfm
+      - os: osx
+        env: TEST_SUITE=android
+      - os: osx
+        env: TEST_SUITE=ios
+      - os: linux
+        env: TEST_SUITE=android
+    include:
+      - os: osx
+        env: TEST_SUITE=ios
+        osx_image: xcode8.1
+        language: objective-c
+        before_script:
+          - brew update
+          - gem install danger danger-xcode_summary xcpretty xcpretty-json-formatter
+        script:
+          - xcodebuild -project ios/sdk/WeexSDK.xcodeproj test -scheme WeexSDKTests CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -destination 'platform=iOS Simulator,name=iPhone 6' | XCPRETTY_JSON_FILE_OUTPUT=ios/sdk/xcodebuild.json xcpretty -f `xcpretty-json-formatter`
+          - bundle exec danger --dangerfile=Dangerfile-ios
+      - os: linux
+        env: TEST_SUITE=android
+        jdk: oraclejdk8
+        language: android
+        android:
+          components:
+            - platform-tools
+            - tools
+            - build-tools-23.0.2
+            - android-23
+            - android-22
+            - extra-google-m2repository
+            - extra-android-m2repository
+            - sys-img-armeabi-v7a-android-22
+        script:
+          - cd android
+          - ./run-ci.sh 
+          - cd $TRAVIS_BUILD_DIR
 cache:
   directories:
   - node_modules
   - $HOME/.m2
   - $HOME/.gradle
-before_install:
-  - source test/ci-funcs.sh && setup_cpt $TEST_SUITE
 script:
-  - test_cpt $TEST_SUITE
+  - source test/ci-funcs.sh
+  - runJSTest $TEST_SUITE
+notifications:
+  webhooks: https://oapi.dingtalk.com/robot/send?access_token=553a6d23676da61499b0001a8e28d4436be776f5642fff9259f5c946ffac45d2
   
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..d1c0c9f
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,7 @@
+## [Unreleased]
+
+### Changed
+- [android]Move DOM and render to seperate Action Object
+- [android]Move Animation(animation module and css style) to seperate Action Object
+- [android]Reserve `transformOrigin`'s last time state.
+- [android]Refactor list-component sticky, use `List` instead of `Stack` to store sticky information.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 9ba3a36..a688622 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,18 @@
-# Weex Contributing Guide
+# How to Contribute
 
-Welcome to create [Pull Requests](https://github.com/alibaba/weex/compare) or open [Issues](https://github.com/alibaba/weex/issues/new) for bugfix, doc, example, suggestion and anything.
+Welcome to create [pull requests](https://github.com/apache/incubator-weex/compare) or join in our [mailing list](http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/) for bugfix, doc, example, suggestion and anything.
+
+## Join in Weex Mailing List
+
+In Weex community all discussion will happen on mailing list.
+
+Just send an email to `dev-subscribe@weex.incubator.apache.org` and follow the instructions to subscribe Weex dev mailing list. And then you will receive all discussions and community messages by your personal email. In the same time you can freely send your own emails to join in us.
+
+At the same time you can see the archives of all the mails through the web: [http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/](http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/)
+
+*If you won't follow the mailing list any more. There is another way to unsubscribe it: send an email to `dev-unsubscribe@weex.incubator.apache.org` and follow the instructions.*
+
+Besides Weex dev mailing list, we also have some other mailing lists for you. You can check them out here: [http://mail-archives.apache.org/mod_mbox/#weex.incubator](http://mail-archives.apache.org/mod_mbox/#weex.incubator)
 
 ## Branch Management
 
@@ -10,13 +22,12 @@
 dev         <--- PR(hotfix/typo/3rd-PR)
  ↑ PR
 {domain}-feature-{date}
-```  
-Weex Branches
+```
 
 0. `master` branch
     0. `master` is the latest (pre-)release branch.
 0. `dev` branch
-    0. `dev` is the stable developing branch. [Github Release](https://help.github.com/articles/creating-releases/) is used to publish a (pre-)release version to `master` branch.
+    0. `dev` is the stable developing branch.
     0. ***It's RECOMMENDED to commit hotfix (like typo) or feature PR to `dev`***.
 0. `{domain}-feature-{date}` branch
     0. The branch for a developing iteration, e.g. `android-feature-20160607` is an android developing iteration which is done at 2016.06.07. `{domain}` consists of `android`, `ios`, `jsfm` and `html5`. 
@@ -53,7 +64,7 @@
 * `{module}`
     * Including: android, ios, jsfm, html5, component, doc, website, example, test, all 
 * `{description}`
-    * It's ***RECOMMENDED*** to close issue with syntax `close #123` or `fix #123`, see [the doc](https://help.github.com/articles/closing-issues-via-commit-messages/) for more detail. It's useful for responding issues and [release flow](https://github.com/alibaba/weex/releases/tag/v0.5.0).
+    * Just make it as clear and simple as possible.
 
 for example:
 
@@ -61,19 +72,14 @@
 * `* [doc] fix #123, update video auto-play property`
 * `- [example] remove abc`
 
-
 ## Pull Request
 
-[Create Pull Requests](https://github.com/alibaba/weex/compare).
+You can [create pull requests](https://github.com/apache/incubator-weex/compare) in GitHub.
 
-## Contributor License Agreement
-In order to contribute code to Weex, you (or the legal entity you represent) must sign the Contributor License Agreement (CLA).
-
-You can read and sign the [Alibaba CLA](https://cla-assistant.io/alibaba/weex) online.
-
-For CLA assistant service works properly, please make sure you have added email address that your commits linked to GitHub account.
-
-Please read [How to setting your Email address in Git](https://help.github.com/articles/setting-your-email-in-git/) and [How to adding an email address to your GitHub Account](https://help.github.com/articles/adding-an-email-address-to-your-github-account/).
+1. First we suggest you have some discussion with the community (commonly in our mailing list) before you code.
+2. Fork repo from [https://github.com/apache/incubator-weex/](https://github.com/apache/incubator-weex/)
+3. Finish the job you want to do.
+4. Create a pull request.
 
 ## Code Style Guide
 
diff --git a/DISCLAIMER b/DISCLAIMER
new file mode 100644
index 0000000..f688a3b
--- /dev/null
+++ b/DISCLAIMER
@@ -0,0 +1 @@
+Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.
\ No newline at end of file
diff --git a/Dangerfile b/Dangerfile
deleted file mode 100644
index 9cffca1..0000000
--- a/Dangerfile
+++ /dev/null
@@ -1,55 +0,0 @@
-# Warn when there is a big PR
-warn("Big PR") if git.lines_of_code > 500
-
-has_app_changes = !git.modified_files.grep(/WeexSDK\/Source/).empty?
-has_test_changes = !git.modified_files.grep(/WeexSDKTests/).empty?
-
-# Non-trivial amounts of app changes without tests
-if git.lines_of_code > 100 && has_app_changes && !has_test_changes
-  warn "This PR may need tests."
-end
-
-# Shows all build errors, warnings and unit tests results generated from `xcodebuild`
-xcode_summary.ignored_files = '**/Pods/**'
-xcode_summary.report 'ios/sdk/xcodebuild.json'
-
-# Fails build when Copyright header is not included
-oc_files = (git.modified_files + git.added_files).uniq.select do |file_path|
-  file_path.end_with?(".h") || file_path.end_with?(".m") || file_path.end_with?(".mm")
-end
-
-copyright_header_components = Array.[](
-  /Created by Weex./,
-  /Copyright \(c\) .*, Alibaba, Inc. All rights reserved./,
-  /This source code is licensed under the Apache Licence 2.0./,
-  /For the full copyright and license information,please view the LICENSE file in the root directory of this source tree./
-)
-
-def has_copyright_header contents, copyright
-  for line in copyright do
-    if not contents =~ line
-      return false
-    end
-  end
-  return true
-end
-
-for file_path in oc_files do
-  contents = File.read(file_path)
-  if not has_copyright_header(contents, copyright_header_components)
-    fail("Objective-C file '#{file_path}' does not have the copyright header.")
-  end
-end
-
-# prose.check_spelling oc_files
-
-# Find reviewers without parsing blame information
-# from files matching to 'Pods/*'
-# mention.run(2, ["Pods/*"], [])
-
-
-# warn("Please add your name", file: "CHANGELOG.md", line: 4)
-
-# fail("Our linter has failed.")
-
-# markdown("## xxxxx")
\ No newline at end of file
diff --git a/Dangerfile-ios b/Dangerfile-ios
new file mode 100644
index 0000000..c7139b4
--- /dev/null
+++ b/Dangerfile-ios
@@ -0,0 +1,4 @@
+
+# Shows all build errors, warnings and unit tests results generated from `xcodebuild`
+xcode_summary.ignored_files = '**/Pods/**'
+xcode_summary.report 'ios/sdk/xcodebuild.json'
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index cfc27db..97f0cd3 100644
--- a/LICENSE
+++ b/LICENSE
@@ -187,7 +187,7 @@
       same "printed page" as the copyright notice for easier
       identification within third-party archives.
 
-   Copyright 2016 Alibaba Group
+   Copyright 2017 The Apache Software Foundation
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
diff --git a/NOTICE b/NOTICE
deleted file mode 100644
index 0d8fded..0000000
--- a/NOTICE
+++ /dev/null
@@ -1,16 +0,0 @@
-This product includes software developed by The Apache Software
-Foundation (http://www.apache.org/).
-
-This product includes software developed at Alibaba Group. (http://www.alibabagroup.com)
-
-This product contains software semver(http://semver.org/) developed
-by Tom Preston-Werner , licensed under the Creative Commons - CC BY 3.0 License.
-
-This product contains software core-js(https://github.com/zloirock/core-js) developed
-by Denis Pushkarev , licensed under the MIT License.
-
-This product contains software vuejs(https://github.com/vuejs/vue) developed
-by Yuxi Evan You , licensed under the MIT License.
-
-This product contains software (https://github.com/component/scroll-to) developed
-by TooTallNate , licensed under the MIT License.
diff --git a/POSSIBLE-NOTICES-FOR-BIN-DIST b/POSSIBLE-NOTICES-FOR-BIN-DIST
new file mode 100644
index 0000000..8ceccd9
--- /dev/null
+++ b/POSSIBLE-NOTICES-FOR-BIN-DIST
@@ -0,0 +1,96 @@
+Apache Weex
+Copyright 2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product contains software semver(http://semver.org/) developed
+by Tom Preston-Werner , licensed under the Creative Commons - CC BY 3.0 License.
+
+This product contains software core-js(https://github.com/zloirock/core-js) developed
+by Denis Pushkarev , licensed under the MIT License.
+
+This product contains software animaitonjs(https://www.npmjs.com/package/animationjs) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software cubicbezier(https://www.npmjs.com/package/cubicbezier) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software envd(https://www.npmjs.com/package/envd) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software httpurl(https://www.npmjs.com/package/httpurl) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software lazyimg(https://www.npmjs.com/package/lazyimg) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software modals(https://www.npmjs.com/package/modals) developed
+by mr.raindrop  , licensed under the MIT License.
+
+This product contains software query-string(https://www.npmjs.com/package/query-string) developed
+by sindresorhus  , licensed under the MIT License.
+
+This product contains software weex-picker(https://www.npmjs.com/package/weex-picker) developed
+by abigtree  , licensed under the Apache 2.0 License.
+
+This product contains software weex-rax-framework(https://www.npmjs.com/package/weex-rax-framework) developed
+by yuanyan  , licensed under the BSD-3-Clause License.
+
+This product contains software weex-vue-framework(https://www.npmjs.com/package/weex-vue-framework) developed
+by fkysly  , licensed under the MIT License.
+
+This product contains software weex-styler(https://www.npmjs.com/package/weex-styler) developed
+by songsiqi  , licensed under the MIT License.
+
+This product contains software vuejs(https://github.com/vuejs/vue) developed
+by Yuxi Evan You , licensed under the MIT License.
+
+This product contains software scroll-to (https://github.com/component/scroll-to) developed
+by TooTallNate , licensed under the MIT License.
+
+This product contains software inline-style-prefixer
+(https://github.com/rofrischmann/inline-style-prefixer) developed by
+rofrischmann , licensed under the MIT License.
+
+This product contains software fastjson(https://github.com/alibaba/fastjson) developed
+by alibaba inc.  , licensed under the Apache 2.0 License.
+
+This product contains software dexposed(https://github.com/alibaba/dexposed) developed
+by alibaba inc.  , licensed under the Apache 2.0 License.
+
+This product contains software loopj(https://github.com/loopj/android-async-http) developed
+by loopj , licensed under the Apache 2.0 License.
+
+This product contains software fresco(https://github.com/facebook/fresco) developed
+by facebook , licensed under the BSD-3-Clause License.
+
+This product contains software animated-gif(https://github.com/facebook/fresco) developed
+by facebook , licensed under the BSD-3-Clause License.
+
+This product contains software yoga(https://github.com/facebook/yoga) developed
+by facebook , licensed under the BSD-3-Clause License.
+
+This product contains software SocketRocket(https://github.com/facebook/SocketRocket) developed
+by facebook , licensed under the BSD-3-Clause License.
+
+This product contains software zxing(https://github.com/zxing/zxing) developed
+by zxing , licensed under the Apache 2.0 License.
+
+This product contains software okhttp(https://github.com/square/okhttp) developed
+by square , licensed under the Apache 2.0 License.
+
+This product contains software okio(https://github.com/square/okio) developed
+by square , licensed under the Apache 2.0 License.
+
+This product contains software scalpel(https://github.com/JakeWharton/scalpel) developed
+by Jake Wharton , licensed under the Apache 2.0 License.
+
+This product contains software espresso-idling-resource(https://google.github.io/android-testing-support-library/docs/espresso/idling-resource/) developed
+by google , licensed under the Apache 2.0 License.
+
+This product contains software AOSP(https://source.android.com/) developed
+by The Android Open Source Project , licensed under the Apache 2.0 License.
+
+This product contains software SDWebImage(https://github.com/rs/SDWebImage) developed
+by Olivier Poitrey  , licensed under the MIT License.
diff --git a/ios/sdk/WeexSDK.podspec b/WeexSDK.podspec
similarity index 81%
rename from ios/sdk/WeexSDK.podspec
rename to WeexSDK.podspec
index 66af1d4..cb94313 100644
--- a/ios/sdk/WeexSDK.podspec
+++ b/WeexSDK.podspec
@@ -3,7 +3,7 @@
 
   s.name         = "WeexSDK"
 
-  s.version      = "0.10.0"
+  s.version      = "0.12.0"
 
   s.summary      = "WeexSDK Source ."
 
@@ -27,18 +27,17 @@
   s.platform     = :ios
   s.ios.deployment_target = '7.0'
   s.source =  { :path => '.' }
-  s.source_files = 'WeexSDK/Sources/**/*.{h,m,mm,c}'
-  s.resources = 'WeexSDK/Resources/main.js', 'WeexSDK/Resources/wx_load_error@3x.png'
+  s.source_files = 'ios/sdk/WeexSDK/Sources/**/*.{h,m,mm,c}'
+  s.resources = 'ios/sdk/WeexSDK/Resources/main.js', 'ios/sdk/WeexSDK/Resources/wx_load_error@3x.png'
 
+  s.user_target_xcconfig  = { 'FRAMEWORK_SEARCH_PATHS' => "'$(PODS_ROOT)/WeexSDK'" }
   s.requires_arc = true
-  s.prefix_header_file = 'WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch'
+  s.prefix_header_file = 'ios/sdk/WeexSDK/Sources/Supporting Files/WeexSDK-Prefix.pch'
 
 #  s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => '$(inherited) DEBUG=1' }
 
   s.xcconfig = { "OTHER_LINK_FLAG" => '$(inherited) -ObjC'}
 
-  s.user_target_xcconfig  = { 'FRAMEWORK_SEARCH_PATHS' => "'$(PODS_ROOT)/WeexSDK'" }
-
   s.frameworks = 'CoreMedia','MediaPlayer','AVFoundation','AVKit','JavaScriptCore', 'GLKit'
 
   s.dependency 'SocketRocket'
diff --git a/android/commons/build.gradle b/android/commons/build.gradle
index f2f691a..64090ab 100644
--- a/android/commons/build.gradle
+++ b/android/commons/build.gradle
@@ -49,6 +49,7 @@
     provided 'com.taobao.android:weex_analyzer:0.1.0.5'
     provided 'com.squareup.okhttp:okhttp:2.3.0'
     provided 'com.squareup.okhttp:okhttp-ws:2.3.0'
+    provided 'com.alibaba:fastjson:1.1.46.android'
 
     testCompile 'junit:junit:4.12'
     testCompile 'org.hamcrest:hamcrest-core:1.3'
@@ -66,4 +67,4 @@
 
 task wrapper(type: Wrapper) {
     gradleVersion = '2.10'
-}
\ No newline at end of file
+}
diff --git a/android/commons/src/androidTest/java/com/alibaba/weex/commons/ApplicationTest.java b/android/commons/src/androidTest/java/com/alibaba/weex/commons/ApplicationTest.java
index cb6d7a7..d8cab6d 100644
--- a/android/commons/src/androidTest/java/com/alibaba/weex/commons/ApplicationTest.java
+++ b/android/commons/src/androidTest/java/com/alibaba/weex/commons/ApplicationTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons;
 
@@ -214,4 +28,4 @@
   public ApplicationTest() {
     super(Application.class);
   }
-}
\ No newline at end of file
+}
diff --git a/android/commons/src/main/AndroidManifest.xml b/android/commons/src/main/AndroidManifest.xml
index 50a7140..af18743 100644
--- a/android/commons/src/main/AndroidManifest.xml
+++ b/android/commons/src/main/AndroidManifest.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.alibaba.weex.commons">
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java b/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
index d42ffa4..c71ce3c 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/AbstractWeexActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons;
 
@@ -214,12 +28,17 @@
 import android.view.View;
 import android.view.ViewGroup;
 
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.weex.commons.util.AssertUtil;
 import com.alibaba.weex.commons.util.ScreenUtil;
+import com.taobao.weex.common.Constants;
 import com.taobao.weex.IWXRenderListener;
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -279,6 +98,25 @@
     AssertUtil.throwIfNull(mContainer,new RuntimeException("Can't render page, container is null"));
     Map<String, Object> options = new HashMap<>();
     options.put(WXSDKInstance.BUNDLE_URL, source);
+    // Set options.bundleDigest
+    try {
+      String banner = WXUtils.getBundleBanner(template);
+      JSONObject jsonObj = JSONObject.parseObject(banner);
+      String digest = null;
+      if (jsonObj != null) {
+        digest = jsonObj.getString(Constants.CodeCache.BANNER_DIGEST);
+      }
+      if (digest != null) {
+        options.put(Constants.CodeCache.DIGEST, digest);
+      }
+    } catch (Throwable t) {}
+    //Set options.codeCachePath
+    String path = WXEnvironment.getFilesDir(getApplicationContext());
+    path += File.separator;
+    path += Constants.CodeCache.SAVE_PATH;
+    path += File.separator;
+    options.put(Constants.CodeCache.PATH, path);
+
     mInstance.setTrackComponent(true);
     mInstance.render(
       getPageName(),
@@ -411,4 +249,4 @@
   public boolean onKeyUp(int keyCode, KeyEvent event) {
     return (mWxAnalyzerDelegate != null && mWxAnalyzerDelegate.onKeyUp(keyCode,event)) || super.onKeyUp(keyCode, event);
   }
-}
\ No newline at end of file
+}
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/SimpleWeexActivity.java b/android/commons/src/main/java/com/alibaba/weex/commons/SimpleWeexActivity.java
index bf23f2a..91e0d1a 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/SimpleWeexActivity.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/SimpleWeexActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/WXAnalyzerDelegate.java b/android/commons/src/main/java/com/alibaba/weex/commons/WXAnalyzerDelegate.java
index e030961..f9ad58e 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/WXAnalyzerDelegate.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/WXAnalyzerDelegate.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTool.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTool.java
index e3f292f..e968032 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTool.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTool.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTransformation.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTransformation.java
index 0724659..b530b92 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTransformation.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/BlurTransformation.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
@@ -235,4 +49,4 @@
   @Override public String key() {
     return "BlurTransformation(radius=" + mRadius + ")";
   }
-}
\ No newline at end of file
+}
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java
index cae741f..2529730 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java
index 7604ca1..a2cd4ec 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java
old mode 100755
new mode 100644
index 3906257..bc4ab42
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
index 7bed7bd..109302f 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageView.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageView.java
index 47196ae..ed6596b 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageView.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/FrescoImageView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java
old mode 100755
new mode 100644
index 0fc4112..63625f8
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/ImageAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/JSExceptionAdapter.java b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/JSExceptionAdapter.java
index b3c8ddd..bf0c5e3 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/adapter/JSExceptionAdapter.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/adapter/JSExceptionAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.adapter;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/util/AssertUtil.java b/android/commons/src/main/java/com/alibaba/weex/commons/util/AssertUtil.java
index 81fe35b..07ec3b9 100644
--- a/android/commons/src/main/java/com/alibaba/weex/commons/util/AssertUtil.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/util/AssertUtil.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.util;
 
diff --git a/android/commons/src/main/java/com/alibaba/weex/commons/util/ScreenUtil.java b/android/commons/src/main/java/com/alibaba/weex/commons/util/ScreenUtil.java
old mode 100755
new mode 100644
index 4518e8a..e2caed3
--- a/android/commons/src/main/java/com/alibaba/weex/commons/util/ScreenUtil.java
+++ b/android/commons/src/main/java/com/alibaba/weex/commons/util/ScreenUtil.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.commons.util;
 
diff --git a/android/playground/app/build.gradle b/android/playground/app/build.gradle
index 9e2de9c..1007dc5 100755
--- a/android/playground/app/build.gradle
+++ b/android/playground/app/build.gradle
@@ -45,6 +45,7 @@
     }
     sourceSets {
         main {
+            jniLibs.srcDir(['libs'])
             java {
                 srcDirs = ["src/main/java", "src/main/java_zxing"];
             }
@@ -76,6 +77,7 @@
         exclude group: 'com.android.support', module: 'support-v4'
         exclude group: 'com.android.support', module: 'design'
         exclude group: 'com.android.support', module: 'appcompat-v7'
+        exclude group: 'com.android.support', module: 'recyclerview-v7'
     })
     androidTestCompile 'com.android.support.test:runner:0.5'
     androidTestCompile 'com.squareup.picasso:picasso:2.5.2'
@@ -109,4 +111,4 @@
     compile 'com.taobao.android.weex_inspection:urlconnection_interceptor:1.0.0'
     compile 'com.android.support.test.espresso:espresso-idling-resource:2.2.2'
     compile 'com.taobao.android:weex_inspector:0.10.0.5@aar'
-}
\ No newline at end of file
+}
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/ApplicationTest.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/ApplicationTest.java
old mode 100755
new mode 100644
index d6b9c7d..5f22786
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/ApplicationTest.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/ApplicationTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex;
 
 import android.app.Application;
@@ -10,4 +28,4 @@
     public ApplicationTest() {
         super(Application.class);
     }
-}
\ No newline at end of file
+}
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/WeappJsBaseTestCase.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/WeappJsBaseTestCase.java
old mode 100755
new mode 100644
index faa48ff..242856e
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/WeappJsBaseTestCase.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/WeappJsBaseTestCase.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex;
 
 import android.content.Context;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkActivityTestRule.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkActivityTestRule.java
index 773b997..492b4c4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkActivityTestRule.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkActivityTestRule.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkTest.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkTest.java
index 95ca128..dddada7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkTest.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BenchmarkTest.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BoxPlot.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BoxPlot.java
index 461a7e0..7a3f446 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BoxPlot.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/BoxPlot.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/Repeat.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/Repeat.java
index 0f7d058..01ae222 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/Repeat.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/Repeat.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/RepeatRule.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/RepeatRule.java
index 7ef30ce..dc7e33d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/RepeatRule.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/RepeatRule.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/WeexNativeCompareTest.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/WeexNativeCompareTest.java
index 600d969..bd57366 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/WeexNativeCompareTest.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/benchmark/WeexNativeCompareTest.java
@@ -1,206 +1,20 @@
 /*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
+ *   http://www.apache.org/licenses/LICENSE-2.0
  *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex.benchmark;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_AHref_A_Href.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_AHref_A_Href.java
index 23b8f7e..72f768e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_AHref_A_Href.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_AHref_A_Href.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Color.java
index c09fb6d..9898adc 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Left_Radius.java
index 09cd297..400a876 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Right_Radius.java
index b24369a..fece5d5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Width.java
index 5ff1bfe..0ac666f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Color.java
index d3b94ee..ab2d037 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Color.java
index 167e0aa..f01c7d6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Width.java
index 7ca1517..99601f1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Radius.java
index c0daaee..81beb75 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Color.java
index d4b1f7d..1bb9bd6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Width.java
index 8ad3247..c2a1fbf 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Style.java
index 88fe470..193defd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Color.java
index 8e6fd6c..8e1f014 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Left_Radius.java
index 52d9b31..cde9833 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Right_Radius.java
index e5b5fb3..f40b3b7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Width.java
index 919e240..a22a55d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Width.java
index f666114..f26d1f5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_A_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Color.java
index a8eff2c..64c3ad1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Left_Radius.java
index 0dfe232..627cb4f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Right_Radius.java
index 8b9a08a..b476750 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Width.java
index d59f26b..842e6a6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Color.java
index a4945f5..2309a33 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Color.java
index 2e0bb76..cfcbf7f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Width.java
index 8d0814f..e4884ee 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Radius.java
index 91e2a9d..217e02b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Color.java
index 4d8dadb..ee50179 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Width.java
index 2c94cba..e84210f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Style.java
index 64a2a63..ed84cc6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Color.java
index 3ba6425..f136dfc 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Left_Radius.java
index cb020c6..75602a5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Right_Radius.java
index 1b6e552..e084c53 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Width.java
index 16ff848..feb9f82 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Width.java
index 083adf7..7d8195d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Div_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Color.java
index d5d963e..8b37598 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Left_Radius.java
index 9629a14..ab4df8f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Right_Radius.java
index f32fbe1..1f736d7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Width.java
index bd4d744..d2e6271 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Color.java
index 0562b47..8bdc586 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Color.java
index aa70541..2306009 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Width.java
index b9cc5ff..ec49562 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Radius.java
index 92b9d70..bd1b1fa 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Color.java
index b877d14..c64bd48 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Width.java
index 950b41d..a7611a4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Style.java
index 17a8b83..ce8b05b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Color.java
index 989ca0e..be08a5f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Left_Radius.java
index fa6d842..0f3ff95 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Right_Radius.java
index c5dd4b9..a894281 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Width.java
index 4727363..9597c45 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Width.java
index 836c0c9..7eaa4b3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Image_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Color.java
index 816859a..df1ed78 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Left_Radius.java
index d12a6f7..4590824 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Right_Radius.java
index 39c2b92..6fa2284 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Width.java
index f6ee506..ce4a46b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Color.java
index b2de046..ff1763e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Color.java
index 28b118b..7537213 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Width.java
index 5247b45..f682725 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Radius.java
index 0150f42..0f8441d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Color.java
index c4ea6fc..a6c472e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Width.java
index 9499854..2b4a8ef 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Style.java
index 1d8d459..6fb9c1b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Color.java
index c1c3523..2156e68 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Left_Radius.java
index 2d3f405..67816c1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Right_Radius.java
index b9462c2..a143813 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Width.java
index 8360d11..abdeee3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Width.java
index f346e03..df44ae5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Input_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Color.java
index e34f85d..6da173e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Left_Radius.java
index 970761b..7327406 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Right_Radius.java
index 36f84fd..5e8c07b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Width.java
index ab389e9..d0e42fd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Color.java
index 80e58c1..4c24622 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Color.java
index f9b5bef..0f37b89 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Width.java
index de43f6a..fdee548 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Radius.java
index 1701751..162c507 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Color.java
index 9c100df..5a580d7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Width.java
index b79a133..1c89eda 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Style.java
index 0cd4ed1..c91c1ff 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Color.java
index 85e05b4..135456a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Left_Radius.java
index f12e4bd..d01f61d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Right_Radius.java
index 3e15d2e..e8941f7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Width.java
index 5de2a2c..5c7ae67 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Width.java
index ba8505e..e982f97 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Switch_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Color.java
index 8cf06b7..9ec2a07 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Left_Radius.java
index 3caf149..caf346a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Right_Radius.java
index 899dd40..cea7312 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Width.java
index a8dac28..4770230 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Color.java
index e056382..ff1d670 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Color.java
index ab1edb7..a59e398 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Width.java
index 583cc0c..429f827 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Radius.java
index b808526..c4b169e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Color.java
index 92c2806..75152ce 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Width.java
index a7d66e5..9b637d5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Style.java
index 3a877cf..0de90b8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Color.java
index 642aaa7..87579b9 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Left_Radius.java
index 96739ff..a052f7e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Right_Radius.java
index 29f1a9e..af5724a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Width.java
index 850d58d..b0d21cc 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Width.java
index 12ddfc3..8f78d9e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Text_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Color.java
index a7742be..afea0cd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Left_Radius.java
index e463dee..a417ef4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Right_Radius.java
index bbae4a5..6521b59 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Width.java
index 447b20f..5a416e0 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Color.java
index 88dcbf7..eafdec6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Color.java
index bac6be5..3c50a89 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Width.java
index b0f048a..5a77d67 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Radius.java
index a064a31..d88ec00 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Color.java
index eb2de04..949b790 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Width.java
index 9f34aea..e8db7d1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Style.java
index ad1f3b6..cfaa573 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Color.java
index 2a67257..3686773 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Left_Radius.java
index a1a806d..be3c07d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Right_Radius.java
index 63f73dd..0880893 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Width.java
index 9e27b59..46ebf4b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Width.java
index 771a475..290a208 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Video_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Color.java
index 79a8d29..e8daaab 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Left_Radius.java
index ee926d5..feb4ca3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Right_Radius.java
index 8708bd9..58aae01 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Width.java
index 16d060c..0f76e3e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Bottom_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Color.java
index 778d1cf..1246a68 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Color.java
index 0e7fcb1..85628b7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Width.java
index 73988aa..b3d16ae 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Left_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Radius.java
index 551fe57..f394fe8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Color.java
index 7febd03..5251309 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Width.java
index baf0347..1d4fa6a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Right_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Style.java
index 74f6105..1409d17 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Color.java
index 80bc370..bc11365 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Left_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Left_Radius.java
index 0392173..c5d2222 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Left_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Left_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Right_Radius.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Right_Radius.java
index 39fe251..bcc10fd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Right_Radius.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Right_Radius.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Width.java
index 5bf9690..adcae5c 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Top_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Width.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Width.java
index 043ea95..628bc06 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Width.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Border_Web_Border_Width.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_A_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_A_If.java
index 7defd5f..33f1656 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_A_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_A_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Div_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Div_If.java
index 8bb08d2..684e717 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Div_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Div_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Image_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Image_If.java
index e7f8c5c..a8ff83d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Image_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Image_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Input_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Input_If.java
index 950b6c7..c47f744 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Input_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Input_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Switch_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Switch_If.java
index 0d7081a..d011213 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Switch_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Switch_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Text_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Text_If.java
index 7b3b699..15e17c6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Text_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Text_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Video_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Video_If.java
index cab657c..04a4a59 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Video_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Video_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Web_If.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Web_If.java
index 35a82cc..05958c4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Web_If.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonAttribute_Web_If.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_A_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_A_Onclick.java
index 8edbb91..7c9e0c8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_A_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_A_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Div_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Div_Onclick.java
index 246c607..4bdb5e7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Div_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Div_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Image_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Image_Onclick.java
index 804a69e..4f5c5a1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Image_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Image_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Input_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Input_Onclick.java
index 085f84a..00eb917 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Input_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Input_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Switch_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Switch_Onclick.java
index 5ab2b50..30d2d46 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Switch_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Switch_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Text_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Text_Onclick.java
index 5efa997..74d27d6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Text_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Text_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Video_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Video_Onclick.java
index 6e0a9c1..6b699ed 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Video_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Video_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Web_Onclick.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Web_Onclick.java
index 7ddf4be..88a9f48 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Web_Onclick.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonEvent_Web_Onclick.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Background_Color.java
index ecb6edc..5d3d6f3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Widthandheight.java
index 5871ca4..616a4a1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_A_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Background_Color.java
index 5d3e9fd..b652e74 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Widthandheight.java
index fd84185..89b86b9 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Div_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Background_Color.java
index 7f4171f..fcf5c75 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Widthandheight.java
index 23ded7c..d350152 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Image_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Background_Color.java
index e3116e6..6721685 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Widthandheight.java
index 98861d0..e0af346 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Input_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Background_Color.java
index f3183cd..3394336 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Widthandheight.java
index 81042c3..abc76f6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Switch_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Background_Color.java
index fc8770c..46fc85e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Widthandheight.java
index 18a5038..e35c9a6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Text_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Background_Color.java
index 546fd12..8f03948 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Widthandheight.java
index 588b114..97a8df8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Video_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Background_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Background_Color.java
index d5b83a4..8d3c7de 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Background_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Background_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Widthandheight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Widthandheight.java
index c0d0d81..fde6ac9 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Widthandheight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_CommonStyle_Web_Widthandheight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Click.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Click.java
index abd77de..91ff9ae 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Click.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Click.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Conflict.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Conflict.java
index 4439453..813c99c 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Conflict.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Conflict.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Longpress.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Longpress.java
index cdc4d3f..5845b09 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Longpress.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Longpress.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Pan.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Pan.java
index bd73c12..6a0229d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Pan.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Pan.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Swipe.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Swipe.java
index c604323..c24c85d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Swipe.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Swipe.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Touch.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Touch.java
index 04af710..7e65386 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Touch.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Gesture_Div_Touch.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Onload.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Onload.java
index ac7f097..63dd33a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Onload.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Onload.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Resize.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Resize.java
index ae2ebd5..c379554 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Resize.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Resize.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Src.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Src.java
index ccac14c..d4dce32 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Src.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Image_Image_Src.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Autofocus.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Autofocus.java
index e3231bf..e560232 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Autofocus.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Autofocus.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Color.java
index fe61c8b..a1a6881 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Disabled.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Disabled.java
index 4566010..11ae61f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Disabled.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Disabled.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Event.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Event.java
index 60f1a37..7e90bb8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Event.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Event.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Size.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Size.java
index 1492be0..7feb07d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Size.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Size.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Style.java
index 35e17d4..bdb4f70 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Weight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Weight.java
index 47b2b35..fab6656 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Weight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Font_Weight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder.java
index 4730486..20cdca8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder_Color.java
index d80b790..935edbd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Placeholder_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Text_Align.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Text_Align.java
index a5f68c2..dafed3b 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Text_Align.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Text_Align.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Type.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Type.java
index ce31079..3057b23 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Type.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Type.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Value.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Value.java
index 90f5868..5c5aee1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Value.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Input_Input_Value.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin.java
index 9004792..1dd5f47 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Bottom.java
index 5dd8328..a06c92a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Left.java
index 6b1086e..869115e 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Right.java
index 2545688..f2b9ac0 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Top.java
index 42e1872..2e86408 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_A_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin.java
index e1f2dea..8168b07 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Bottom.java
index 28cce18..37341c2 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Left.java
index 0846425..035ffb1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Right.java
index 605e884..c4e25a8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Top.java
index 1655690..acc20e5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Div_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin.java
index 1c2e7e4..2f49cf5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Bottom.java
index 80bac05..6455a29 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Left.java
index 81495f3..7e133d6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Right.java
index d9858f7..0f46ff0 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Top.java
index 722b544..d570690 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Image_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin.java
index 42fdea5..5613ec2 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Bottom.java
index 918fd2f..5314ed3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Left.java
index 703c33d..4d836c5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Right.java
index da5ae0e..10f4406 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Top.java
index 7ca3b8f..2e80986 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Input_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin.java
index 9fb404e..4c4216f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Bottom.java
index 9a798c7..f5b1bf0 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Left.java
index 80bac89..7170d3f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Right.java
index 3b06c75..bb084f4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Top.java
index 3e1c0a9..c62f248 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Switch_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin.java
index f05faee..88ba773 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Bottom.java
index 637ef61..0ee08b8 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Left.java
index 5b5016c..8b17f82 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Right.java
index db6d6e6..56ef575 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Top.java
index 2b2536c..49e8ff4 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Text_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin.java
index abbc1d0..5a2b07d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Bottom.java
index d5cb732..d229ce5 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Left.java
index d275253..bf75054 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Right.java
index 1894a94..6637069 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Top.java
index dd2c4fd..9922efa 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Video_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin.java
index 13b985e..a6e2f53 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Bottom.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Bottom.java
index e7fbff9..d06b17a 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Bottom.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Bottom.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Left.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Left.java
index 9a11626..870ca4c 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Left.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Left.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Right.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Right.java
index 3198c31..7b5e6eb 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Right.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Right.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Top.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Top.java
index 498439d..ee70571 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Top.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Margin_Web_Margin_Top.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Checked.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Checked.java
index 5fd3a43..1747ef1 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Checked.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Checked.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Onchange.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Onchange.java
index 9e14545..2dac859 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Onchange.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Switch_Switch_Onchange.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Color.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Color.java
index 481f7ae..c775a76 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Color.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Color.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Size.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Size.java
index 4e107cf..ad07f3d 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Size.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Size.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Style.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Style.java
index d9bade3..0f16915 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Style.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Style.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Weight.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Weight.java
index 232dda3..083e831 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Weight.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Font_Weight.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Line_Height.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Line_Height.java
index ea2f901..dec09a7 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Line_Height.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Line_Height.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Align.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Align.java
index 816238d..7a590fb 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Align.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Align.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Decoration.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Decoration.java
index 8bf77cb..06074e3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Decoration.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Decoration.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Overflow.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Overflow.java
index af1d893..132e3bd 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Overflow.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Text_Overflow.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Value.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Value.java
index a1c746e..975efdb 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Value.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Text_Text_Value.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Auto_Play.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Auto_Play.java
index 787b2dd..fdd77fe 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Auto_Play.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Auto_Play.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Event.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Event.java
index 0996aa0..134ed0f 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Event.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Event.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Play_Status.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Play_Status.java
index f3e3990..b760f53 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Play_Status.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Play_Status.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Src.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Src.java
index 5d738a9..fd59a74 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Src.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Video_Video_Src.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Event.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Event.java
index 3849bc3..02dc357 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Event.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Event.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Src.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Src.java
index 97c5ff3..c3e1fa3 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Src.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AG/AG_Web_Web_Src.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AG;
 import com.alibaba.weex.WXPageActivity;
 import com.alibaba.weex.util.TestFlow;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefEvent.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefEvent.java
old mode 100755
new mode 100644
index 2526f7a..aa4853b
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefEvent.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefEvent.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AHref;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefStyle.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefStyle.java
old mode 100755
new mode 100644
index 2c59c07..9256a7b
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefStyle.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefStyle.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AHref;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefUpdate.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefUpdate.java
old mode 100755
new mode 100644
index da19259..b27e6a2
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefUpdate.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_AHref/WeexUiTestCaseTCAHrefUpdate.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_AHref;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorType.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorType.java
old mode 100755
new mode 100644
index 819a1a8..aac93de
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorType.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorType.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Color;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorUpdate.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorUpdate.java
old mode 100755
new mode 100644
index a423732..ea6d7af
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorUpdate.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Color/WeexUiTestCaseTcColorUpdate.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Color;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVFalse.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVFalse.java
old mode 100755
new mode 100644
index b30cf66..8c60d34
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVFalse.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVFalse.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVTrue.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVTrue.java
old mode 100755
new mode 100644
index d0459d6..07637a3
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVTrue.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeAppVTrue.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMFalse.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMFalse.java
old mode 100755
new mode 100644
index bc2c548..d5ca5f9
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMFalse.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMFalse.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMTrue.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMTrue.java
old mode 100755
new mode 100644
index 172865b..0ad3f6b
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMTrue.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeDevMTrue.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVFalse.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVFalse.java
old mode 100755
new mode 100644
index 9a9a90e..4494bcb
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVFalse.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVFalse.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVTrue.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVTrue.java
old mode 100755
new mode 100644
index 7773103..7aabbd5
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVTrue.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeOSVTrue.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVFalse.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVFalse.java
old mode 100755
new mode 100644
index 96b7914..a8d5147
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVFalse.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVFalse.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVTrue.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVTrue.java
old mode 100755
new mode 100644
index 5f0a7c9..9aecc9a
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVTrue.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Downgrade/WeexUiTestCaseTcDowngradeWeexVTrue.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Downgrade;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Image/WeexUiTestCaseTcImageUpdate.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Image/WeexUiTestCaseTcImageUpdate.java
old mode 100755
new mode 100644
index 5f33323..0e06e36
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Image/WeexUiTestCaseTcImageUpdate.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Image/WeexUiTestCaseTcImageUpdate.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Image;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputEvent.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputEvent.java
old mode 100755
new mode 100644
index c011955..a993a8f
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputEvent.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputEvent.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Input;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputPlaceholder.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputPlaceholder.java
old mode 100755
new mode 100644
index 6df7ac6..03f6c68
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputPlaceholder.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputPlaceholder.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Input;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputStyle.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputStyle.java
old mode 100755
new mode 100644
index bff27ef..c5904a9
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputStyle.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputStyle.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Input;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputType.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputType.java
old mode 100755
new mode 100644
index 8a7b729..e6fba81
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputType.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Input/WeexUiTestCaseTcInputType.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Input;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Slider/WeexUiTestCaseTcSlider.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Slider/WeexUiTestCaseTcSlider.java
old mode 100755
new mode 100644
index 935c4da..55ddbc4
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Slider/WeexUiTestCaseTcSlider.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Slider/WeexUiTestCaseTcSlider.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Slider;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleColumn.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleColumn.java
old mode 100755
new mode 100644
index 57e2909..f404050
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleColumn.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleColumn.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Text;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleOwn.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleOwn.java
old mode 100755
new mode 100644
index 9efc4a7..0d8c508
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleOwn.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleOwn.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Text;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleRow.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleRow.java
old mode 100755
new mode 100644
index ec07905..a847aaa
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleRow.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextStyleRow.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Text;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextType.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextType.java
old mode 100755
new mode 100644
index bf70b24..6d99469
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextType.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/TC_Text/WeexUiTestCaseTcTextType.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest.TC_Text;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/WeexUiTestCaseTcElementOpt.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/WeexUiTestCaseTcElementOpt.java
old mode 100755
new mode 100644
index 7e0d212..34fa40e
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/WeexUiTestCaseTcElementOpt.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/uitest/WeexUiTestCaseTcElementOpt.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.uitest;
 
 import android.app.Application;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/Falcon.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/Falcon.java
old mode 100755
new mode 100644
index b2c23d9..501b14a
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/Falcon.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/Falcon.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.util;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ScreenShot.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ScreenShot.java
old mode 100755
new mode 100644
index a62bf8c..b3561a3
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ScreenShot.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ScreenShot.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.util;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/SdCardHelper.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/SdCardHelper.java
index d5d7343..571f6cb 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/SdCardHelper.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/SdCardHelper.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.util;
 
 import android.os.Environment;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/TestFlow.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/TestFlow.java
index 76cf2bd..9a633a6 100644
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/TestFlow.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/TestFlow.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.util;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ViewUtil.java b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ViewUtil.java
old mode 100755
new mode 100644
index 8b0a9d5..c87e871
--- a/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ViewUtil.java
+++ b/android/playground/app/src/androidTest/java/com/alibaba/weex/util/ViewUtil.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.alibaba.weex.util;
 
 import android.app.Activity;
diff --git a/android/playground/app/src/main/AndroidManifest.xml b/android/playground/app/src/main/AndroidManifest.xml
index df1b9be..dcc0aac 100755
--- a/android/playground/app/src/main/AndroidManifest.xml
+++ b/android/playground/app/src/main/AndroidManifest.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:tools="http://schemas.android.com/tools"
           package="com.alibaba.weex">
diff --git a/android/playground/app/src/main/assets/animation.js b/android/playground/app/src/main/assets/animation.js
index 32b96e6..6ae347a 100644
--- a/android/playground/app/src/main/assets/animation.js
+++ b/android/playground/app/src/main/assets/animation.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4371c408c20969c65a13d9fa5a51d925"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -780,8 +788,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/a-demo.js b/android/playground/app/src/main/assets/component/a-demo.js
index 0486d19..56e085d 100644
--- a/android/playground/app/src/main/assets/component/a-demo.js
+++ b/android/playground/app/src/main/assets/component/a-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "bd7d951b8dffd3ab47133123e937e3a0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/countdown-demo.js b/android/playground/app/src/main/assets/component/countdown-demo.js
index cd44af4..434348c 100644
--- a/android/playground/app/src/main/assets/component/countdown-demo.js
+++ b/android/playground/app/src/main/assets/component/countdown-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "42bc563b62a414952e3bc04aace7897c"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/image-demo.js b/android/playground/app/src/main/assets/component/image-demo.js
index 1a0aa66..fb15249 100644
--- a/android/playground/app/src/main/assets/component/image-demo.js
+++ b/android/playground/app/src/main/assets/component/image-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "e2de07c3eed6548e5195268fa9599669"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2319,7 +2326,7 @@
 	__webpack_require__(4);
 	module.exports = {
 	  data: function () {return {
-	    img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    img: 'http://gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
 	  }}
 	};}
 	/* generated by weex-loader */
diff --git a/android/playground/app/src/main/assets/component/input-demo.js b/android/playground/app/src/main/assets/component/input-demo.js
index 396a1d1..f7ba9ec 100644
--- a/android/playground/app/src/main/assets/component/input-demo.js
+++ b/android/playground/app/src/main/assets/component/input-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7433ba4d5d8f30fe6d5e3d9db6fb3cf5"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/list/list-basic.js b/android/playground/app/src/main/assets/component/list/list-basic.js
index f059d98..37bd7ea 100644
--- a/android/playground/app/src/main/assets/component/list/list-basic.js
+++ b/android/playground/app/src/main/assets/component/list/list-basic.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "2eeb35e809bccd8c518a92942ff0205e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/list/list-demo-horizon.js b/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
index ab83a04..db9b80f 100644
--- a/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
+++ b/android/playground/app/src/main/assets/component/list/list-demo-horizon.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "0fe05660e286b278d48fbe62da79bf4e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/list/list-demo.js b/android/playground/app/src/main/assets/component/list/list-demo.js
index af38db0..4db50da 100644
--- a/android/playground/app/src/main/assets/component/list/list-demo.js
+++ b/android/playground/app/src/main/assets/component/list/list-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f49cbcb21d54f4a3a48fecc9429d1df2"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/marquee-demo.js b/android/playground/app/src/main/assets/component/marquee-demo.js
index eef482e..3261b55 100644
--- a/android/playground/app/src/main/assets/component/marquee-demo.js
+++ b/android/playground/app/src/main/assets/component/marquee-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ae96d8382266c0d24fad5c641b084827"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/navigator-demo.js b/android/playground/app/src/main/assets/component/navigator-demo.js
index 3c4cff0..8c7e365 100644
--- a/android/playground/app/src/main/assets/component/navigator-demo.js
+++ b/android/playground/app/src/main/assets/component/navigator-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "992133479ab7de90b597406bf57d9e30"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2221,14 +2228,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/process-bar-demo.js b/android/playground/app/src/main/assets/component/process-bar-demo.js
index 47cf7fd..90a3206 100644
--- a/android/playground/app/src/main/assets/component/process-bar-demo.js
+++ b/android/playground/app/src/main/assets/component/process-bar-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "3771bf113fd85c270d38518ea7af1a5f"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/scroller-demo.js b/android/playground/app/src/main/assets/component/scroller-demo.js
index c569bec..6513791 100644
--- a/android/playground/app/src/main/assets/component/scroller-demo.js
+++ b/android/playground/app/src/main/assets/component/scroller-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7e81a5d2d50e2dcff9daf08e7329aff1"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js b/android/playground/app/src/main/assets/component/slider-neighbor/index.js
similarity index 69%
rename from android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js
rename to android/playground/app/src/main/assets/component/slider-neighbor/index.js
index eaad725..a6ce716 100644
--- a/android/playground/app/src/main/assets/component/slider-neighbor/silder-neighbor.js
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/index.js
@@ -48,7 +48,7 @@
 	var __weex_template__ = __webpack_require__(151)
 	var __weex_script__ = __webpack_require__(152)
 
-	__weex_define__('@weex-component/4abbbff77bbabe33ce2a4c6bd84a533a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+	__weex_define__('@weex-component/3157b803090c07c091af8fa3147f3d5c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
 	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
 	    if (__weex_exports__.__esModule && __weex_exports__.default) {
@@ -59,7 +59,7 @@
 
 	})
 
-	__weex_bootstrap__('@weex-component/4abbbff77bbabe33ce2a4c6bd84a533a',undefined,undefined)
+	__weex_bootstrap__('@weex-component/3157b803090c07c091af8fa3147f3d5c',undefined,undefined)
 
 /***/ },
 
@@ -67,7 +67,7 @@
 /***/ function(module, exports) {
 
 	module.exports = {
-	  "type": "scroller",
+	  "type": "div",
 	  "style": {
 	    "flexDirection": "column",
 	    "backgroundColor": "#ffffff",
@@ -77,19 +77,14 @@
 	  },
 	  "children": [
 	    {
-	      "type": "tc_support_maintitle",
-	      "attr": {
-	        "title": "AG_Test_Slider-Neighbor_Auto_Play"
-	      }
-	    },
-	    {
 	      "type": "div",
 	      "style": {
-	        "height": 410,
-	        "borderWidth": 3,
+	        "width": 700,
+	        "height": 400,
+	        "borderWidth": 1,
 	        "borderStyle": "solid",
 	        "borderColor": "#000000",
-	        "margin": 10
+	        "margin": 0
 	      },
 	      "children": [
 	        {
@@ -99,75 +94,57 @@
 	            "height": 400
 	          },
 	          "attr": {
-	            "neighborScale": "0.7",
+	            "neighborScale": "0.8",
+	            "neighborSpace": "30",
+	            "currentItemScale": "0.90",
 	            "interval": "3000",
 	            "neighborAlpha": "0.8",
 	            "autoPlay": function () {return this.attr_auto_play}
 	          },
 	          "children": [
 	            {
-	              "type": "container",
-	              "children": [
-	                {
-	                  "type": "image",
-	                  "style": {
-	                    "width": 650,
-	                    "backgroundColor": "#FFFFDF",
-	                    "height": 400
-	                  },
-	                  "attr": {
-	                    "src": "https://gw.alicdn.com/tps/TB1dzanMVXXXXXQXVXXXXXXXXXX-573-412.png"
-	                  }
-	                }
-	              ]
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1dzanMVXXXXXQXVXXXXXXXXXX-573-412.png"
+	              }
 	            },
 	            {
-	              "type": "container",
-	              "children": [
-	                {
-	                  "type": "image",
-	                  "style": {
-	                    "width": 650,
-	                    "backgroundColor": "#FFFFDF",
-	                    "height": 400
-	                  },
-	                  "attr": {
-	                    "src": "https://gw.alicdn.com/tps/TB1p9CCMVXXXXa_XFXXXXXXXXXX-450-340.png"
-	                  }
-	                }
-	              ]
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1p9CCMVXXXXa_XFXXXXXXXXXX-450-340.png"
+	              }
 	            },
 	            {
-	              "type": "container",
-	              "children": [
-	                {
-	                  "type": "image",
-	                  "style": {
-	                    "width": 650,
-	                    "backgroundColor": "#FFFFDF",
-	                    "height": 400
-	                  },
-	                  "attr": {
-	                    "src": "https://gw.alicdn.com/tps/TB1zpSiMVXXXXchXFXXXXXXXXXX-448-338.png"
-	                  }
-	                }
-	              ]
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1zpSiMVXXXXchXFXXXXXXXXXX-448-338.png"
+	              }
 	            },
 	            {
-	              "type": "container",
-	              "children": [
-	                {
-	                  "type": "image",
-	                  "style": {
-	                    "width": 650,
-	                    "backgroundColor": "#FFFFDF",
-	                    "height": 400
-	                  },
-	                  "attr": {
-	                    "src": "https://gw.alicdn.com/tps/TB1EuGIMVXXXXcoXpXXXXXXXXXX-452-337.png"
-	                  }
-	                }
-	              ]
+	              "type": "image",
+	              "style": {
+	                "width": 600,
+	                "backgroundColor": "#FFFFDF",
+	                "height": 400
+	              },
+	              "attr": {
+	                "src": "https://gw.alicdn.com/tps/TB1EuGIMVXXXXcoXpXXXXXXXXXX-452-337.png"
+	              }
 	            },
 	            {
 	              "type": "indicator",
@@ -187,7 +164,7 @@
 	      ]
 	    },
 	    {
-	      "type": "scroller",
+	      "type": "div",
 	      "style": {
 	        "height": 100,
 	        "borderWidth": 0,
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
index 79eed2a..4cfac3a 100644
--- a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "a58f9d1c2bcd30bc0d09fdba96a34ed9"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
index 335e7e6..a7c001c 100644
--- a/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
+++ b/android/playground/app/src/main/assets/component/slider-neighbor/slider-neighbor-page.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "b9409ec1aa3cbde7167d1d8be94da60b"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/slider/index.js b/android/playground/app/src/main/assets/component/slider/index.js
index 7fa54f1..3dd51b6 100644
--- a/android/playground/app/src/main/assets/component/slider/index.js
+++ b/android/playground/app/src/main/assets/component/slider/index.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "c856213bf680d7edaca1e292bf1c353e"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -524,8 +532,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2328,6 +2335,39 @@
 	              ]
 	            }
 	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "auto-play = true & scrollable = false",
+	            "paddingBody": "0"
+	          },
+	          "children": [
+	            {
+	              "type": "slider",
+	              "classList": [
+	                "slider"
+	              ],
+	              "append": "tree",
+	              "attr": {
+	                "interval": function () {return this.sliders[0].interval},
+	                "autoPlay": function () {return this.sliders[0].autoPlay},
+	                "scrollable": "false"
+	              },
+	              "children": [
+	                {
+	                  "type": "indicator",
+	                  "classList": [
+	                    "indicator"
+	                  ]
+	                },
+	                {
+	                  "type": "slider-page",
+	                  "repeat": function () {return this.sliders[0].sliderPages}
+	                }
+	              ]
+	            }
+	          ]
 	        }
 	      ]
 	    },
diff --git a/android/playground/app/src/main/assets/component/slider/slider-item.js b/android/playground/app/src/main/assets/component/slider/slider-item.js
index 2465a57..6b667d2 100644
--- a/android/playground/app/src/main/assets/component/slider/slider-item.js
+++ b/android/playground/app/src/main/assets/component/slider/slider-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "34acca66a0e62b4f42973fd76d844b2a"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/slider/slider-page.js b/android/playground/app/src/main/assets/component/slider/slider-page.js
index 908b680..43bd70f 100644
--- a/android/playground/app/src/main/assets/component/slider/slider-page.js
+++ b/android/playground/app/src/main/assets/component/slider/slider-page.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "f98c63bc90652387ecc5012f97344e01"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js b/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
index 5169593..8f2019d 100644
--- a/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
+++ b/android/playground/app/src/main/assets/component/tabbar/tabbar-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "912dfb1184b615aad9a037b71b619c20"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2064,14 +2071,14 @@
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
-	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj; };
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
 	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
 	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	} : function (obj) {
-	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
 	};
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js b/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
index f172eb3..7216c2e 100644
--- a/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
+++ b/android/playground/app/src/main/assets/component/tabbar/tabbar-item.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "4fd57e31e564370c775b265d3fdb4733"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/component/text-demo.js b/android/playground/app/src/main/assets/component/text-demo.js
index 9299bbe..6fb0fab 100644
--- a/android/playground/app/src/main/assets/component/text-demo.js
+++ b/android/playground/app/src/main/assets/component/text-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "7a417d023cb6eb6ea5079386a155fec5"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2310,6 +2317,114 @@
 	          "attr": {
 	            "value": "bold"
 	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "100"
+	          },
+	          "attr": {
+	            "value": "100"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "200"
+	          },
+	          "attr": {
+	            "value": "200"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "300"
+	          },
+	          "attr": {
+	            "value": "300"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "400"
+	          },
+	          "attr": {
+	            "value": "400"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "500"
+	          },
+	          "attr": {
+	            "value": "500"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "600"
+	          },
+	          "attr": {
+	            "value": "600"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "700"
+	          },
+	          "attr": {
+	            "value": "700"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "800"
+	          },
+	          "attr": {
+	            "value": "800"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "txt"
+	          ],
+	          "style": {
+	            "fontWeight": "900"
+	          },
+	          "attr": {
+	            "value": "900"
+	          }
 	        }
 	      ]
 	    },
diff --git a/android/playground/app/src/main/assets/component/video-demo.js b/android/playground/app/src/main/assets/component/video-demo.js
index 231ed7f..fbefb37 100644
--- a/android/playground/app/src/main/assets/component/video-demo.js
+++ b/android/playground/app/src/main/assets/component/video-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "29348b4180a8c78e3a6cd4b260b74774"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
diff --git a/android/playground/app/src/main/assets/component/web-demo.js b/android/playground/app/src/main/assets/component/web-demo.js
index 22db7f3..61a3248 100644
--- a/android/playground/app/src/main/assets/component/web-demo.js
+++ b/android/playground/app/src/main/assets/component/web-demo.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "3a484987637f61a6bce81312d94081e0"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -523,8 +531,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2254,7 +2261,6 @@
 	module.exports = {
 	    methods: {
 	        goback: function goback() {
-	            var $webview = __weex_require__('@weex-module/webview');
 	            var webElement = this.$el('webview');
 	            $webview.goBack(webElement.ref);
 	        },
diff --git a/android/playground/app/src/main/assets/error.js b/android/playground/app/src/main/assets/error.js
new file mode 100644
index 0000000..2b0ade1
--- /dev/null
+++ b/android/playground/app/src/main/assets/error.js
@@ -0,0 +1,2217 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(185)
+	var __weex_script__ = __webpack_require__(186)
+
+	__weex_define__('@weex-component/a62071d3ca8239528c69d72539119e08', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/a62071d3ca8239528c69d72539119e08',undefined,undefined)
+
+/***/ },
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(5);
+	__webpack_require__(9);
+	__webpack_require__(13);
+	__webpack_require__(17);
+	__webpack_require__(21);
+	__webpack_require__(25);
+	__webpack_require__(66);
+	__webpack_require__(70);
+	__webpack_require__(74);
+	__webpack_require__(78);
+	__webpack_require__(79);
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(6)
+	var __weex_style__ = __webpack_require__(7)
+	var __weex_script__ = __webpack_require__(8)
+
+	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    size: 'large',
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(10)
+	var __weex_style__ = __webpack_require__(11)
+	var __weex_script__ = __webpack_require__(12)
+
+	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['h' + (this.level)]},
+	  "style": {
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['txt-h' + (this.level)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 11 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    level: 1,
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(14)
+	var __weex_style__ = __webpack_require__(15)
+	var __weex_script__ = __webpack_require__(16)
+
+	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "events": {
+	    "touchstart": "touchstart",
+	    "touchend": "touchend"
+	  },
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    bgColor: '#ffffff'
+	  }},
+	  methods: {
+	    touchstart: function touchstart() {},
+	    touchend: function touchend() {}
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(18)
+	var __weex_style__ = __webpack_require__(19)
+	var __weex_script__ = __webpack_require__(20)
+
+	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
+	  "style": {
+	    "borderWidth": function () {return this.border}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingHead},
+	        "paddingBottom": function () {return this.paddingHead},
+	        "paddingLeft": function () {return this.paddingHead*1.5},
+	        "paddingRight": function () {return this.paddingHead*1.5}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingBody},
+	        "paddingBottom": function () {return this.paddingBody},
+	        "paddingLeft": function () {return this.paddingBody*1.5},
+	        "paddingRight": function () {return this.paddingBody*1.5}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    title: '',
+	    paddingBody: 20,
+	    paddingHead: 20,
+	    dataClass: '',
+	    border: 0
+	  }},
+	  ready: function ready() {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(22)
+	var __weex_style__ = __webpack_require__(23)
+	var __weex_script__ = __webpack_require__(24)
+
+	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'success',
+	    value: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(26)
+	var __weex_style__ = __webpack_require__(27)
+	var __weex_script__ = __webpack_require__(28)
+
+	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "overflow": "hidden",
+	    "flexDirection": "row"
+	  },
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _assign = __webpack_require__(29);
+
+	var _assign2 = _interopRequireDefault(_assign);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        now: 0,
+	        remain: 0,
+	        time: {
+	            elapse: 0,
+	            D: '0',
+	            DD: '0',
+	            h: '0',
+	            hh: '00',
+	            H: '0',
+	            HH: '0',
+	            m: '0',
+	            mm: '00',
+	            M: '0',
+	            MM: '0',
+	            s: '0',
+	            ss: '00',
+	            S: '0',
+	            SS: '0'
+	        },
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.remain <= 0) {
+	            return;
+	        }
+
+	        this.now = Date.now();
+	        this.nextTick();
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            if (this.outofview) {
+	                setTimeout(this.nextTick.bind(this), 1000);
+	            } else {
+	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
+
+	                if (this.calc()) {
+	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
+	                    setTimeout(this.nextTick.bind(this), 1000);
+	                } else {
+	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
+	                }
+	                this._app.updateActions();
+	            }
+	        },
+	        format: function format(str) {
+	            if (str.length >= 2) {
+	                return str;
+	            } else {
+	                return '0' + str;
+	            }
+	        },
+	        calc: function calc() {
+	            var remain = this.remain - this.time.elapse;
+	            if (remain < 0) {
+	                remain = 0;
+	            }
+	            this.time.D = String(parseInt(remain / 86400));
+	            this.time.DD = this.format(this.time.D);
+	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
+	            this.time.hh = this.format(this.time.h);
+	            this.time.H = String(parseInt(remain / 3600));
+	            this.time.HH = this.format(this.time.H);
+	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
+	            this.time.mm = this.format(this.time.m);
+	            this.time.M = String(parseInt(remain / 60));
+	            this.time.MM = this.format(this.time.M);
+	            this.time.s = String(remain - parseInt(this.time.M) * 60);
+	            this.time.ss = this.format(this.time.s);
+	            this.time.S = String(remain);
+	            this.time.SS = this.format(this.time.S);
+
+	            return remain > 0;
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(30), __esModule: true };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(31);
+	module.exports = __webpack_require__(34).Object.assign;
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(32);
+
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 43 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(48)
+	  , gOPS     = __webpack_require__(63)
+	  , pIE      = __webpack_require__(64)
+	  , toObject = __webpack_require__(65)
+	  , IObject  = __webpack_require__(52)
+	  , $assign  = Object.assign;
+
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(43)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(49)
+	  , enumBugKeys = __webpack_require__(62);
+
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(50)
+	  , toIObject    = __webpack_require__(51)
+	  , arrayIndexOf = __webpack_require__(55)(false)
+	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
+
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(52)
+	  , defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(53);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 53 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(51)
+	  , toLength  = __webpack_require__(56)
+	  , toIndex   = __webpack_require__(58);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(57)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(60)('keys')
+	  , uid    = __webpack_require__(61);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(33)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 63 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(67)
+	var __weex_style__ = __webpack_require__(68)
+	var __weex_script__ = __webpack_require__(69)
+
+	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrap"
+	  ],
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "anim",
+	      "classList": [
+	        "anim"
+	      ],
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+/* 69 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        step: 0,
+	        count: 0,
+	        index: 1,
+	        duration: 0,
+	        interval: 0,
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	            this.nextTick();
+	        }
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            var self = this;
+	            if (this.outofview) {
+	                setTimeout(self.nextTick.bind(self), self.interval);
+	            } else {
+	                setTimeout(function () {
+	                    self.animation(self.nextTick.bind(self));
+	                }, self.interval);
+	            }
+	        },
+	        animation: function animation(cb) {
+	            var self = this;
+	            var offset = -self.step * self.index;
+	            var $animation = __weex_require__('@weex-module/animation');
+	            $animation.transition(this.$el('anim'), {
+	                styles: {
+	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
+	                },
+	                timingFunction: 'ease',
+	                duration: self.duration
+	            }, function () {
+	                self.index = (self.index + 1) % self.count;
+	                self.$emit('change', {
+	                    index: self.index,
+	                    count: self.count
+	                });
+	                cb && cb();
+	            });
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(71)
+	var __weex_style__ = __webpack_require__(72)
+	var __weex_script__ = __webpack_require__(73)
+
+	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "height": function () {return this.height},
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "attr": {
+	    "dataRole": function () {return this.dataRole}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "right-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.rightItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "value": function () {return this.rightItemTitle}
+	      },
+	      "shown": function () {return !this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "right-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "src": function () {return this.rightItemSrc}
+	      },
+	      "shown": function () {return this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "left-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.leftItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "value": function () {return this.leftItemTitle}
+	      },
+	      "shown": function () {return !this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "left-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "src": function () {return this.leftItemSrc}
+	      },
+	      "shown": function () {return this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "center-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "center",
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+
+	    backgroundColor: 'black',
+
+	    height: 88,
+
+	    title: "",
+
+	    titleColor: 'black',
+
+	    rightItemSrc: '',
+
+	    rightItemTitle: '',
+
+	    rightItemColor: 'black',
+
+	    leftItemSrc: '',
+
+	    leftItemTitle: '',
+
+	    leftItemColor: 'black'
+	  }},
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$dispatch('naviBar.rightItem.click', {});
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$dispatch('naviBar.leftItem.click', {});
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(70)
+	var __weex_template__ = __webpack_require__(75)
+	var __weex_style__ = __webpack_require__(76)
+	var __weex_script__ = __webpack_require__(77)
+
+	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "wxc-navbar",
+	      "attr": {
+	        "dataRole": function () {return this.dataRole},
+	        "height": function () {return this.height},
+	        "backgroundColor": function () {return this.backgroundColor},
+	        "title": function () {return this.title},
+	        "titleColor": function () {return this.titleColor},
+	        "leftItemSrc": function () {return this.leftItemSrc},
+	        "leftItemTitle": function () {return this.leftItemTitle},
+	        "leftItemColor": function () {return this.leftItemColor},
+	        "rightItemSrc": function () {return this.rightItemSrc},
+	        "rightItemTitle": function () {return this.rightItemTitle},
+	        "rightItemColor": function () {return this.rightItemColor}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "wrapper"
+	      ],
+	      "style": {
+	        "marginTop": function () {return this.height}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+	    backgroundColor: 'black',
+	    height: 88,
+	    title: "",
+	    titleColor: 'black',
+	    rightItemSrc: '',
+	    rightItemTitle: '',
+	    rightItemColor: 'black',
+	    leftItemSrc: '',
+	    leftItemTitle: '',
+	    leftItemColor: 'black'
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(79)
+	var __weex_template__ = __webpack_require__(83)
+	var __weex_style__ = __webpack_require__(84)
+	var __weex_script__ = __webpack_require__(85)
+
+	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(80)
+	var __weex_style__ = __webpack_require__(81)
+	var __weex_script__ = __webpack_require__(82)
+
+	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "events": {
+	    "click": "onclickitem"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "classList": [
+	        "top-line"
+	      ],
+	      "attr": {
+	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "tab-icon"
+	      ],
+	      "attr": {
+	        "src": function () {return this.icon}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "tab-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+/* 82 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    index: 0,
+	    title: '',
+	    titleColor: '#000000',
+	    icon: '',
+	    backgroundColor: '#ffffff'
+	  }},
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var vm = this;
+	      var params = {
+	        index: vm.index
+	      };
+	      vm.$dispatch('tabItem.onClick', params);
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "embed",
+	      "classList": [
+	        "content"
+	      ],
+	      "style": {
+	        "visibility": function () {return this.visibility}
+	      },
+	      "repeat": function () {return this.tabItems},
+	      "attr": {
+	        "src": function () {return this.src},
+	        "type": "weex"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "tabbar"
+	      ],
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "wxc-tabitem",
+	          "repeat": function () {return this.tabItems},
+	          "attr": {
+	            "index": function () {return this.index},
+	            "icon": function () {return this.icon},
+	            "title": function () {return this.title},
+	            "titleColor": function () {return this.titleColor}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 84 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    tabItems: [],
+	    selectedIndex: 0,
+	    selectedColor: '#ff0000',
+	    unselectedColor: '#000000'
+	  }},
+	  created: function created() {
+	    this.selected(this.selectedIndex);
+
+	    this.$on('tabItem.onClick', function (e) {
+	      var detail = e.detail;
+	      this.selectedIndex = detail.index;
+	      this.selected(detail.index);
+
+	      var params = {
+	        index: detail.index
+	      };
+	      this.$dispatch('tabBar.onClick', params);
+	    });
+	  },
+	  methods: {
+	    selected: function selected(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "attr": {
+	        "src": "http://gw.alicdn.com/mt/TB1GJDuMVXXXXbMaXXXXXXXXXXX-200-200.png"
+	      },
+	      "style": {
+	        "width": 200,
+	        "height": 200,
+	        "margin": 30
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 40
+	      },
+	      "attr": {
+	        "value": "你访问的资源不存在"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 30,
+	        "margin": 30,
+	        "color": "#999999"
+	      },
+	      "attr": {
+	        "value": "去看看其他页面吧"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "borderWidth": 3,
+	        "borderRadius": 8,
+	        "borderColor": "#A9A9A9"
+	      },
+	      "events": {
+	        "click": "go_home"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 45,
+	            "marginTop": 16,
+	            "marginBottom": 16,
+	            "marginLeft": 45,
+	            "marginRight": 45
+	          },
+	          "attr": {
+	            "value": "去首页"
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 186 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){"use strict";
+
+	__webpack_require__(4);
+	module.exports = {
+	    data: function () {return {}},
+	    methods: {
+	        go_home: function go_home(event) {
+	            this.$openURL("https://www.taobao.com");
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/geolocation.js b/android/playground/app/src/main/assets/geolocation.js
new file mode 100644
index 0000000..09b72b4
--- /dev/null
+++ b/android/playground/app/src/main/assets/geolocation.js
@@ -0,0 +1,183 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(187)
+	var __weex_script__ = __webpack_require__(188)
+
+	__weex_define__('@weex-component/c1022e7ee9ce09ed1eadcf7bffe1b341', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/c1022e7ee9ce09ed1eadcf7bffe1b341',undefined,undefined)
+
+/***/ },
+
+/***/ 34:
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 187:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "alignItems": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 30,
+	            "color": "#000000"
+	          },
+	          "attr": {
+	            "value": function () {return this.location}
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 35,
+	            "color": "#FFA07A"
+	          },
+	          "attr": {
+	            "value": function () {return this.watchlocation}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 188:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){"use strict";
+
+	var _stringify = __webpack_require__(189);
+
+	var _stringify2 = _interopRequireDefault(_stringify);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        location: "等待定位数据",
+	        watchlocation: "watch location",
+	        i: 0
+	    }},
+	    created: function created() {
+	        var geolocation = __weex_require__('@weex-module/geolocation');
+	        geolocation.getCurrentPosition(function (result) {
+	            console.log("into--[getCurrentPosition success] result:" + (0, _stringify2.default)(result));
+	            this.location = (0, _stringify2.default)(result);
+	        }.bind(this), function (result) {
+	            console.log("into--[getCurrentPosition error] result:" + (0, _stringify2.default)(result));
+	            this.location = (0, _stringify2.default)(result);
+	        }.bind(this), { enableHighAcuracy: false, address: true });
+
+	        geolocation.watchPosition(function (result) {
+	            console.log("into--[watchPosition success] result:" + (0, _stringify2.default)(result));
+	            var str = this.watchlocation + '\n' + (0, _stringify2.default)(result);
+	            this.watchlocation = str;
+	            this.i += 1;
+
+	            if (this.i == 2) {
+	                geolocation.clearWatch(result.registerId);
+	                __weex_require__('@weex-module/modal').toast({
+	                    'message': "[clear watch] id:" + result.registerId,
+	                    'duration': 1
+	                });
+	            }
+	        }.bind(this), function (result) {
+	            console.log("into--[watchPosition success] result:" + (0, _stringify2.default)(result));
+	            this.watchlocation = (0, _stringify2.default)(result);
+	        }.bind(this), { enableHighAcuracy: false, address: true });
+	    },
+	    methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 189:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(190), __esModule: true };
+
+/***/ },
+
+/***/ 190:
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/hello.js b/android/playground/app/src/main/assets/hello.js
index f445dee..44f8cf3 100644
--- a/android/playground/app/src/main/assets/hello.js
+++ b/android/playground/app/src/main/assets/hello.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "86ed5dd60f58efe1a84b64e8c7eacb7a"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/hello_weex.js b/android/playground/app/src/main/assets/hello_weex.js
deleted file mode 100644
index fddcc12..0000000
--- a/android/playground/app/src/main/assets/hello_weex.js
+++ /dev/null
@@ -1,28 +0,0 @@
-define('@weex-component/037a188b382be8b4caa073b6cf436427', function(require, exports, module) {
-
-    ;
-
-    ;
-    module.exports.style = {}
-
-    ;
-    module.exports.template = {
-        "type": "div",
-        "children": [{
-            "type": "text",
-            "style": {
-                "fontSize": 100
-            },
-            "attr": {
-                "value": "Hello World."
-            }
-        }]
-    }
-
-    ;
-})
-
-// require module
-bootstrap('@weex-component/037a188b382be8b4caa073b6cf436427', {
-    "transformerVersion": "0.3.1"
-})
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/iconfont.js b/android/playground/app/src/main/assets/iconfont.js
index 06176a5..14b0c16 100644
--- a/android/playground/app/src/main/assets/iconfont.js
+++ b/android/playground/app/src/main/assets/iconfont.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "6ee7e2ff19346198a8505e7e4911ff81"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
diff --git a/android/playground/app/src/main/assets/index.js b/android/playground/app/src/main/assets/index.js
index df12bd1..1264d6b 100644
--- a/android/playground/app/src/main/assets/index.js
+++ b/android/playground/app/src/main/assets/index.js
@@ -2958,7 +2958,7 @@
 	module.exports = {
 	  data: function () {return {
 	    root: 'examples',
-	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'Instance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }]
+	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'linear-gradient', title: 'Gradient Color' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/slider-neighbor/index', title: 'Slider Neighbor' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'Instance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/websocket-demo', title: 'WebSocket' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }, { name: 'showcase/pseudo-class', title: 'PseudoClass' }]
 	  }}
 	};}
 	/* generated by weex-loader */
diff --git a/android/playground/app/src/main/assets/linear-gradient.js b/android/playground/app/src/main/assets/linear-gradient.js
new file mode 100644
index 0000000..3866ce5
--- /dev/null
+++ b/android/playground/app/src/main/assets/linear-gradient.js
@@ -0,0 +1,367 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(205)
+	var __weex_style__ = __webpack_require__(206)
+
+	__weex_define__('@weex-component/695f94322dfa977e2812d2616f20e495', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/695f94322dfa977e2812d2616f20e495',undefined,undefined)
+
+/***/ },
+
+/***/ 205:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "style": {
+	    "backgroundColor": "#3a3a3a"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to right,#43C6AC,#F8FFAE)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to right"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to left,#DCE35B,#45B649)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to left"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to bottom,#3494E6,#EC6EAD)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to bottom"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to top,#ee0979,#ff6a00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to top"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "flexDirection": "row",
+	        "alignItems": "center",
+	        "justifyContent": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to bottom right,#00c3ff,#ffff1c)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to bottom right"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to top left,#ff00cc,#333399)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to top left"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to right,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to right"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to left,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to left"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to bottom,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to bottom"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "container1"
+	      ],
+	      "style": {
+	        "backgroundImage": "linear-gradient(to top,#a80077,#66ff00)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "direction"
+	          ],
+	          "attr": {
+	            "value": "to top"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "flexDirection": "row",
+	        "alignItems": "center",
+	        "justifyContent": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to bottom right,#a80077,#66ff00)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to bottom right"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "classList": [
+	            "container2"
+	          ],
+	          "style": {
+	            "backgroundImage": "linear-gradient(to top left,#a80077,#66ff00)"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "direction"
+	              ],
+	              "attr": {
+	                "value": "to top left"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 206:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container1": {
+	    "margin": 10,
+	    "width": 730,
+	    "height": 200,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "border": "solid",
+	    "borderRadius": 10
+	  },
+	  "container2": {
+	    "margin": 10,
+	    "width": 300,
+	    "height": 300,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "border": "solid",
+	    "borderRadius": 10
+	  },
+	  "direction": {
+	    "fontSize": 40,
+	    "color": "#FFFFFF"
+	  }
+	}
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/module/clipboard.js b/android/playground/app/src/main/assets/module/clipboard.js
index 52eb12e..6b9e504 100644
--- a/android/playground/app/src/main/assets/module/clipboard.js
+++ b/android/playground/app/src/main/assets/module/clipboard.js
@@ -1,3 +1,11 @@
+/*!197
+ * {
+ *   version: "0.4.0.20170207",
+ *   create: "20170207145011",
+ *   git: "origin-taobao/u4_v8_shared_sdk_jsfm-feature-0.19--027e045",
+ *   digest: "ec884d99f54fb0db5203d061a7d1f15d"
+ * }
+ !*/
 /******/ (function(modules) { // webpackBootstrap
 /******/ 	// The module cache
 /******/ 	var installedModules = {};
@@ -44,8 +52,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(205)
-	var __weex_script__ = __webpack_require__(206)
+	var __weex_template__ = __webpack_require__(207)
+	var __weex_script__ = __webpack_require__(208)
 
 	__weex_define__('@weex-component/e93e729eb05598f04027627a24c804bf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -520,8 +528,7 @@
 	  "panel-header-danger": {
 	    "backgroundColor": "rgb(217,83,79)",
 	    "color": "#ffffff"
-	  },
-	  "panel-body": {}
+	  }
 	}
 
 /***/ },
@@ -2158,7 +2165,9 @@
 /* 202 */,
 /* 203 */,
 /* 204 */,
-/* 205 */
+/* 205 */,
+/* 206 */,
+/* 207 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2252,7 +2261,7 @@
 	}
 
 /***/ },
-/* 206 */
+/* 208 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2281,22 +2290,23 @@
 	    },
 
 	    doCopy: function doCopy() {
-	      textToCopy = "autoGenerateTextToCopy" + Math.random();
+	      var self = this;
+	      var textToCopy = "autoGenerateTextToCopy" + Math.random();
 
-	      var $clipboard = __weex_require__('@weex-module/clipboard');
-	      $clipboard.setString(textToCopy);
+	      var clipboard = __weex_require__('@weex-module/clipboard');
+	      clipboard.setString(textToCopy);
 
-	      this.textToCopy = textToCopy;
-	      this.tips = "copy done. Now system clipboard has string of '" + textToCopy + "', try PASTE button, or paste in another app.";
+	      self.textToCopy = textToCopy;
+	      self.tips = "copy done. Now system clipboard has string of '" + textToCopy + "', try PASTE button, or paste in another app.";
 	    },
 
 	    doPaste: function doPaste() {
-	      var $clipboard = __weex_require__('@weex-module/clipboard');
+	      var clipboard = __weex_require__('@weex-module/clipboard');
 	      var me = this;
-	      $clipboard.getString(function (ret) {
+	      clipboard.getString(function (ret) {
 	        console.log("paste result is " + (0, _stringify2.default)(ret));
 
-	        me.textFromPaste = ret.data;
+	        me.textFromPaste = (0, _stringify2.default)(ret);
 	        me.tips = "Paste done. Only support native(Android/iOS) NOW. according to security reason, paste in html5 is not supported.";
 	      });
 	    }
diff --git a/android/playground/app/src/main/assets/module/componentRect.js b/android/playground/app/src/main/assets/module/componentRect.js
index 10bb3ce..f8e1d32 100644
--- a/android/playground/app/src/main/assets/module/componentRect.js
+++ b/android/playground/app/src/main/assets/module/componentRect.js
@@ -45,9 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(207)
-	var __weex_style__ = __webpack_require__(208)
-	var __weex_script__ = __webpack_require__(209)
+	__webpack_require__(209)
+	var __weex_template__ = __webpack_require__(213)
+	var __weex_style__ = __webpack_require__(214)
+	var __weex_script__ = __webpack_require__(215)
 
 	__weex_define__('@weex-component/3cccb00caad47f9888c7597d009c670e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +67,101 @@
 
 /***/ },
 
-/***/ 207:
+/***/ 209:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(210)
+	var __weex_style__ = __webpack_require__(211)
+	var __weex_script__ = __webpack_require__(212)
+
+	__weex_define__('@weex-component/multi-text', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+
+/***/ 210:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "flexDirection": "row"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "text-style",
+	        "text-descript"
+	      ],
+	      "attr": {
+	        "value": function () {return this.descript}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "text-style",
+	        "text-detail"
+	      ],
+	      "attr": {
+	        "value": function () {return this.detail}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 211:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "text-style": {
+	    "fontSize": 30,
+	    "marginTop": 15,
+	    "marginLeft": 15,
+	    "marginBottom": 15
+	  },
+	  "text-descript": {
+	    "fontWeight": "bold",
+	    "flex": 1
+	  },
+	  "text-detail": {
+	    "flex": 1
+	  }
+	}
+
+/***/ },
+
+/***/ 212:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    descript: '',
+	    detail: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 213:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -335,7 +430,7 @@
 
 /***/ },
 
-/***/ 208:
+/***/ 214:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -412,7 +507,7 @@
 
 /***/ },
 
-/***/ 209:
+/***/ 215:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/module/instance-api.js b/android/playground/app/src/main/assets/module/instance-api.js
index 94234d3..512d721 100644
--- a/android/playground/app/src/main/assets/module/instance-api.js
+++ b/android/playground/app/src/main/assets/module/instance-api.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(210)
-	var __weex_script__ = __webpack_require__(211)
+	var __weex_template__ = __webpack_require__(216)
+	var __weex_script__ = __webpack_require__(217)
 
 	__weex_define__('@weex-component/2c1f438ffab50b73880065c54d5a1b0c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2163,7 +2163,13 @@
 /* 207 */,
 /* 208 */,
 /* 209 */,
-/* 210 */
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2188,7 +2194,7 @@
 	}
 
 /***/ },
-/* 211 */
+/* 217 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/module/modal.js b/android/playground/app/src/main/assets/module/modal.js
index d541347..a98d0d0 100644
--- a/android/playground/app/src/main/assets/module/modal.js
+++ b/android/playground/app/src/main/assets/module/modal.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(212)
-	var __weex_style__ = __webpack_require__(213)
-	var __weex_script__ = __webpack_require__(214)
+	var __weex_template__ = __webpack_require__(218)
+	var __weex_style__ = __webpack_require__(219)
+	var __weex_script__ = __webpack_require__(220)
 
 	__weex_define__('@weex-component/3e30f1e2562a57b329ab7ebd1387f07b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2154,7 +2154,13 @@
 /* 209 */,
 /* 210 */,
 /* 211 */,
-/* 212 */
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2228,13 +2234,13 @@
 	}
 
 /***/ },
-/* 213 */
+/* 219 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 214 */
+/* 220 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/module/picker-demo.js b/android/playground/app/src/main/assets/module/picker-demo.js
index d463747..2f2e1c8 100644
--- a/android/playground/app/src/main/assets/module/picker-demo.js
+++ b/android/playground/app/src/main/assets/module/picker-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(215)
-	var __weex_style__ = __webpack_require__(216)
-	var __weex_script__ = __webpack_require__(217)
+	var __weex_template__ = __webpack_require__(221)
+	var __weex_style__ = __webpack_require__(222)
+	var __weex_script__ = __webpack_require__(223)
 
 	__weex_define__('@weex-component/713f21e067b638ad251dbcb7d5b37be5', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2157,7 +2157,13 @@
 /* 212 */,
 /* 213 */,
 /* 214 */,
-/* 215 */
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2268,7 +2274,7 @@
 	}
 
 /***/ },
-/* 216 */
+/* 222 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2280,7 +2286,7 @@
 	}
 
 /***/ },
-/* 217 */
+/* 223 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/module/storage-demo.js b/android/playground/app/src/main/assets/module/storage-demo.js
index 3a8147e..5aa0088 100644
--- a/android/playground/app/src/main/assets/module/storage-demo.js
+++ b/android/playground/app/src/main/assets/module/storage-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(218)
-	var __weex_script__ = __webpack_require__(219)
+	var __weex_template__ = __webpack_require__(224)
+	var __weex_script__ = __webpack_require__(225)
 
 	__weex_define__('@weex-component/6f110d391fd7b90c9a19583f6ee1a7cf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2171,7 +2171,13 @@
 /* 215 */,
 /* 216 */,
 /* 217 */,
-/* 218 */
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2260,7 +2266,7 @@
 	}
 
 /***/ },
-/* 219 */
+/* 225 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/module/stream-demo.js b/android/playground/app/src/main/assets/module/stream-demo.js
index 565bc42..36cfffe 100644
--- a/android/playground/app/src/main/assets/module/stream-demo.js
+++ b/android/playground/app/src/main/assets/module/stream-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(220)
-	var __weex_script__ = __webpack_require__(221)
+	var __weex_template__ = __webpack_require__(226)
+	var __weex_script__ = __webpack_require__(227)
 
 	__weex_define__('@weex-component/2c445dcf67fa0895d197edb5ffa2f439', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2173,7 +2173,13 @@
 /* 217 */,
 /* 218 */,
 /* 219 */,
-/* 220 */
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2290,7 +2296,7 @@
 	}
 
 /***/ },
-/* 221 */
+/* 227 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2359,8 +2365,8 @@
 	    stream.fetch({
 	      method: 'POST',
 	      url: POST_URL,
-	      type: 'json'
-	    }, function (ret) {
+	      type: 'json',
+	      body: (0, _stringify2.default)({ username: 'weex' }) }, function (ret) {
 	      if (!ret.ok) {
 	        me.postResult = "request failed";
 	      } else {
diff --git a/android/playground/app/src/main/assets/module/websocket-demo.js b/android/playground/app/src/main/assets/module/websocket-demo.js
new file mode 100644
index 0000000..00a7fbb
--- /dev/null
+++ b/android/playground/app/src/main/assets/module/websocket-demo.js
@@ -0,0 +1,2412 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(228)
+	var __weex_style__ = __webpack_require__(229)
+	var __weex_script__ = __webpack_require__(230)
+
+	__weex_define__('@weex-component/f1edaa994f4c5a505cfb7f32ca9ee569', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/f1edaa994f4c5a505cfb7f32ca9ee569',undefined,undefined)
+
+/***/ },
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(5);
+	__webpack_require__(9);
+	__webpack_require__(13);
+	__webpack_require__(17);
+	__webpack_require__(21);
+	__webpack_require__(25);
+	__webpack_require__(66);
+	__webpack_require__(70);
+	__webpack_require__(74);
+	__webpack_require__(78);
+	__webpack_require__(79);
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(6)
+	var __weex_style__ = __webpack_require__(7)
+	var __weex_script__ = __webpack_require__(8)
+
+	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    size: 'large',
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(10)
+	var __weex_style__ = __webpack_require__(11)
+	var __weex_script__ = __webpack_require__(12)
+
+	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['h' + (this.level)]},
+	  "style": {
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['txt-h' + (this.level)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 11 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    level: 1,
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(14)
+	var __weex_style__ = __webpack_require__(15)
+	var __weex_script__ = __webpack_require__(16)
+
+	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "events": {
+	    "touchstart": "touchstart",
+	    "touchend": "touchend"
+	  },
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    bgColor: '#ffffff'
+	  }},
+	  methods: {
+	    touchstart: function touchstart() {},
+	    touchend: function touchend() {}
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(18)
+	var __weex_style__ = __webpack_require__(19)
+	var __weex_script__ = __webpack_require__(20)
+
+	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
+	  "style": {
+	    "borderWidth": function () {return this.border}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingHead},
+	        "paddingBottom": function () {return this.paddingHead},
+	        "paddingLeft": function () {return this.paddingHead*1.5},
+	        "paddingRight": function () {return this.paddingHead*1.5}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingBody},
+	        "paddingBottom": function () {return this.paddingBody},
+	        "paddingLeft": function () {return this.paddingBody*1.5},
+	        "paddingRight": function () {return this.paddingBody*1.5}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    title: '',
+	    paddingBody: 20,
+	    paddingHead: 20,
+	    dataClass: '',
+	    border: 0
+	  }},
+	  ready: function ready() {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(22)
+	var __weex_style__ = __webpack_require__(23)
+	var __weex_script__ = __webpack_require__(24)
+
+	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'success',
+	    value: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(26)
+	var __weex_style__ = __webpack_require__(27)
+	var __weex_script__ = __webpack_require__(28)
+
+	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "overflow": "hidden",
+	    "flexDirection": "row"
+	  },
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _assign = __webpack_require__(29);
+
+	var _assign2 = _interopRequireDefault(_assign);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        now: 0,
+	        remain: 0,
+	        time: {
+	            elapse: 0,
+	            D: '0',
+	            DD: '0',
+	            h: '0',
+	            hh: '00',
+	            H: '0',
+	            HH: '0',
+	            m: '0',
+	            mm: '00',
+	            M: '0',
+	            MM: '0',
+	            s: '0',
+	            ss: '00',
+	            S: '0',
+	            SS: '0'
+	        },
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.remain <= 0) {
+	            return;
+	        }
+
+	        this.now = Date.now();
+	        this.nextTick();
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            if (this.outofview) {
+	                setTimeout(this.nextTick.bind(this), 1000);
+	            } else {
+	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
+
+	                if (this.calc()) {
+	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
+	                    setTimeout(this.nextTick.bind(this), 1000);
+	                } else {
+	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
+	                }
+	                this._app.updateActions();
+	            }
+	        },
+	        format: function format(str) {
+	            if (str.length >= 2) {
+	                return str;
+	            } else {
+	                return '0' + str;
+	            }
+	        },
+	        calc: function calc() {
+	            var remain = this.remain - this.time.elapse;
+	            if (remain < 0) {
+	                remain = 0;
+	            }
+	            this.time.D = String(parseInt(remain / 86400));
+	            this.time.DD = this.format(this.time.D);
+	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
+	            this.time.hh = this.format(this.time.h);
+	            this.time.H = String(parseInt(remain / 3600));
+	            this.time.HH = this.format(this.time.H);
+	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
+	            this.time.mm = this.format(this.time.m);
+	            this.time.M = String(parseInt(remain / 60));
+	            this.time.MM = this.format(this.time.M);
+	            this.time.s = String(remain - parseInt(this.time.M) * 60);
+	            this.time.ss = this.format(this.time.s);
+	            this.time.S = String(remain);
+	            this.time.SS = this.format(this.time.S);
+
+	            return remain > 0;
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(30), __esModule: true };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(31);
+	module.exports = __webpack_require__(34).Object.assign;
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(32);
+
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 43 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(48)
+	  , gOPS     = __webpack_require__(63)
+	  , pIE      = __webpack_require__(64)
+	  , toObject = __webpack_require__(65)
+	  , IObject  = __webpack_require__(52)
+	  , $assign  = Object.assign;
+
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(43)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(49)
+	  , enumBugKeys = __webpack_require__(62);
+
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(50)
+	  , toIObject    = __webpack_require__(51)
+	  , arrayIndexOf = __webpack_require__(55)(false)
+	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
+
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(52)
+	  , defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(53);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 53 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(51)
+	  , toLength  = __webpack_require__(56)
+	  , toIndex   = __webpack_require__(58);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(57)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(60)('keys')
+	  , uid    = __webpack_require__(61);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(33)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 63 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(67)
+	var __weex_style__ = __webpack_require__(68)
+	var __weex_script__ = __webpack_require__(69)
+
+	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrap"
+	  ],
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "anim",
+	      "classList": [
+	        "anim"
+	      ],
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+/* 69 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        step: 0,
+	        count: 0,
+	        index: 1,
+	        duration: 0,
+	        interval: 0,
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	            this.nextTick();
+	        }
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            var self = this;
+	            if (this.outofview) {
+	                setTimeout(self.nextTick.bind(self), self.interval);
+	            } else {
+	                setTimeout(function () {
+	                    self.animation(self.nextTick.bind(self));
+	                }, self.interval);
+	            }
+	        },
+	        animation: function animation(cb) {
+	            var self = this;
+	            var offset = -self.step * self.index;
+	            var $animation = __weex_require__('@weex-module/animation');
+	            $animation.transition(this.$el('anim'), {
+	                styles: {
+	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
+	                },
+	                timingFunction: 'ease',
+	                duration: self.duration
+	            }, function () {
+	                self.index = (self.index + 1) % self.count;
+	                self.$emit('change', {
+	                    index: self.index,
+	                    count: self.count
+	                });
+	                cb && cb();
+	            });
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(71)
+	var __weex_style__ = __webpack_require__(72)
+	var __weex_script__ = __webpack_require__(73)
+
+	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "height": function () {return this.height},
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "attr": {
+	    "dataRole": function () {return this.dataRole}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "right-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.rightItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "value": function () {return this.rightItemTitle}
+	      },
+	      "shown": function () {return !this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "right-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "src": function () {return this.rightItemSrc}
+	      },
+	      "shown": function () {return this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "left-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.leftItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "value": function () {return this.leftItemTitle}
+	      },
+	      "shown": function () {return !this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "left-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "src": function () {return this.leftItemSrc}
+	      },
+	      "shown": function () {return this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "center-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "center",
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+
+	    backgroundColor: 'black',
+
+	    height: 88,
+
+	    title: "",
+
+	    titleColor: 'black',
+
+	    rightItemSrc: '',
+
+	    rightItemTitle: '',
+
+	    rightItemColor: 'black',
+
+	    leftItemSrc: '',
+
+	    leftItemTitle: '',
+
+	    leftItemColor: 'black'
+	  }},
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$dispatch('naviBar.rightItem.click', {});
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$dispatch('naviBar.leftItem.click', {});
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(70)
+	var __weex_template__ = __webpack_require__(75)
+	var __weex_style__ = __webpack_require__(76)
+	var __weex_script__ = __webpack_require__(77)
+
+	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "wxc-navbar",
+	      "attr": {
+	        "dataRole": function () {return this.dataRole},
+	        "height": function () {return this.height},
+	        "backgroundColor": function () {return this.backgroundColor},
+	        "title": function () {return this.title},
+	        "titleColor": function () {return this.titleColor},
+	        "leftItemSrc": function () {return this.leftItemSrc},
+	        "leftItemTitle": function () {return this.leftItemTitle},
+	        "leftItemColor": function () {return this.leftItemColor},
+	        "rightItemSrc": function () {return this.rightItemSrc},
+	        "rightItemTitle": function () {return this.rightItemTitle},
+	        "rightItemColor": function () {return this.rightItemColor}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "wrapper"
+	      ],
+	      "style": {
+	        "marginTop": function () {return this.height}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+	    backgroundColor: 'black',
+	    height: 88,
+	    title: "",
+	    titleColor: 'black',
+	    rightItemSrc: '',
+	    rightItemTitle: '',
+	    rightItemColor: 'black',
+	    leftItemSrc: '',
+	    leftItemTitle: '',
+	    leftItemColor: 'black'
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(79)
+	var __weex_template__ = __webpack_require__(83)
+	var __weex_style__ = __webpack_require__(84)
+	var __weex_script__ = __webpack_require__(85)
+
+	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(80)
+	var __weex_style__ = __webpack_require__(81)
+	var __weex_script__ = __webpack_require__(82)
+
+	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "events": {
+	    "click": "onclickitem"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "classList": [
+	        "top-line"
+	      ],
+	      "attr": {
+	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "tab-icon"
+	      ],
+	      "attr": {
+	        "src": function () {return this.icon}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "tab-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+/* 82 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    index: 0,
+	    title: '',
+	    titleColor: '#000000',
+	    icon: '',
+	    backgroundColor: '#ffffff'
+	  }},
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var vm = this;
+	      var params = {
+	        index: vm.index
+	      };
+	      vm.$dispatch('tabItem.onClick', params);
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "embed",
+	      "classList": [
+	        "content"
+	      ],
+	      "style": {
+	        "visibility": function () {return this.visibility}
+	      },
+	      "repeat": function () {return this.tabItems},
+	      "attr": {
+	        "src": function () {return this.src},
+	        "type": "weex"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "tabbar"
+	      ],
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "wxc-tabitem",
+	          "repeat": function () {return this.tabItems},
+	          "attr": {
+	            "index": function () {return this.index},
+	            "icon": function () {return this.icon},
+	            "title": function () {return this.title},
+	            "titleColor": function () {return this.titleColor}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 84 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    tabItems: [],
+	    selectedIndex: 0,
+	    selectedColor: '#ff0000',
+	    unselectedColor: '#000000'
+	  }},
+	  created: function created() {
+	    this.selected(this.selectedIndex);
+
+	    this.$on('tabItem.onClick', function (e) {
+	      var detail = e.detail;
+	      this.selectedIndex = detail.index;
+	      this.selected(detail.index);
+
+	      var params = {
+	        index: detail.index
+	      };
+	      this.$dispatch('tabBar.onClick', params);
+	    });
+	  },
+	  methods: {
+	    selected: function selected(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */,
+/* 206 */,
+/* 207 */,
+/* 208 */,
+/* 209 */,
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "wxc-panel",
+	      "attr": {
+	        "title": "websocket",
+	        "type": "primary"
+	      },
+	      "children": [
+	        {
+	          "type": "input",
+	          "attr": {
+	            "type": "text",
+	            "placeholder": "please input message to send",
+	            "autofocus": "false",
+	            "value": ""
+	          },
+	          "classList": [
+	            "input"
+	          ],
+	          "events": {
+	            "change": "onchange",
+	            "input": "oninput"
+	          },
+	          "id": "input"
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "flexDirection": "row",
+	            "justifyContent": "center"
+	          },
+	          "children": [
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "connect",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "connect"
+	              }
+	            },
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "send",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "send"
+	              },
+	              "style": {
+	                "marginLeft": 20
+	              }
+	            },
+	            {
+	              "type": "wxc-button",
+	              "attr": {
+	                "value": "close",
+	                "size": "small",
+	                "type": "primary"
+	              },
+	              "events": {
+	                "click": "close"
+	              },
+	              "style": {
+	                "marginLeft": 20
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = send"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.sendinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onopen"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onopeninfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onmessage"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onmessage}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onclose"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.oncloseinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = onerror"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.onerrorinfo}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "method = close"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "attr": {
+	                "value": function () {return this.closeinfo}
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 229 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 40,
+	    "height": 80,
+	    "width": 600
+	  }
+	}
+
+/***/ },
+/* 230 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	__webpack_require__(4);
+	var navigator = __weex_require__('@weex-module/navigator');
+	var modal = __weex_require__('@weex-module/modal');
+	var websocket = __weex_require__('@weex-module/webSocket');
+	module.exports = {
+	    data: function () {return {
+	        connectinfo: '',
+	        sendinfo: '',
+	        onopeninfo: '',
+	        onmessage: '',
+	        oncloseinfo: '',
+	        onerrorinfo: '',
+	        closeinfo: '',
+	        txtInput: '',
+	        navBarHeight: 88,
+	        title: 'Navigator',
+	        dir: 'examples',
+	        baseURL: ''
+	    }},
+	    methods: {
+	        connect: function connect() {
+	            websocket.WebSocket('ws://115.29.193.48:8088', '');
+	            var self = this;
+	            websocket.onopen = function (e) {
+	                self.onopeninfo = e;
+	            };
+	            websocket.onmessage = function (e) {
+	                self.onmessage = e.data;
+	            };
+	            websocket.onerror = function (e) {
+	                self.onerrorinfo = e.data;
+	            };
+	            websocket.onclose = function (e) {
+	                self.onerrorinfo = e.code;
+	            };
+	        },
+	        send: function send(e) {
+	            var input = this.$el('input');
+	            input.blur();
+	            websocket.send(this.txtInput);
+	            this.sendinfo = this.txtInput;
+	        },
+	        oninput: function oninput(event) {
+	            this.txtInput = event.value;
+	        },
+	        close: function close(e) {
+	            websocket.close();
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/showcase/calculator.js b/android/playground/app/src/main/assets/showcase/calculator.js
index 310a07e..33b2729 100644
--- a/android/playground/app/src/main/assets/showcase/calculator.js
+++ b/android/playground/app/src/main/assets/showcase/calculator.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(222)
-	var __weex_style__ = __webpack_require__(223)
-	var __weex_script__ = __webpack_require__(224)
+	var __weex_template__ = __webpack_require__(231)
+	var __weex_style__ = __webpack_require__(232)
+	var __weex_script__ = __webpack_require__(233)
 
 	__weex_define__('@weex-component/603eadccfc85e9db6c45c597933fe8fe', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2164,7 +2164,16 @@
 /* 219 */,
 /* 220 */,
 /* 221 */,
-/* 222 */
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2414,7 +2423,7 @@
 	}
 
 /***/ },
-/* 223 */
+/* 232 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2447,7 +2456,7 @@
 	}
 
 /***/ },
-/* 224 */
+/* 233 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js b/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
index 7a61dd6..f06bb81 100644
--- a/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
+++ b/android/playground/app/src/main/assets/showcase/dropdown/dropdown-demo.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(225)
-	var __weex_template__ = __webpack_require__(229)
-	var __weex_style__ = __webpack_require__(230)
-	var __weex_script__ = __webpack_require__(231)
+	__webpack_require__(234)
+	var __weex_template__ = __webpack_require__(238)
+	var __weex_style__ = __webpack_require__(239)
+	var __weex_script__ = __webpack_require__(240)
 
 	__weex_define__('@weex-component/f7fd132bdb4ce0ff6745c3887b3163e2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -93,12 +93,12 @@
 
 /***/ },
 
-/***/ 225:
+/***/ 234:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(226)
-	var __weex_style__ = __webpack_require__(227)
-	var __weex_script__ = __webpack_require__(228)
+	var __weex_template__ = __webpack_require__(235)
+	var __weex_style__ = __webpack_require__(236)
+	var __weex_script__ = __webpack_require__(237)
 
 	__weex_define__('@weex-component/we-dropdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -222,7 +222,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 236:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -306,7 +306,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 237:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -404,7 +404,7 @@
 
 /***/ },
 
-/***/ 229:
+/***/ 238:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -502,7 +502,7 @@
 
 /***/ },
 
-/***/ 230:
+/***/ 239:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -575,7 +575,7 @@
 
 /***/ },
 
-/***/ 231:
+/***/ 240:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -586,7 +586,7 @@
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-	__webpack_require__(225);
+	__webpack_require__(234);
 
 	var initData = '[{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Closed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSC\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"1\",\"questionStatusValue\":\"Waiting\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSM\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Confirmed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSA\"}]';
 
diff --git a/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js b/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
index d5c76a2..7b4b48c 100644
--- a/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
+++ b/android/playground/app/src/main/assets/showcase/dropdown/we-dropdown.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(226)
-	var __weex_style__ = __webpack_require__(227)
-	var __weex_script__ = __webpack_require__(228)
+	var __weex_template__ = __webpack_require__(235)
+	var __weex_style__ = __webpack_require__(236)
+	var __weex_script__ = __webpack_require__(237)
 
 	__weex_define__('@weex-component/ffbcbcf1bd6120b070f00ceafeb0160e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 226:
+/***/ 235:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -172,7 +172,7 @@
 
 /***/ },
 
-/***/ 227:
+/***/ 236:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -256,7 +256,7 @@
 
 /***/ },
 
-/***/ 228:
+/***/ 237:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/minesweeper.js b/android/playground/app/src/main/assets/showcase/minesweeper.js
index 395cebf..06fa880 100644
--- a/android/playground/app/src/main/assets/showcase/minesweeper.js
+++ b/android/playground/app/src/main/assets/showcase/minesweeper.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(232)
-	var __weex_style__ = __webpack_require__(233)
-	var __weex_script__ = __webpack_require__(234)
+	var __weex_template__ = __webpack_require__(241)
+	var __weex_style__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/c0df89e239d226d3a0c6f418314cda04', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 232:
+/***/ 241:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 233:
+/***/ 242:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -164,7 +164,7 @@
 
 /***/ },
 
-/***/ 234:
+/***/ 243:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/banner.js b/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
index ff7dfdc..5bbf0d8 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/banner.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/df4a1d587e74e64ad99011cd2bcf06b7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -83,7 +83,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/banners.js b/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
index 532069f..112fb13 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/banners.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/a29a28169794adc0c69ea3ddb07ed6a2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -64,7 +64,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -84,7 +84,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -114,11 +114,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -134,7 +134,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -200,7 +200,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/brand.js b/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
index 504be7b..14ec49b 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/brand.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(241)
-	var __weex_style__ = __webpack_require__(242)
-	var __weex_script__ = __webpack_require__(243)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(250)
+	var __weex_style__ = __webpack_require__(251)
+	var __weex_script__ = __webpack_require__(252)
 
 	__weex_define__('@weex-component/81fdd9b8b8bce1b304791aba10e15462', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -203,7 +203,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -235,12 +235,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -256,7 +256,7 @@
 
 /***/ },
 
-/***/ 241:
+/***/ 250:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -299,7 +299,7 @@
 
 /***/ },
 
-/***/ 242:
+/***/ 251:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -315,7 +315,7 @@
 
 /***/ },
 
-/***/ 243:
+/***/ 252:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/category.js b/android/playground/app/src/main/assets/showcase/new-fashion/category.js
index a77fef6..a5b54d0 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/category.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/category.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(244)
-	var __weex_style__ = __webpack_require__(245)
-	var __weex_script__ = __webpack_require__(246)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(253)
+	var __weex_style__ = __webpack_require__(254)
+	var __weex_script__ = __webpack_require__(255)
 
 	__weex_define__('@weex-component/b33b928e3758831c19b31a06d4f5e634', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 244:
+/***/ 253:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -295,7 +295,7 @@
 
 /***/ },
 
-/***/ 245:
+/***/ 254:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -343,7 +343,7 @@
 
 /***/ },
 
-/***/ 246:
+/***/ 255:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js b/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
index 14983ef..4e9aca6 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/coupon.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(247)
-	var __weex_style__ = __webpack_require__(248)
-	var __weex_script__ = __webpack_require__(249)
+	var __weex_template__ = __webpack_require__(256)
+	var __weex_style__ = __webpack_require__(257)
+	var __weex_script__ = __webpack_require__(258)
 
 	__weex_define__('@weex-component/160152a0a99527e4b8664677a7d4610b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 247:
+/***/ 256:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -131,7 +131,7 @@
 
 /***/ },
 
-/***/ 248:
+/***/ 257:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -179,7 +179,7 @@
 
 /***/ },
 
-/***/ 249:
+/***/ 258:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js b/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
index a960ac4..e275cf1 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/fashion.js
@@ -45,11 +45,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(250)
-	var __weex_style__ = __webpack_require__(251)
-	var __weex_script__ = __webpack_require__(252)
+	__webpack_require__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(259)
+	var __weex_style__ = __webpack_require__(260)
+	var __weex_script__ = __webpack_require__(261)
 
 	__weex_define__('@weex-component/3a0fc3e27dd7bb14f409fca1ac4baac7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +257,7 @@
 
 /***/ },
 
-/***/ 250:
+/***/ 259:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -312,7 +312,7 @@
 
 /***/ },
 
-/***/ 251:
+/***/ 260:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -324,7 +324,7 @@
 
 /***/ },
 
-/***/ 252:
+/***/ 261:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/goods.js b/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
index 02fb30e..ad689a0 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/goods.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(253)
-	var __weex_style__ = __webpack_require__(254)
-	var __weex_script__ = __webpack_require__(255)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(262)
+	var __weex_style__ = __webpack_require__(263)
+	var __weex_script__ = __webpack_require__(264)
 
 	__weex_define__('@weex-component/4ee2a41c614b4058c24278d8a41a24eb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 253:
+/***/ 262:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -263,7 +263,7 @@
 
 /***/ },
 
-/***/ 254:
+/***/ 263:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -289,7 +289,7 @@
 
 /***/ },
 
-/***/ 255:
+/***/ 264:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js b/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
index 3c651bc..23f0fac 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/headlines.js
@@ -45,11 +45,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(256)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(259)
-	var __weex_style__ = __webpack_require__(260)
-	var __weex_script__ = __webpack_require__(261)
+	__webpack_require__(265)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(268)
+	var __weex_style__ = __webpack_require__(269)
+	var __weex_script__ = __webpack_require__(270)
 
 	__weex_define__('@weex-component/5efec0a39c4d8f94c5e8f7170c422834', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,11 +257,11 @@
 
 /***/ },
 
-/***/ 256:
+/***/ 265:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -277,7 +277,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 266:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +296,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 267:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -320,7 +320,7 @@
 
 /***/ },
 
-/***/ 259:
+/***/ 268:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -394,7 +394,7 @@
 
 /***/ },
 
-/***/ 260:
+/***/ 269:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -450,7 +450,7 @@
 
 /***/ },
 
-/***/ 261:
+/***/ 270:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/index.js b/android/playground/app/src/main/assets/showcase/new-fashion/index.js
index 5e813fa..cfe73f4 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/index.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/index.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(262)
-	var __weex_style__ = __webpack_require__(263)
-	var __weex_script__ = __webpack_require__(264)
+	var __weex_template__ = __webpack_require__(271)
+	var __weex_style__ = __webpack_require__(272)
+	var __weex_script__ = __webpack_require__(273)
 
 	__weex_define__('@weex-component/5e0e45b25bc002a471e5967e4452d911', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3007,7 +3007,16 @@
 /* 259 */,
 /* 260 */,
 /* 261 */,
-/* 262 */
+/* 262 */,
+/* 263 */,
+/* 264 */,
+/* 265 */,
+/* 266 */,
+/* 267 */,
+/* 268 */,
+/* 269 */,
+/* 270 */,
+/* 271 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3026,7 +3035,7 @@
 	}
 
 /***/ },
-/* 263 */
+/* 272 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3040,7 +3049,7 @@
 	}
 
 /***/ },
-/* 264 */
+/* 273 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/link.js b/android/playground/app/src/main/assets/showcase/new-fashion/link.js
index 55091e4..6b1e1f5 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/link.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/link.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/4921d4510db0a127687a84f88dda307c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 257:
+/***/ 266:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -82,7 +82,7 @@
 
 /***/ },
 
-/***/ 258:
+/***/ 267:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/main.js b/android/playground/app/src/main/assets/showcase/new-fashion/main.js
index c9d3d4a..ff4ffd4 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/main.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/main.js
@@ -44,17 +44,17 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(265)
-	__webpack_require__(266)
-	__webpack_require__(267)
-	__webpack_require__(268)
-	__webpack_require__(269)
-	__webpack_require__(273)
+	__webpack_require__(274)
+	__webpack_require__(275)
+	__webpack_require__(276)
 	__webpack_require__(277)
-	__webpack_require__(281)
-	var __weex_template__ = __webpack_require__(282)
-	var __weex_style__ = __webpack_require__(283)
-	var __weex_script__ = __webpack_require__(284)
+	__webpack_require__(278)
+	__webpack_require__(282)
+	__webpack_require__(286)
+	__webpack_require__(290)
+	var __weex_template__ = __webpack_require__(291)
+	var __weex_style__ = __webpack_require__(292)
+	var __weex_script__ = __webpack_require__(293)
 
 	__weex_define__('@weex-component/7e1771848154855ce84d79183d543f9a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2988,7 +2988,16 @@
 /* 232 */,
 /* 233 */,
 /* 234 */,
-/* 235 */
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */,
+/* 243 */,
+/* 244 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3007,7 +3016,7 @@
 	}
 
 /***/ },
-/* 236 */
+/* 245 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3036,11 +3045,11 @@
 
 
 /***/ },
-/* 237 */
+/* 246 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3055,7 +3064,7 @@
 
 
 /***/ },
-/* 238 */
+/* 247 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3120,7 +3129,7 @@
 	}
 
 /***/ },
-/* 239 */
+/* 248 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3151,12 +3160,12 @@
 
 
 /***/ },
-/* 240 */
+/* 249 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3171,7 +3180,7 @@
 
 
 /***/ },
-/* 241 */
+/* 250 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3213,7 +3222,7 @@
 	}
 
 /***/ },
-/* 242 */
+/* 251 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3228,7 +3237,7 @@
 	}
 
 /***/ },
-/* 243 */
+/* 252 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3268,7 +3277,7 @@
 
 
 /***/ },
-/* 244 */
+/* 253 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3425,7 +3434,7 @@
 	}
 
 /***/ },
-/* 245 */
+/* 254 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3472,7 +3481,7 @@
 	}
 
 /***/ },
-/* 246 */
+/* 255 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -3916,7 +3925,7 @@
 
 
 /***/ },
-/* 247 */
+/* 256 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3980,7 +3989,7 @@
 	}
 
 /***/ },
-/* 248 */
+/* 257 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4027,7 +4036,7 @@
 	}
 
 /***/ },
-/* 249 */
+/* 258 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4053,10 +4062,10 @@
 
 
 /***/ },
-/* 250 */,
-/* 251 */,
-/* 252 */,
-/* 253 */
+/* 259 */,
+/* 260 */,
+/* 261 */,
+/* 262 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4181,7 +4190,7 @@
 	}
 
 /***/ },
-/* 254 */
+/* 263 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4206,7 +4215,7 @@
 	}
 
 /***/ },
-/* 255 */
+/* 264 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4234,11 +4243,11 @@
 
 
 /***/ },
-/* 256 */
+/* 265 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(257)
-	var __weex_script__ = __webpack_require__(258)
+	var __weex_template__ = __webpack_require__(266)
+	var __weex_script__ = __webpack_require__(267)
 
 	__weex_define__('@weex-component/link', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4253,7 +4262,7 @@
 
 
 /***/ },
-/* 257 */
+/* 266 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4271,7 +4280,7 @@
 	}
 
 /***/ },
-/* 258 */
+/* 267 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -4294,7 +4303,7 @@
 
 
 /***/ },
-/* 259 */
+/* 268 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4367,7 +4376,7 @@
 	}
 
 /***/ },
-/* 260 */
+/* 269 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4422,7 +4431,7 @@
 	}
 
 /***/ },
-/* 261 */
+/* 270 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4447,17 +4456,17 @@
 
 
 /***/ },
-/* 262 */,
-/* 263 */,
-/* 264 */,
-/* 265 */
+/* 271 */,
+/* 272 */,
+/* 273 */,
+/* 274 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(256)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(259)
-	var __weex_style__ = __webpack_require__(260)
-	var __weex_script__ = __webpack_require__(261)
+	__webpack_require__(265)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(268)
+	var __weex_style__ = __webpack_require__(269)
+	var __weex_script__ = __webpack_require__(270)
 
 	__weex_define__('@weex-component/headlines', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4474,13 +4483,13 @@
 
 
 /***/ },
-/* 266 */
+/* 275 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(244)
-	var __weex_style__ = __webpack_require__(245)
-	var __weex_script__ = __webpack_require__(246)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(253)
+	var __weex_style__ = __webpack_require__(254)
+	var __weex_script__ = __webpack_require__(255)
 
 	__weex_define__('@weex-component/category', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4497,12 +4506,12 @@
 
 
 /***/ },
-/* 267 */
+/* 276 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(247)
-	var __weex_style__ = __webpack_require__(248)
-	var __weex_script__ = __webpack_require__(249)
+	var __weex_template__ = __webpack_require__(256)
+	var __weex_style__ = __webpack_require__(257)
+	var __weex_script__ = __webpack_require__(258)
 
 	__weex_define__('@weex-component/coupon', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4519,13 +4528,13 @@
 
 
 /***/ },
-/* 268 */
+/* 277 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(253)
-	var __weex_style__ = __webpack_require__(254)
-	var __weex_script__ = __webpack_require__(255)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(262)
+	var __weex_style__ = __webpack_require__(263)
+	var __weex_script__ = __webpack_require__(264)
 
 	__weex_define__('@weex-component/goods', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4542,14 +4551,14 @@
 
 
 /***/ },
-/* 269 */
+/* 278 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(270)
-	var __weex_style__ = __webpack_require__(271)
-	var __weex_script__ = __webpack_require__(272)
+	__webpack_require__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(279)
+	var __weex_style__ = __webpack_require__(280)
+	var __weex_script__ = __webpack_require__(281)
 
 	__weex_define__('@weex-component/resource', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4566,7 +4575,7 @@
 
 
 /***/ },
-/* 270 */
+/* 279 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4604,7 +4613,7 @@
 	}
 
 /***/ },
-/* 271 */
+/* 280 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4618,7 +4627,7 @@
 	}
 
 /***/ },
-/* 272 */
+/* 281 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -4636,13 +4645,13 @@
 
 
 /***/ },
-/* 273 */
+/* 282 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(274)
-	var __weex_style__ = __webpack_require__(275)
-	var __weex_script__ = __webpack_require__(276)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(283)
+	var __weex_style__ = __webpack_require__(284)
+	var __weex_script__ = __webpack_require__(285)
 
 	__weex_define__('@weex-component/scene', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -4659,7 +4668,7 @@
 
 
 /***/ },
-/* 274 */
+/* 283 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4751,7 +4760,7 @@
 	}
 
 /***/ },
-/* 275 */
+/* 284 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -4810,7 +4819,7 @@
 	}
 
 /***/ },
-/* 276 */
+/* 285 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -5022,13 +5031,13 @@
 
 
 /***/ },
-/* 277 */
+/* 286 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(278)
-	var __weex_style__ = __webpack_require__(279)
-	var __weex_script__ = __webpack_require__(280)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(287)
+	var __weex_style__ = __webpack_require__(288)
+	var __weex_script__ = __webpack_require__(289)
 
 	__weex_define__('@weex-component/match', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5045,7 +5054,7 @@
 
 
 /***/ },
-/* 278 */
+/* 287 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5124,7 +5133,7 @@
 	}
 
 /***/ },
-/* 279 */
+/* 288 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5138,7 +5147,7 @@
 	}
 
 /***/ },
-/* 280 */
+/* 289 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -5175,13 +5184,13 @@
 
 
 /***/ },
-/* 281 */
+/* 290 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(241)
-	var __weex_style__ = __webpack_require__(242)
-	var __weex_script__ = __webpack_require__(243)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(250)
+	var __weex_style__ = __webpack_require__(251)
+	var __weex_script__ = __webpack_require__(252)
 
 	__weex_define__('@weex-component/brand', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -5198,7 +5207,7 @@
 
 
 /***/ },
-/* 282 */
+/* 291 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5341,7 +5350,7 @@
 	}
 
 /***/ },
-/* 283 */
+/* 292 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -5367,7 +5376,7 @@
 	}
 
 /***/ },
-/* 284 */
+/* 293 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/match.js b/android/playground/app/src/main/assets/showcase/new-fashion/match.js
index c1beb2f..96976e4 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/match.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/match.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(278)
-	var __weex_style__ = __webpack_require__(279)
-	var __weex_script__ = __webpack_require__(280)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(287)
+	var __weex_style__ = __webpack_require__(288)
+	var __weex_script__ = __webpack_require__(289)
 
 	__weex_define__('@weex-component/e4f94096a035d75578fa1eb2d8967b5f', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 278:
+/***/ 287:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -217,7 +217,7 @@
 
 /***/ },
 
-/***/ 279:
+/***/ 288:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -232,7 +232,7 @@
 
 /***/ },
 
-/***/ 280:
+/***/ 289:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/resource.js b/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
index fea6f14..b08afa9 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/resource.js
@@ -45,11 +45,11 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	__webpack_require__(240)
-	var __weex_template__ = __webpack_require__(270)
-	var __weex_style__ = __webpack_require__(271)
-	var __weex_script__ = __webpack_require__(272)
+	__webpack_require__(246)
+	__webpack_require__(249)
+	var __weex_template__ = __webpack_require__(279)
+	var __weex_style__ = __webpack_require__(280)
+	var __weex_script__ = __webpack_require__(281)
 
 	__weex_define__('@weex-component/898d20378eee87156b93aef1be724cdb', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -68,7 +68,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -88,7 +88,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -118,11 +118,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -138,7 +138,7 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 247:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -204,7 +204,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 248:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -236,12 +236,12 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 249:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(238)
-	var __weex_script__ = __webpack_require__(239)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_script__ = __webpack_require__(248)
 
 	__weex_define__('@weex-component/banners', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -257,7 +257,7 @@
 
 /***/ },
 
-/***/ 270:
+/***/ 279:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -296,7 +296,7 @@
 
 /***/ },
 
-/***/ 271:
+/***/ 280:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -311,7 +311,7 @@
 
 /***/ },
 
-/***/ 272:
+/***/ 281:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/showcase/new-fashion/scene.js b/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
index 962341e..a30842a 100644
--- a/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
+++ b/android/playground/app/src/main/assets/showcase/new-fashion/scene.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(237)
-	var __weex_template__ = __webpack_require__(274)
-	var __weex_style__ = __webpack_require__(275)
-	var __weex_script__ = __webpack_require__(276)
+	__webpack_require__(246)
+	var __weex_template__ = __webpack_require__(283)
+	var __weex_style__ = __webpack_require__(284)
+	var __weex_script__ = __webpack_require__(285)
 
 	__weex_define__('@weex-component/18e03f6e7e4b9d87e4b470dfec07a573', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 244:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 245:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -117,11 +117,11 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 246:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(235)
-	var __weex_script__ = __webpack_require__(236)
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_script__ = __webpack_require__(245)
 
 	__weex_define__('@weex-component/banner', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -137,7 +137,7 @@
 
 /***/ },
 
-/***/ 274:
+/***/ 283:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -230,7 +230,7 @@
 
 /***/ },
 
-/***/ 275:
+/***/ 284:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -290,7 +290,7 @@
 
 /***/ },
 
-/***/ 276:
+/***/ 285:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/showcase/pseudo-class.js b/android/playground/app/src/main/assets/showcase/pseudo-class.js
new file mode 100644
index 0000000..59a8b52
--- /dev/null
+++ b/android/playground/app/src/main/assets/showcase/pseudo-class.js
@@ -0,0 +1,2425 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(294)
+	var __weex_style__ = __webpack_require__(295)
+	var __weex_script__ = __webpack_require__(296)
+
+	__weex_define__('@weex-component/07aaf1221ad656e37ebe37291f40d193', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/07aaf1221ad656e37ebe37291f40d193',undefined,undefined)
+
+/***/ },
+/* 1 */,
+/* 2 */,
+/* 3 */,
+/* 4 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(5);
+	__webpack_require__(9);
+	__webpack_require__(13);
+	__webpack_require__(17);
+	__webpack_require__(21);
+	__webpack_require__(25);
+	__webpack_require__(66);
+	__webpack_require__(70);
+	__webpack_require__(74);
+	__webpack_require__(78);
+	__webpack_require__(79);
+
+
+/***/ },
+/* 5 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(6)
+	var __weex_style__ = __webpack_require__(7)
+	var __weex_script__ = __webpack_require__(8)
+
+	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 6 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 7 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+/* 8 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    size: 'large',
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 9 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(10)
+	var __weex_style__ = __webpack_require__(11)
+	var __weex_script__ = __webpack_require__(12)
+
+	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 10 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['h' + (this.level)]},
+	  "style": {
+	    "justifyContent": "center"
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['txt-h' + (this.level)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 11 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+/* 12 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    level: 1,
+	    value: ''
+	  }},
+	  methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 13 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(14)
+	var __weex_style__ = __webpack_require__(15)
+	var __weex_script__ = __webpack_require__(16)
+
+	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 14 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "events": {
+	    "touchstart": "touchstart",
+	    "touchend": "touchend"
+	  },
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 15 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+/* 16 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    bgColor: '#ffffff'
+	  }},
+	  methods: {
+	    touchstart: function touchstart() {},
+	    touchend: function touchend() {}
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 17 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(18)
+	var __weex_style__ = __webpack_require__(19)
+	var __weex_script__ = __webpack_require__(20)
+
+	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 18 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
+	  "style": {
+	    "borderWidth": function () {return this.border}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingHead},
+	        "paddingBottom": function () {return this.paddingHead},
+	        "paddingLeft": function () {return this.paddingHead*1.5},
+	        "paddingRight": function () {return this.paddingHead*1.5}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
+	      "style": {
+	        "paddingTop": function () {return this.paddingBody},
+	        "paddingBottom": function () {return this.paddingBody},
+	        "paddingLeft": function () {return this.paddingBody*1.5},
+	        "paddingRight": function () {return this.paddingBody*1.5}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 19 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  },
+	  "panel-body": {}
+	}
+
+/***/ },
+/* 20 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'default',
+	    title: '',
+	    paddingBody: 20,
+	    paddingHead: 20,
+	    dataClass: '',
+	    border: 0
+	  }},
+	  ready: function ready() {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 21 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(22)
+	var __weex_style__ = __webpack_require__(23)
+	var __weex_script__ = __webpack_require__(24)
+
+	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 22 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
+	      "attr": {
+	        "value": function () {return this.value}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 23 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+/* 24 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    type: 'success',
+	    value: ''
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 25 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(26)
+	var __weex_style__ = __webpack_require__(27)
+	var __weex_script__ = __webpack_require__(28)
+
+	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 26 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "overflow": "hidden",
+	    "flexDirection": "row"
+	  },
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "content"
+	    }
+	  ]
+	}
+
+/***/ },
+/* 27 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+/* 28 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _assign = __webpack_require__(29);
+
+	var _assign2 = _interopRequireDefault(_assign);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	    data: function () {return {
+	        now: 0,
+	        remain: 0,
+	        time: {
+	            elapse: 0,
+	            D: '0',
+	            DD: '0',
+	            h: '0',
+	            hh: '00',
+	            H: '0',
+	            HH: '0',
+	            m: '0',
+	            mm: '00',
+	            M: '0',
+	            MM: '0',
+	            s: '0',
+	            ss: '00',
+	            S: '0',
+	            SS: '0'
+	        },
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.remain <= 0) {
+	            return;
+	        }
+
+	        this.now = Date.now();
+	        this.nextTick();
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            if (this.outofview) {
+	                setTimeout(this.nextTick.bind(this), 1000);
+	            } else {
+	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
+
+	                if (this.calc()) {
+	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
+	                    setTimeout(this.nextTick.bind(this), 1000);
+	                } else {
+	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
+	                }
+	                this._app.updateActions();
+	            }
+	        },
+	        format: function format(str) {
+	            if (str.length >= 2) {
+	                return str;
+	            } else {
+	                return '0' + str;
+	            }
+	        },
+	        calc: function calc() {
+	            var remain = this.remain - this.time.elapse;
+	            if (remain < 0) {
+	                remain = 0;
+	            }
+	            this.time.D = String(parseInt(remain / 86400));
+	            this.time.DD = this.format(this.time.D);
+	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
+	            this.time.hh = this.format(this.time.h);
+	            this.time.H = String(parseInt(remain / 3600));
+	            this.time.HH = this.format(this.time.H);
+	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
+	            this.time.mm = this.format(this.time.m);
+	            this.time.M = String(parseInt(remain / 60));
+	            this.time.MM = this.format(this.time.M);
+	            this.time.s = String(remain - parseInt(this.time.M) * 60);
+	            this.time.ss = this.format(this.time.s);
+	            this.time.S = String(remain);
+	            this.time.SS = this.format(this.time.S);
+
+	            return remain > 0;
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 29 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(30), __esModule: true };
+
+/***/ },
+/* 30 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(31);
+	module.exports = __webpack_require__(34).Object.assign;
+
+/***/ },
+/* 31 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.3.1 Object.assign(target, source)
+	var $export = __webpack_require__(32);
+
+	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
+
+/***/ },
+/* 32 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+/* 33 */
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+/* 34 */
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+/* 35 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+/* 36 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+/* 37 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+/* 38 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+/* 39 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+/* 40 */
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+/* 41 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 42 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+/* 43 */
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+/* 44 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+/* 45 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+/* 46 */
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+/* 47 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// 19.1.2.1 Object.assign(target, source, ...)
+	var getKeys  = __webpack_require__(48)
+	  , gOPS     = __webpack_require__(63)
+	  , pIE      = __webpack_require__(64)
+	  , toObject = __webpack_require__(65)
+	  , IObject  = __webpack_require__(52)
+	  , $assign  = Object.assign;
+
+	// should work with symbols and should have deterministic property order (V8 bug)
+	module.exports = !$assign || __webpack_require__(43)(function(){
+	  var A = {}
+	    , B = {}
+	    , S = Symbol()
+	    , K = 'abcdefghijklmnopqrst';
+	  A[S] = 7;
+	  K.split('').forEach(function(k){ B[k] = k; });
+	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
+	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
+	  var T     = toObject(target)
+	    , aLen  = arguments.length
+	    , index = 1
+	    , getSymbols = gOPS.f
+	    , isEnum     = pIE.f;
+	  while(aLen > index){
+	    var S      = IObject(arguments[index++])
+	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
+	      , length = keys.length
+	      , j      = 0
+	      , key;
+	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
+	  } return T;
+	} : $assign;
+
+/***/ },
+/* 48 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
+	var $keys       = __webpack_require__(49)
+	  , enumBugKeys = __webpack_require__(62);
+
+	module.exports = Object.keys || function keys(O){
+	  return $keys(O, enumBugKeys);
+	};
+
+/***/ },
+/* 49 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var has          = __webpack_require__(50)
+	  , toIObject    = __webpack_require__(51)
+	  , arrayIndexOf = __webpack_require__(55)(false)
+	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
+
+	module.exports = function(object, names){
+	  var O      = toIObject(object)
+	    , i      = 0
+	    , result = []
+	    , key;
+	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
+	  // Don't enum bug & hidden keys
+	  while(names.length > i)if(has(O, key = names[i++])){
+	    ~arrayIndexOf(result, key) || result.push(key);
+	  }
+	  return result;
+	};
+
+/***/ },
+/* 50 */
+/***/ function(module, exports) {
+
+	var hasOwnProperty = {}.hasOwnProperty;
+	module.exports = function(it, key){
+	  return hasOwnProperty.call(it, key);
+	};
+
+/***/ },
+/* 51 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// to indexed object, toObject with fallback for non-array-like ES3 strings
+	var IObject = __webpack_require__(52)
+	  , defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return IObject(defined(it));
+	};
+
+/***/ },
+/* 52 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for non-array-like ES3 and non-enumerable old V8 strings
+	var cof = __webpack_require__(53);
+	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
+	  return cof(it) == 'String' ? it.split('') : Object(it);
+	};
+
+/***/ },
+/* 53 */
+/***/ function(module, exports) {
+
+	var toString = {}.toString;
+
+	module.exports = function(it){
+	  return toString.call(it).slice(8, -1);
+	};
+
+/***/ },
+/* 54 */
+/***/ function(module, exports) {
+
+	// 7.2.1 RequireObjectCoercible(argument)
+	module.exports = function(it){
+	  if(it == undefined)throw TypeError("Can't call method on  " + it);
+	  return it;
+	};
+
+/***/ },
+/* 55 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// false -> Array#indexOf
+	// true  -> Array#includes
+	var toIObject = __webpack_require__(51)
+	  , toLength  = __webpack_require__(56)
+	  , toIndex   = __webpack_require__(58);
+	module.exports = function(IS_INCLUDES){
+	  return function($this, el, fromIndex){
+	    var O      = toIObject($this)
+	      , length = toLength(O.length)
+	      , index  = toIndex(fromIndex, length)
+	      , value;
+	    // Array#includes uses SameValueZero equality algorithm
+	    if(IS_INCLUDES && el != el)while(length > index){
+	      value = O[index++];
+	      if(value != value)return true;
+	    // Array#toIndex ignores holes, Array#includes - not
+	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
+	      if(O[index] === el)return IS_INCLUDES || index || 0;
+	    } return !IS_INCLUDES && -1;
+	  };
+	};
+
+/***/ },
+/* 56 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.15 ToLength
+	var toInteger = __webpack_require__(57)
+	  , min       = Math.min;
+	module.exports = function(it){
+	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
+	};
+
+/***/ },
+/* 57 */
+/***/ function(module, exports) {
+
+	// 7.1.4 ToInteger
+	var ceil  = Math.ceil
+	  , floor = Math.floor;
+	module.exports = function(it){
+	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
+	};
+
+/***/ },
+/* 58 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , max       = Math.max
+	  , min       = Math.min;
+	module.exports = function(index, length){
+	  index = toInteger(index);
+	  return index < 0 ? max(index + length, 0) : min(index, length);
+	};
+
+/***/ },
+/* 59 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var shared = __webpack_require__(60)('keys')
+	  , uid    = __webpack_require__(61);
+	module.exports = function(key){
+	  return shared[key] || (shared[key] = uid(key));
+	};
+
+/***/ },
+/* 60 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global = __webpack_require__(33)
+	  , SHARED = '__core-js_shared__'
+	  , store  = global[SHARED] || (global[SHARED] = {});
+	module.exports = function(key){
+	  return store[key] || (store[key] = {});
+	};
+
+/***/ },
+/* 61 */
+/***/ function(module, exports) {
+
+	var id = 0
+	  , px = Math.random();
+	module.exports = function(key){
+	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
+	};
+
+/***/ },
+/* 62 */
+/***/ function(module, exports) {
+
+	// IE 8- don't enum bug keys
+	module.exports = (
+	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
+	).split(',');
+
+/***/ },
+/* 63 */
+/***/ function(module, exports) {
+
+	exports.f = Object.getOwnPropertySymbols;
+
+/***/ },
+/* 64 */
+/***/ function(module, exports) {
+
+	exports.f = {}.propertyIsEnumerable;
+
+/***/ },
+/* 65 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.13 ToObject(argument)
+	var defined = __webpack_require__(54);
+	module.exports = function(it){
+	  return Object(defined(it));
+	};
+
+/***/ },
+/* 66 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(67)
+	var __weex_style__ = __webpack_require__(68)
+	var __weex_script__ = __webpack_require__(69)
+
+	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 67 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrap"
+	  ],
+	  "events": {
+	    "appear": "appeared",
+	    "disappear": "disappeared"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "anim",
+	      "classList": [
+	        "anim"
+	      ],
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 68 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+/* 69 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        step: 0,
+	        count: 0,
+	        index: 1,
+	        duration: 0,
+	        interval: 0,
+	        outofview: false
+	    }},
+	    ready: function ready() {
+	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	            this.nextTick();
+	        }
+	    },
+	    methods: {
+	        nextTick: function nextTick() {
+	            var self = this;
+	            if (this.outofview) {
+	                setTimeout(self.nextTick.bind(self), self.interval);
+	            } else {
+	                setTimeout(function () {
+	                    self.animation(self.nextTick.bind(self));
+	                }, self.interval);
+	            }
+	        },
+	        animation: function animation(cb) {
+	            var self = this;
+	            var offset = -self.step * self.index;
+	            var $animation = __weex_require__('@weex-module/animation');
+	            $animation.transition(this.$el('anim'), {
+	                styles: {
+	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
+	                },
+	                timingFunction: 'ease',
+	                duration: self.duration
+	            }, function () {
+	                self.index = (self.index + 1) % self.count;
+	                self.$emit('change', {
+	                    index: self.index,
+	                    count: self.count
+	                });
+	                cb && cb();
+	            });
+	        },
+	        appeared: function appeared() {
+	            this.outofview = false;
+	        },
+	        disappeared: function disappeared() {
+	            this.outofview = true;
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 70 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(71)
+	var __weex_style__ = __webpack_require__(72)
+	var __weex_script__ = __webpack_require__(73)
+
+	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 71 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "height": function () {return this.height},
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "attr": {
+	    "dataRole": function () {return this.dataRole}
+	  },
+	  "children": [
+	    {
+	      "type": "text",
+	      "classList": [
+	        "right-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.rightItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "value": function () {return this.rightItemTitle}
+	      },
+	      "shown": function () {return !this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "right-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "right",
+	        "src": function () {return this.rightItemSrc}
+	      },
+	      "shown": function () {return this.rightItemSrc},
+	      "events": {
+	        "click": "onclickrightitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "left-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.leftItemColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "value": function () {return this.leftItemTitle}
+	      },
+	      "shown": function () {return !this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "left-image"
+	      ],
+	      "attr": {
+	        "naviItemPosition": "left",
+	        "src": function () {return this.leftItemSrc}
+	      },
+	      "shown": function () {return this.leftItemSrc},
+	      "events": {
+	        "click": "onclickleftitem"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "center-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "naviItemPosition": "center",
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 72 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+/* 73 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+
+	    backgroundColor: 'black',
+
+	    height: 88,
+
+	    title: "",
+
+	    titleColor: 'black',
+
+	    rightItemSrc: '',
+
+	    rightItemTitle: '',
+
+	    rightItemColor: 'black',
+
+	    leftItemSrc: '',
+
+	    leftItemTitle: '',
+
+	    leftItemColor: 'black'
+	  }},
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$dispatch('naviBar.rightItem.click', {});
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$dispatch('naviBar.leftItem.click', {});
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 74 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(70)
+	var __weex_template__ = __webpack_require__(75)
+	var __weex_style__ = __webpack_require__(76)
+	var __weex_script__ = __webpack_require__(77)
+
+	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 75 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "wxc-navbar",
+	      "attr": {
+	        "dataRole": function () {return this.dataRole},
+	        "height": function () {return this.height},
+	        "backgroundColor": function () {return this.backgroundColor},
+	        "title": function () {return this.title},
+	        "titleColor": function () {return this.titleColor},
+	        "leftItemSrc": function () {return this.leftItemSrc},
+	        "leftItemTitle": function () {return this.leftItemTitle},
+	        "leftItemColor": function () {return this.leftItemColor},
+	        "rightItemSrc": function () {return this.rightItemSrc},
+	        "rightItemTitle": function () {return this.rightItemTitle},
+	        "rightItemColor": function () {return this.rightItemColor}
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "wrapper"
+	      ],
+	      "style": {
+	        "marginTop": function () {return this.height}
+	      },
+	      "children": [
+	        {
+	          "type": "content"
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 76 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+/* 77 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    dataRole: 'navbar',
+	    backgroundColor: 'black',
+	    height: 88,
+	    title: "",
+	    titleColor: 'black',
+	    rightItemSrc: '',
+	    rightItemTitle: '',
+	    rightItemColor: 'black',
+	    leftItemSrc: '',
+	    leftItemTitle: '',
+	    leftItemColor: 'black'
+	  }}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 78 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(79)
+	var __weex_template__ = __webpack_require__(83)
+	var __weex_style__ = __webpack_require__(84)
+	var __weex_script__ = __webpack_require__(85)
+
+	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 79 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(80)
+	var __weex_style__ = __webpack_require__(81)
+	var __weex_script__ = __webpack_require__(82)
+
+	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+
+/***/ },
+/* 80 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.backgroundColor}
+	  },
+	  "events": {
+	    "click": "onclickitem"
+	  },
+	  "children": [
+	    {
+	      "type": "image",
+	      "classList": [
+	        "top-line"
+	      ],
+	      "attr": {
+	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	      }
+	    },
+	    {
+	      "type": "image",
+	      "classList": [
+	        "tab-icon"
+	      ],
+	      "attr": {
+	        "src": function () {return this.icon}
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "classList": [
+	        "tab-text"
+	      ],
+	      "style": {
+	        "color": function () {return this.titleColor}
+	      },
+	      "attr": {
+	        "value": function () {return this.title}
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+/* 81 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+/* 82 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    index: 0,
+	    title: '',
+	    titleColor: '#000000',
+	    icon: '',
+	    backgroundColor: '#ffffff'
+	  }},
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var vm = this;
+	      var params = {
+	        index: vm.index
+	      };
+	      vm.$dispatch('tabItem.onClick', params);
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 83 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "children": [
+	    {
+	      "type": "embed",
+	      "classList": [
+	        "content"
+	      ],
+	      "style": {
+	        "visibility": function () {return this.visibility}
+	      },
+	      "repeat": function () {return this.tabItems},
+	      "attr": {
+	        "src": function () {return this.src},
+	        "type": "weex"
+	      }
+	    },
+	    {
+	      "type": "div",
+	      "classList": [
+	        "tabbar"
+	      ],
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "wxc-tabitem",
+	          "repeat": function () {return this.tabItems},
+	          "attr": {
+	            "index": function () {return this.index},
+	            "icon": function () {return this.icon},
+	            "title": function () {return this.title},
+	            "titleColor": function () {return this.titleColor}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 84 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+/* 85 */
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	  data: function () {return {
+	    tabItems: [],
+	    selectedIndex: 0,
+	    selectedColor: '#ff0000',
+	    unselectedColor: '#000000'
+	  }},
+	  created: function created() {
+	    this.selected(this.selectedIndex);
+
+	    this.$on('tabItem.onClick', function (e) {
+	      var detail = e.detail;
+	      this.selectedIndex = detail.index;
+	      this.selected(detail.index);
+
+	      var params = {
+	        index: detail.index
+	      };
+	      this.$dispatch('tabBar.onClick', params);
+	    });
+	  },
+	  methods: {
+	    selected: function selected(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+/* 86 */,
+/* 87 */,
+/* 88 */,
+/* 89 */,
+/* 90 */,
+/* 91 */,
+/* 92 */,
+/* 93 */,
+/* 94 */,
+/* 95 */,
+/* 96 */,
+/* 97 */,
+/* 98 */,
+/* 99 */,
+/* 100 */,
+/* 101 */,
+/* 102 */,
+/* 103 */,
+/* 104 */,
+/* 105 */,
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */,
+/* 116 */,
+/* 117 */,
+/* 118 */,
+/* 119 */,
+/* 120 */,
+/* 121 */,
+/* 122 */,
+/* 123 */,
+/* 124 */,
+/* 125 */,
+/* 126 */,
+/* 127 */,
+/* 128 */,
+/* 129 */,
+/* 130 */,
+/* 131 */,
+/* 132 */,
+/* 133 */,
+/* 134 */,
+/* 135 */,
+/* 136 */,
+/* 137 */,
+/* 138 */,
+/* 139 */,
+/* 140 */,
+/* 141 */,
+/* 142 */,
+/* 143 */,
+/* 144 */,
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */,
+/* 154 */,
+/* 155 */,
+/* 156 */,
+/* 157 */,
+/* 158 */,
+/* 159 */,
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */,
+/* 173 */,
+/* 174 */,
+/* 175 */,
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */,
+/* 206 */,
+/* 207 */,
+/* 208 */,
+/* 209 */,
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */,
+/* 243 */,
+/* 244 */,
+/* 245 */,
+/* 246 */,
+/* 247 */,
+/* 248 */,
+/* 249 */,
+/* 250 */,
+/* 251 */,
+/* 252 */,
+/* 253 */,
+/* 254 */,
+/* 255 */,
+/* 256 */,
+/* 257 */,
+/* 258 */,
+/* 259 */,
+/* 260 */,
+/* 261 */,
+/* 262 */,
+/* 263 */,
+/* 264 */,
+/* 265 */,
+/* 266 */,
+/* 267 */,
+/* 268 */,
+/* 269 */,
+/* 270 */,
+/* 271 */,
+/* 272 */,
+/* 273 */,
+/* 274 */,
+/* 275 */,
+/* 276 */,
+/* 277 */,
+/* 278 */,
+/* 279 */,
+/* 280 */,
+/* 281 */,
+/* 282 */,
+/* 283 */,
+/* 284 */,
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "children": [
+	    {
+	      "type": "scroller",
+	      "children": [
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "active",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "div",
+	              "classList": [
+	                "wrapper"
+	              ],
+	              "children": [
+	                {
+	                  "type": "image",
+	                  "attr": {
+	                    "src": function () {return this.logoUrl}
+	                  },
+	                  "classList": [
+	                    "logo"
+	                  ]
+	                },
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "attr": {
+	                    "value": "please click image"
+	                  }
+	                }
+	              ]
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "focus",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active"
+	              },
+	              "classList": [
+	                "focusinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "enabled",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active"
+	              },
+	              "classList": [
+	                "enabledinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "wxc-panel",
+	          "attr": {
+	            "title": "disabled",
+	            "type": "primary"
+	          },
+	          "children": [
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "Input Text",
+	                "autofocus": function () {return this.autofocus},
+	                "value": "test active",
+	                "disabled": "true"
+	              },
+	              "classList": [
+	                "disabledinput"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+/* 295 */
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 20
+	  },
+	  "title": {
+	    "fontSize": 24
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82,
+	    "backgroundColor": "#008000",
+	    "width:active": 180,
+	    "height:active": 82,
+	    "backgroundColor:active": "#FF0000"
+	  },
+	  "focusinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:focus": "#008000",
+	    "backgroundColor:focus": "#FF0000"
+	  },
+	  "enabledinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:enabled": "#FFFF00",
+	    "backgroundColor:enabled": "#0000FF"
+	  },
+	  "disabledinput": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 700,
+	    "color:disabled": "#FFFFFF",
+	    "backgroundColor:disabled": "#808080"
+	  }
+	}
+
+/***/ },
+/* 296 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	__webpack_require__(4);
+	module.exports = {
+	    data: function () {return {
+	        logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	        autofocus: false
+	    }},
+	    methods: {}
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/showcase/ui.js b/android/playground/app/src/main/assets/showcase/ui.js
index edab05c..fb73ceb 100644
--- a/android/playground/app/src/main/assets/showcase/ui.js
+++ b/android/playground/app/src/main/assets/showcase/ui.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(285)
-	var __weex_style__ = __webpack_require__(286)
-	var __weex_script__ = __webpack_require__(287)
+	var __weex_template__ = __webpack_require__(297)
+	var __weex_style__ = __webpack_require__(298)
+	var __weex_script__ = __webpack_require__(299)
 
 	__weex_define__('@weex-component/045f40e22d4b6e9c9f36354367812ecd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2227,7 +2227,19 @@
 /* 282 */,
 /* 283 */,
 /* 284 */,
-/* 285 */
+/* 285 */,
+/* 286 */,
+/* 287 */,
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2390,7 +2402,7 @@
 	}
 
 /***/ },
-/* 286 */
+/* 298 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2401,7 +2413,7 @@
 	}
 
 /***/ },
-/* 287 */
+/* 299 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/style/index.js b/android/playground/app/src/main/assets/style/index.js
index 9f1c024..3bccccf 100644
--- a/android/playground/app/src/main/assets/style/index.js
+++ b/android/playground/app/src/main/assets/style/index.js
@@ -44,12 +44,12 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(288)
-	__webpack_require__(296)
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	__webpack_require__(300)
+	__webpack_require__(308)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(312)
+	var __weex_style__ = __webpack_require__(313)
+	var __weex_script__ = __webpack_require__(314)
 
 	__weex_define__('@weex-component/2bb97ed0198ea3308e26ee13c0047c9c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2233,13 +2233,25 @@
 /* 285 */,
 /* 286 */,
 /* 287 */,
-/* 288 */
+/* 288 */,
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(293)
-	var __weex_style__ = __webpack_require__(294)
-	var __weex_script__ = __webpack_require__(295)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(305)
+	var __weex_style__ = __webpack_require__(306)
+	var __weex_script__ = __webpack_require__(307)
 
 	__weex_define__('@weex-component/style-box', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2256,12 +2268,12 @@
 
 
 /***/ },
-/* 289 */
+/* 301 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2278,7 +2290,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2296,7 +2308,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2315,7 +2327,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2334,7 +2346,7 @@
 
 
 /***/ },
-/* 293 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2600,7 +2612,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 306 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2623,7 +2635,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 307 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2638,13 +2650,13 @@
 
 
 /***/ },
-/* 296 */
+/* 308 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(297)
-	var __weex_style__ = __webpack_require__(298)
-	var __weex_script__ = __webpack_require__(299)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(309)
+	var __weex_style__ = __webpack_require__(310)
+	var __weex_script__ = __webpack_require__(311)
 
 	__weex_define__('@weex-component/style-flex', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2661,7 +2673,7 @@
 
 
 /***/ },
-/* 297 */
+/* 309 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3287,7 +3299,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 310 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3304,7 +3316,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 311 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3314,7 +3326,7 @@
 
 
 /***/ },
-/* 300 */
+/* 312 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3457,7 +3469,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 313 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3468,7 +3480,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 314 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/style/style-box.js b/android/playground/app/src/main/assets/style/style-box.js
index 9d5e89a..21eb15b 100644
--- a/android/playground/app/src/main/assets/style/style-box.js
+++ b/android/playground/app/src/main/assets/style/style-box.js
@@ -44,10 +44,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(293)
-	var __weex_style__ = __webpack_require__(294)
-	var __weex_script__ = __webpack_require__(295)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(305)
+	var __weex_style__ = __webpack_require__(306)
+	var __weex_script__ = __webpack_require__(307)
 
 	__weex_define__('@weex-component/1cc382dbc23ca75e8dd34af712ba54f1', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2232,12 +2232,24 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2266,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2284,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2303,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,7 +2322,7 @@
 
 
 /***/ },
-/* 293 */
+/* 305 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2576,7 +2588,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 306 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2599,7 +2611,7 @@
 	}
 
 /***/ },
-/* 295 */
+/* 307 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/style/style-flex.js b/android/playground/app/src/main/assets/style/style-flex.js
index b2b6411..a19e84a 100644
--- a/android/playground/app/src/main/assets/style/style-flex.js
+++ b/android/playground/app/src/main/assets/style/style-flex.js
@@ -44,10 +44,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(289)
-	var __weex_template__ = __webpack_require__(297)
-	var __weex_style__ = __webpack_require__(298)
-	var __weex_script__ = __webpack_require__(299)
+	__webpack_require__(301)
+	var __weex_template__ = __webpack_require__(309)
+	var __weex_style__ = __webpack_require__(310)
+	var __weex_script__ = __webpack_require__(311)
 
 	__weex_define__('@weex-component/601bcbb157cb7b89fd0d4cc63178b528', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2232,12 +2232,24 @@
 /* 286 */,
 /* 287 */,
 /* 288 */,
-/* 289 */
+/* 289 */,
+/* 290 */,
+/* 291 */,
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2254,7 +2266,7 @@
 
 
 /***/ },
-/* 290 */
+/* 302 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2272,7 +2284,7 @@
 	}
 
 /***/ },
-/* 291 */
+/* 303 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2291,7 +2303,7 @@
 	}
 
 /***/ },
-/* 292 */
+/* 304 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2310,11 +2322,11 @@
 
 
 /***/ },
-/* 293 */,
-/* 294 */,
-/* 295 */,
-/* 296 */,
-/* 297 */
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2940,7 +2952,7 @@
 	}
 
 /***/ },
-/* 298 */
+/* 310 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2957,7 +2969,7 @@
 	}
 
 /***/ },
-/* 299 */
+/* 311 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/style/style-item.js b/android/playground/app/src/main/assets/style/style-item.js
index c625c2d..7282a86 100644
--- a/android/playground/app/src/main/assets/style/style-item.js
+++ b/android/playground/app/src/main/assets/style/style-item.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(290)
-	var __weex_style__ = __webpack_require__(291)
-	var __weex_script__ = __webpack_require__(292)
+	var __weex_template__ = __webpack_require__(302)
+	var __weex_style__ = __webpack_require__(303)
+	var __weex_script__ = __webpack_require__(304)
 
 	__weex_define__('@weex-component/db2a20e3c65e67c0f449e29c05c9d644', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 290:
+/***/ 302:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,7 +85,7 @@
 
 /***/ },
 
-/***/ 291:
+/***/ 303:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 292:
+/***/ 304:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-1.js b/android/playground/app/src/main/assets/syntax/hello-world-1.js
index 3b31200..dbdf788 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-1.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-1.js
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(306)
+	var __weex_template__ = __webpack_require__(318)
 
 	__weex_define__('@weex-component/5e6bbced7515fc4165499153f5d8276a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 306:
+/***/ 318:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-2.js b/android/playground/app/src/main/assets/syntax/hello-world-2.js
index 60f2b4d..ef0a76f 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-2.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-2.js
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(307)
+	var __weex_template__ = __webpack_require__(319)
 
 	__weex_define__('@weex-component/25608f094c039b891a20c8161b9c650b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 307:
+/***/ 319:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -70,7 +70,7 @@
 	    {
 	      "type": "image",
 	      "attr": {
-	        "src": "http://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	        "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	      },
 	      "style": {
 	        "width": 360,
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-3.js b/android/playground/app/src/main/assets/syntax/hello-world-3.js
index 9d0e747..373dd3b 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-3.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-3.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(308)
-	var __weex_style__ = __webpack_require__(309)
+	var __weex_template__ = __webpack_require__(320)
+	var __weex_style__ = __webpack_require__(321)
 
 	__weex_define__('@weex-component/695862caffb746fa67bb70cbd1bb819e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -60,7 +60,7 @@
 
 /***/ },
 
-/***/ 308:
+/***/ 320:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -72,7 +72,7 @@
 	    {
 	      "type": "image",
 	      "attr": {
-	        "src": "http://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	        "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	      },
 	      "classList": [
 	        "logo"
@@ -92,7 +92,7 @@
 
 /***/ },
 
-/***/ 309:
+/***/ 321:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-4.js b/android/playground/app/src/main/assets/syntax/hello-world-4.js
index ccdf0b3..101f04e 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-4.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-4.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(310)
-	var __weex_style__ = __webpack_require__(311)
-	var __weex_script__ = __webpack_require__(312)
+	var __weex_template__ = __webpack_require__(322)
+	var __weex_style__ = __webpack_require__(323)
+	var __weex_script__ = __webpack_require__(324)
 
 	__weex_define__('@weex-component/efbfb8ecf417c1cf14746fdf4099343d', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 310:
+/***/ 322:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 311:
+/***/ 323:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -117,14 +117,14 @@
 
 /***/ },
 
-/***/ 312:
+/***/ 324:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }}
 	};}
diff --git a/android/playground/app/src/main/assets/syntax/hello-world-5.js b/android/playground/app/src/main/assets/syntax/hello-world-5.js
index 09192aa..c49f915 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world-5.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world-5.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(313)
-	var __weex_style__ = __webpack_require__(314)
-	var __weex_script__ = __webpack_require__(315)
+	var __weex_template__ = __webpack_require__(325)
+	var __weex_style__ = __webpack_require__(326)
+	var __weex_script__ = __webpack_require__(327)
 
 	__weex_define__('@weex-component/06cb3b1cf32d7e68eb4f41a491128601', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 313:
+/***/ 325:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 314:
+/***/ 326:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +120,14 @@
 
 /***/ },
 
-/***/ 315:
+/***/ 327:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }},
 	  methods: {
diff --git a/android/playground/app/src/main/assets/syntax/hello-world.js b/android/playground/app/src/main/assets/syntax/hello-world.js
index 91a7bdd..e460375 100644
--- a/android/playground/app/src/main/assets/syntax/hello-world.js
+++ b/android/playground/app/src/main/assets/syntax/hello-world.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(303)
-	var __weex_style__ = __webpack_require__(304)
-	var __weex_script__ = __webpack_require__(305)
+	var __weex_template__ = __webpack_require__(315)
+	var __weex_style__ = __webpack_require__(316)
+	var __weex_script__ = __webpack_require__(317)
 
 	__weex_define__('@weex-component/ca86dd7272942388d48952706d37e8a7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 303:
+/***/ 315:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 304:
+/***/ 316:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,14 +120,14 @@
 
 /***/ },
 
-/***/ 305:
+/***/ 317:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
 	module.exports = {
 	  data: function () {return {
-	    logoUrl: 'http://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
 	    target: 'World'
 	  }},
 	  methods: {
diff --git a/android/playground/app/src/main/assets/syntax/index.js b/android/playground/app/src/main/assets/syntax/index.js
index 9105baa..18c01bf 100644
--- a/android/playground/app/src/main/assets/syntax/index.js
+++ b/android/playground/app/src/main/assets/syntax/index.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(316)
-	var __weex_script__ = __webpack_require__(317)
+	var __weex_template__ = __webpack_require__(328)
+	var __weex_script__ = __webpack_require__(329)
 
 	__weex_define__('@weex-component/7c0aa0b76c7fe063e27065c721bee1a0', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3242,7 +3242,19 @@
 /* 313 */,
 /* 314 */,
 /* 315 */,
-/* 316 */
+/* 316 */,
+/* 317 */,
+/* 318 */,
+/* 319 */,
+/* 320 */,
+/* 321 */,
+/* 322 */,
+/* 323 */,
+/* 324 */,
+/* 325 */,
+/* 326 */,
+/* 327 */,
+/* 328 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3254,7 +3266,7 @@
 	}
 
 /***/ },
-/* 317 */
+/* 329 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-component.js b/android/playground/app/src/main/assets/syntax/script-component.js
index 18f012b..69c5cde 100644
--- a/android/playground/app/src/main/assets/syntax/script-component.js
+++ b/android/playground/app/src/main/assets/syntax/script-component.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(318)
-	var __weex_script__ = __webpack_require__(319)
+	var __weex_template__ = __webpack_require__(330)
+	var __weex_script__ = __webpack_require__(331)
 
 	__weex_define__('@weex-component/2a5ba7e55afcba45accf15b3179f0016', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 318:
+/***/ 330:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -96,12 +96,12 @@
 
 /***/ },
 
-/***/ 319:
+/***/ 331:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(320);
+	__webpack_require__(332);
 	module.exports = {
 	  data: function () {return {
 	    items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
@@ -112,12 +112,12 @@
 
 /***/ },
 
-/***/ 320:
+/***/ 332:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(321)
-	var __weex_style__ = __webpack_require__(322)
-	var __weex_script__ = __webpack_require__(323)
+	var __weex_template__ = __webpack_require__(333)
+	var __weex_style__ = __webpack_require__(334)
+	var __weex_script__ = __webpack_require__(335)
 
 	__weex_define__('@weex-component/sub', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -135,7 +135,7 @@
 
 /***/ },
 
-/***/ 321:
+/***/ 333:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -150,7 +150,7 @@
 
 /***/ },
 
-/***/ 322:
+/***/ 334:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -162,7 +162,7 @@
 
 /***/ },
 
-/***/ 323:
+/***/ 335:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-data.js b/android/playground/app/src/main/assets/syntax/script-data.js
index c4ae858..b41c2fb 100644
--- a/android/playground/app/src/main/assets/syntax/script-data.js
+++ b/android/playground/app/src/main/assets/syntax/script-data.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(324)
-	var __weex_style__ = __webpack_require__(325)
-	var __weex_script__ = __webpack_require__(326)
+	var __weex_template__ = __webpack_require__(336)
+	var __weex_style__ = __webpack_require__(337)
+	var __weex_script__ = __webpack_require__(338)
 
 	__weex_define__('@weex-component/2267e3020f57f77e5d733a60b4ea145b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 324:
+/***/ 336:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 325:
+/***/ 337:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +127,7 @@
 
 /***/ },
 
-/***/ 326:
+/***/ 338:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-events.js b/android/playground/app/src/main/assets/syntax/script-events.js
index b860bcc..4c5b691 100644
--- a/android/playground/app/src/main/assets/syntax/script-events.js
+++ b/android/playground/app/src/main/assets/syntax/script-events.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(327)
-	var __weex_style__ = __webpack_require__(328)
-	var __weex_script__ = __webpack_require__(329)
+	var __weex_template__ = __webpack_require__(339)
+	var __weex_style__ = __webpack_require__(340)
+	var __weex_script__ = __webpack_require__(341)
 
 	__weex_define__('@weex-component/491ca7f339a97e2fe3e130536e8fb536', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -92,7 +92,7 @@
 
 /***/ },
 
-/***/ 327:
+/***/ 339:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 328:
+/***/ 340:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +127,7 @@
 
 /***/ },
 
-/***/ 329:
+/***/ 341:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-instance.js b/android/playground/app/src/main/assets/syntax/script-instance.js
index a264d5d..95ef8bb 100644
--- a/android/playground/app/src/main/assets/syntax/script-instance.js
+++ b/android/playground/app/src/main/assets/syntax/script-instance.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(330)
-	var __weex_style__ = __webpack_require__(331)
-	var __weex_script__ = __webpack_require__(332)
+	var __weex_template__ = __webpack_require__(342)
+	var __weex_style__ = __webpack_require__(343)
+	var __weex_script__ = __webpack_require__(344)
 
 	__weex_define__('@weex-component/e463d05fb45b7117577286bed2b723ab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 330:
+/***/ 342:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 331:
+/***/ 343:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 332:
+/***/ 344:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-lifecycle.js b/android/playground/app/src/main/assets/syntax/script-lifecycle.js
index e1535cc..5ce1835 100644
--- a/android/playground/app/src/main/assets/syntax/script-lifecycle.js
+++ b/android/playground/app/src/main/assets/syntax/script-lifecycle.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(333)
-	var __weex_style__ = __webpack_require__(334)
-	var __weex_script__ = __webpack_require__(335)
+	var __weex_template__ = __webpack_require__(345)
+	var __weex_style__ = __webpack_require__(346)
+	var __weex_script__ = __webpack_require__(347)
 
 	__weex_define__('@weex-component/bc7273b0d417cff1bb0a2e09e3cd1c92', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 333:
+/***/ 345:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 334:
+/***/ 346:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 335:
+/***/ 347:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-module.js b/android/playground/app/src/main/assets/syntax/script-module.js
index 6cb71c2..658505f 100644
--- a/android/playground/app/src/main/assets/syntax/script-module.js
+++ b/android/playground/app/src/main/assets/syntax/script-module.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(336)
-	var __weex_style__ = __webpack_require__(337)
-	var __weex_script__ = __webpack_require__(338)
+	var __weex_template__ = __webpack_require__(348)
+	var __weex_style__ = __webpack_require__(349)
+	var __weex_script__ = __webpack_require__(350)
 
 	__weex_define__('@weex-component/0c363fe819262ec8f8baf1e516e1d694', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 336:
+/***/ 348:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -89,7 +89,7 @@
 
 /***/ },
 
-/***/ 337:
+/***/ 349:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 338:
+/***/ 350:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/script-options.js b/android/playground/app/src/main/assets/syntax/script-options.js
index b494204..38ca125 100644
--- a/android/playground/app/src/main/assets/syntax/script-options.js
+++ b/android/playground/app/src/main/assets/syntax/script-options.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(339)
-	var __weex_style__ = __webpack_require__(340)
-	var __weex_script__ = __webpack_require__(341)
+	var __weex_template__ = __webpack_require__(351)
+	var __weex_style__ = __webpack_require__(352)
+	var __weex_script__ = __webpack_require__(353)
 
 	__weex_define__('@weex-component/d8cdc8a8832b252e92de2e6e8a50dd36', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 339:
+/***/ 351:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -86,7 +86,7 @@
 
 /***/ },
 
-/***/ 340:
+/***/ 352:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 341:
+/***/ 353:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/template-class.js b/android/playground/app/src/main/assets/syntax/template-class.js
index 8fff82e..d866656 100644
--- a/android/playground/app/src/main/assets/syntax/template-class.js
+++ b/android/playground/app/src/main/assets/syntax/template-class.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(342)
-	var __weex_style__ = __webpack_require__(343)
-	var __weex_script__ = __webpack_require__(344)
+	var __weex_template__ = __webpack_require__(354)
+	var __weex_style__ = __webpack_require__(355)
+	var __weex_script__ = __webpack_require__(356)
 
 	__weex_define__('@weex-component/14c303543be596aa2a969ac47565db7c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 342:
+/***/ 354:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 343:
+/***/ 355:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -119,7 +119,7 @@
 
 /***/ },
 
-/***/ 344:
+/***/ 356:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/template-content.js b/android/playground/app/src/main/assets/syntax/template-content.js
index 0dad751..c283437 100644
--- a/android/playground/app/src/main/assets/syntax/template-content.js
+++ b/android/playground/app/src/main/assets/syntax/template-content.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(345)
-	var __weex_script__ = __webpack_require__(346)
+	var __weex_template__ = __webpack_require__(357)
+	var __weex_script__ = __webpack_require__(358)
 
 	__weex_define__('@weex-component/2b26a2ba0096277f201ca0b657282838', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 345:
+/***/ 357:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,22 +85,22 @@
 
 /***/ },
 
-/***/ 346:
+/***/ 358:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(347);}
+	__webpack_require__(359);}
 	/* generated by weex-loader */
 
 
 /***/ },
 
-/***/ 347:
+/***/ 359:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(348)
-	var __weex_style__ = __webpack_require__(349)
+	var __weex_template__ = __webpack_require__(360)
+	var __weex_style__ = __webpack_require__(361)
 
 	__weex_define__('@weex-component/btn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -113,7 +113,7 @@
 
 /***/ },
 
-/***/ 348:
+/***/ 360:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 349:
+/***/ 361:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/android/playground/app/src/main/assets/syntax/template-event.js b/android/playground/app/src/main/assets/syntax/template-event.js
index 0b054cf..183d534 100644
--- a/android/playground/app/src/main/assets/syntax/template-event.js
+++ b/android/playground/app/src/main/assets/syntax/template-event.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(350)
-	var __weex_style__ = __webpack_require__(351)
-	var __weex_script__ = __webpack_require__(352)
+	var __weex_template__ = __webpack_require__(362)
+	var __weex_style__ = __webpack_require__(363)
+	var __weex_script__ = __webpack_require__(364)
 
 	__weex_define__('@weex-component/40a248d5d833060161447365b18603fa', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 350:
+/***/ 362:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 351:
+/***/ 363:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -168,7 +168,7 @@
 
 /***/ },
 
-/***/ 352:
+/***/ 364:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/template-if.js b/android/playground/app/src/main/assets/syntax/template-if.js
index a753d5e..7bbd646 100644
--- a/android/playground/app/src/main/assets/syntax/template-if.js
+++ b/android/playground/app/src/main/assets/syntax/template-if.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(353)
-	var __weex_style__ = __webpack_require__(354)
-	var __weex_script__ = __webpack_require__(355)
+	var __weex_template__ = __webpack_require__(365)
+	var __weex_style__ = __webpack_require__(366)
+	var __weex_script__ = __webpack_require__(367)
 
 	__weex_define__('@weex-component/6019f2874c768d147034c91e003e5ba4', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 353:
+/***/ 365:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +109,7 @@
 
 /***/ },
 
-/***/ 354:
+/***/ 366:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -128,7 +128,7 @@
 
 /***/ },
 
-/***/ 355:
+/***/ 367:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/android/playground/app/src/main/assets/syntax/template-repeat-update.js b/android/playground/app/src/main/assets/syntax/template-repeat-update.js
index 3317d76..f4eccef 100644
--- a/android/playground/app/src/main/assets/syntax/template-repeat-update.js
+++ b/android/playground/app/src/main/assets/syntax/template-repeat-update.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(359)
-	var __weex_style__ = __webpack_require__(360)
-	var __weex_script__ = __webpack_require__(361)
+	var __weex_template__ = __webpack_require__(371)
+	var __weex_style__ = __webpack_require__(372)
+	var __weex_script__ = __webpack_require__(373)
 
 	__weex_define__('@weex-component/01700b62cc1ab66f2cbfd893c5c95eaf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 359:
+/***/ 371:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -124,7 +124,7 @@
 
 /***/ },
 
-/***/ 360:
+/***/ 372:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 361:
+/***/ 373:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/template-repeat.js b/android/playground/app/src/main/assets/syntax/template-repeat.js
index 5c03d53..dfcc2d0 100644
--- a/android/playground/app/src/main/assets/syntax/template-repeat.js
+++ b/android/playground/app/src/main/assets/syntax/template-repeat.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(356)
-	var __weex_style__ = __webpack_require__(357)
-	var __weex_script__ = __webpack_require__(358)
+	var __weex_template__ = __webpack_require__(368)
+	var __weex_style__ = __webpack_require__(369)
+	var __weex_script__ = __webpack_require__(370)
 
 	__weex_define__('@weex-component/19638a010faa9c01b41851f36c4157df', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 356:
+/***/ 368:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -227,7 +227,7 @@
 
 /***/ },
 
-/***/ 357:
+/***/ 369:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -241,7 +241,7 @@
 
 /***/ },
 
-/***/ 358:
+/***/ 370:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/syntax/template-style.js b/android/playground/app/src/main/assets/syntax/template-style.js
index 649ee6f..6651158 100644
--- a/android/playground/app/src/main/assets/syntax/template-style.js
+++ b/android/playground/app/src/main/assets/syntax/template-style.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(362)
-	var __weex_script__ = __webpack_require__(363)
+	var __weex_template__ = __webpack_require__(374)
+	var __weex_script__ = __webpack_require__(375)
 
 	__weex_define__('@weex-component/301fb11cc58bbe739f3ee7ecea123456', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 362:
+/***/ 374:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 363:
+/***/ 375:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/template.js b/android/playground/app/src/main/assets/template.js
index 8f89e7c..bde736f 100644
--- a/android/playground/app/src/main/assets/template.js
+++ b/android/playground/app/src/main/assets/template.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(364)
-	var __weex_style__ = __webpack_require__(365)
-	var __weex_script__ = __webpack_require__(366)
+	var __weex_template__ = __webpack_require__(376)
+	var __weex_style__ = __webpack_require__(377)
+	var __weex_script__ = __webpack_require__(378)
 
 	__weex_define__('@weex-component/b40420dfe575cbe06a71dd757f5b9128', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2109,7 +2109,7 @@
 
 /***/ },
 
-/***/ 364:
+/***/ 376:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2220,14 +2220,14 @@
 
 /***/ },
 
-/***/ 365:
+/***/ 377:
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
 
-/***/ 366:
+/***/ 378:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/android/playground/app/src/main/assets/test.js b/android/playground/app/src/main/assets/test.js
new file mode 100644
index 0000000..b09e4d1
--- /dev/null
+++ b/android/playground/app/src/main/assets/test.js
@@ -0,0 +1,128 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(379)
+	var __weex_script__ = __webpack_require__(380)
+
+	__weex_define__('@weex-component/9305542c7d16b107fad92f56b2a08dab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	})
+
+	__weex_bootstrap__('@weex-component/9305542c7d16b107fad92f56b2a08dab',undefined,undefined)
+
+/***/ },
+
+/***/ 379:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "scroller",
+	  "children": [
+	    {
+	      "type": "div",
+	      "id": "r",
+	      "children": [
+	        {
+	          "type": "text",
+	          "attr": {
+	            "value": function () {return this.x}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "height": 2000,
+	            "backgroundColor": "#ff0000"
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "events": {
+	            "click": "foo"
+	          },
+	          "attr": {
+	            "value": function () {return this.x}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 380:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var dom = __weex_require__('@weex-module/dom');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      x: 1
+	    };
+	  },
+	  methods: {
+	    foo: function foo(e) {
+	      dom.scrollToElement(this.$el('r'), { offset: 0 });
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/animation.js b/android/playground/app/src/main/assets/vue/animation.js
new file mode 100644
index 0000000..c6c8b3d
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/animation.js
@@ -0,0 +1,709 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(381)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(382)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(391)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/animation.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 381:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "block": {
+	    "position": "absolute",
+	    "width": 250,
+	    "height": 250,
+	    "top": 300,
+	    "left": 400,
+	    "backgroundColor": "#F0AD4E",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "block-txt": {
+	    "color": "#FFFFFF",
+	    "fontSize": 70
+	  }
+	}
+
+/***/ },
+
+/***/ 382:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var animation = __weex_require_module__('animation');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      transformOrigin: 'center center',
+	      current_rotate: 0,
+	      current_scale: 1,
+	      current_color: '#FF0000',
+	      current_opacity: 1,
+	      current_translate: '',
+	      current_transform: '',
+	      isStop: true
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    anim: function anim(styles, timingFunction, duration, callback) {
+	      animation.transition(this.$refs.block.ref, {
+	        styles: styles,
+	        timingFunction: timingFunction,
+	        duration: duration
+	      }, callback);
+	    },
+	    rotate: function rotate() {
+	      var self = this;
+	      self.current_rotate += 90;
+	      self.anim({
+	        transform: 'rotate(' + self.current_rotate + 'deg)'
+	      }, 'ease-in-out', 500, function () {
+	        if (self.current_rotate === 360) {
+	          self.current_rotate = 0;
+	        } else {
+	          self.rotate();
+	        }
+	      });
+	    },
+	    translate: function translate() {
+	      this.current_translate = this.current_translate ? '' : 'translate(50%, 50%)';
+	      this.anim({
+	        transform: this.current_translate
+	      }, 'ease-in', 500, function () {});
+	    },
+	    scale: function scale() {
+	      var self = this;
+	      self.current_scale = self.current_scale === 2 ? .5 : 2;
+	      self.anim({
+	        transform: 'scale(' + self.current_scale + ')'
+	      }, 'linear', 500, function () {});
+	    },
+	    transform: function transform() {
+	      var self = this;
+	      this.current_transform = this.current_transform ? '' : 'rotate(45deg) scale(1.5)';
+	      this.anim({
+	        transform: this.current_transform,
+	        transformOrigin: 'left top'
+	      }, 'ease-out', 500, function () {
+	        if (self.current_transform !== '') {
+	          self.anim({
+	            transform: 'rotate(-90deg) scale(1.2)',
+	            transformOrigin: 'left top'
+	          }, 'ease-out', 500, function () {});
+	        } else {}
+	      });
+	    },
+	    composite: function composite() {
+	      var self = this;
+	      self.current_transform = self.current_transform ? '' : 'rotate(45deg) scale(1.5) translate(50%, 50%)';
+	      self.current_color = self.current_color === '#F0AD4E' ? '#D9534F' : '#F0AD4E';
+	      self.current_opacity = self.current_opacity === 1 ? 0.1 : 1;
+	      this.anim({
+	        transform: this.current_transform,
+	        transformOrigin: 'left top',
+	        backgroundColor: self.current_color,
+	        opacity: self.current_opacity
+	      }, 'ease-out', 1000, function () {});
+	    },
+	    color: function color() {
+	      var self = this;
+	      self.current_color = self.current_color === '#F0AD4E' ? '#D9534F' : '#F0AD4E';
+	      self.anim({
+	        backgroundColor: self.current_color
+	      }, 'linear', 500, function () {});
+	    },
+	    opacity: function opacity() {
+	      var self = this;
+	      self.current_opacity = self.current_opacity === 1 ? 0.1 : 1;
+	      self.anim({
+	        opacity: self.current_opacity
+	      }, 'linear', 500, function () {});
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 391:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Transform",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "Rotate",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.rotate($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Scale",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.scale($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Translate",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.translate($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Transform",
+	      "type": "success",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.transform($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Others",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "BgColor",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.color($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "Opacity",
+	      "type": "primary",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.opacity($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginTop: "12px"
+	    },
+	    attrs: {
+	      "value": "All",
+	      "type": "success",
+	      "size": "middle"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.composite($event)
+	      }
+	    }
+	  })]), _h('div', {
+	    ref: "block",
+	    staticClass: ["block"],
+	    style: {
+	      transformOrigin: _vm.transformOrigin
+	    }
+	  }, [_h('text', {
+	    staticClass: ["block-txt"]
+	  }, ["Anim"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/a.js b/android/playground/app/src/main/assets/vue/components/a.js
new file mode 100644
index 0000000..95cc130
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/a.js
@@ -0,0 +1,438 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(392)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(397)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/a.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 392:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393)
+	  }
+	};
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 397:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Hyperlink",
+	      "type": "primary"
+	    }
+	  }, [_h('a', {
+	    attrs: {
+	      "href": "http://alibaba.github.io/weex/index.html"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "info",
+	      "value": "Click me to see how 'A' element opens a new world."
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/countdown.js b/android/playground/app/src/main/assets/vue/components/countdown.js
new file mode 100644
index 0000000..d4f0f6f
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/countdown.js
@@ -0,0 +1,640 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(398)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(399)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(404)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/countdown.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 398:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "ctno1": {
+	    "borderRadius": 8,
+	    "paddingTop": 6,
+	    "paddingBottom": 6,
+	    "paddingRight": 4,
+	    "paddingLeft": 4,
+	    "marginLeft": 2,
+	    "marginRight": 2,
+	    "backgroundColor": "rgb(242,222,222)",
+	    "color": "rgb(169,68,66)"
+	  },
+	  "ctno2": {
+	    "borderRadius": 8,
+	    "paddingTop": 30,
+	    "paddingBottom": 30,
+	    "paddingLeft": 16,
+	    "paddingRight": 16,
+	    "backgroundColor": "rgb(217,237,247)",
+	    "color": "rgb(49,112,143)",
+	    "textAlign": "center",
+	    "fontSize": 40
+	  }
+	}
+
+/***/ },
+
+/***/ 399:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      countdown1: {
+	        remain: 5000,
+	        time: {
+	          D: '0',
+	          hh: '00',
+	          mm: '00',
+	          ss: '00'
+	        }
+	      },
+	      countdown2: {
+	        remain: 5000,
+	        time: {
+	          MM: '0',
+	          ss: '0'
+	        }
+	      }
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    countdown: __webpack_require__(400)
+	  },
+	  methods: {
+	    tick: function tick(e, k) {
+	      this[k].time = JSON.parse(JSON.stringify(e));
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 400:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(401)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(402)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(403)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/countdown.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 401:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden"
+	  }
+	}
+
+/***/ },
+
+/***/ 402:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	function format(str) {
+	  if (str.length >= 2) {
+	    return str;
+	  } else {
+	    return '0' + str;
+	  }
+	}
+
+	function getTime(target, now) {
+	  var remain = parseInt((target - now) / 1000);
+	  var D = String(parseInt(remain / 86400));
+	  var DD = format(D);
+	  var h = String(parseInt((remain - parseInt(D) * 86400) / 3600));
+	  var hh = format(h);
+	  var H = String(parseInt(remain / 3600));
+	  var HH = format(H);
+	  var m = String(parseInt((remain - parseInt(H) * 3600) / 60));
+	  var mm = format(m);
+	  var M = String(parseInt(remain / 60));
+	  var MM = format(M);
+	  var s = String(remain - parseInt(M) * 60);
+	  var ss = format(s);
+	  var S = String(remain);
+	  var SS = format(S);
+	  return {
+	    D: D, DD: DD,
+	    h: h, hh: hh,
+	    H: H, HH: HH,
+	    m: m, mm: mm,
+	    M: M, MM: MM,
+	    s: s, ss: ss,
+	    S: S, SS: SS
+	  };
+	}
+
+	module.exports = {
+	  props: {
+	    remain: {
+	      default: 0
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      now: 0,
+	      target: 0,
+	      outofview: false
+	    };
+	  },
+	  created: function created() {
+	    this.now = Date.now();
+	    this.target = this.now + this.remain * 1000;
+	    if (this.remain > 0) {
+	      this.run();
+	    }
+	  },
+	  methods: {
+	    run: function run() {
+	      if (!this.outofview) {
+	        this.now = Date.now();
+	      }
+	      var time = getTime(this.target, this.now);
+	      if (this.target >= this.now) {
+	        this.$emit('tick', time);
+	      } else {
+	        this.$emit('alarm', time);
+	        return;
+	      }
+	      setTimeout(this.run.bind(this), 1000);
+	    },
+	    appeared: function appeared() {
+	      this.outofview = false;
+	    },
+	    disappeared: function disappeared() {
+	      this.outofview = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 403:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      overflow: "hidden",
+	      flexDirection: "row"
+	    },
+	    on: {
+	      "appear": _vm.appeared,
+	      "disappear": _vm.disappeared
+	    }
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 404:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Countdown",
+	      "type": "primary"
+	    }
+	  }, [_h('countdown', {
+	    staticStyle: {
+	      width: "750",
+	      marginTop: "20",
+	      marginBottom: "20"
+	    },
+	    attrs: {
+	      "remain": _vm.countdown1.remain
+	    },
+	    on: {
+	      "tick": function($event) {
+	        _vm.tick($event, 'countdown1')
+	      }
+	    }
+	  }, [_h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.D)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["day(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.hh)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["hour(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.mm)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["minute(s)"]), _h('text', {
+	    staticClass: ["ctno1"]
+	  }, [_vm._s(_vm.countdown1.time.ss)]), _h('text', {
+	    staticClass: ["ctno1"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, ["second(s)"])]), _h('countdown', {
+	    staticStyle: {
+	      width: "600"
+	    },
+	    attrs: {
+	      "remain": _vm.countdown2.remain
+	    },
+	    on: {
+	      "tick": function($event) {
+	        _vm.tick($event, 'countdown2')
+	      }
+	    }
+	  }, [_h('text', {
+	    staticClass: ["ctno2"]
+	  }, [_vm._s(_vm.countdown2.time.MM)]), _h('text', {
+	    staticClass: ["ctno2"],
+	    staticStyle: {
+	      backgroundColor: "#FFFFFF",
+	      color: "#AAAAAA"
+	    }
+	  }, [":"]), _h('text', {
+	    staticClass: ["ctno2"]
+	  }, [_vm._s(_vm.countdown2.time.ss)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/image.js b/android/playground/app/src/main/assets/vue/components/image.js
new file mode 100644
index 0000000..975ec97
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/image.js
@@ -0,0 +1,641 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(405)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(406)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(407)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/image.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 405:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "img": {
+	    "marginBottom": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 406:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393)
+	  }
+	};
+
+/***/ },
+
+/***/ 407:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "width x height",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Weex screen width is 750"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "300px",
+	      height: "300px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "200px",
+	      height: "200px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "50px",
+	      height: "50px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "GIF Animation",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Depanding on Native ImageSDK"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "96px",
+	      height: "96px"
+	    },
+	    attrs: {
+	      "src": "https://gtd.alicdn.com/tps/i4/T1HcvHXd4nXXb6ROYh-48-48.gif"
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "68px",
+	      height: "68px",
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1El.mKXXXXXXyapXXXXXXXXXX-34-34.gif"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "Base64",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Depanding on Native ImageSDK"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "96px",
+	      height: "96px"
+	    },
+	    attrs: {
+	      "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAMAAABgOjJdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1QTFRFhomSb3J8XGBrdnqDgYWNlJefV1tmfoGKU1diT1NfgISNgoWOYmZwio2Vi4+Wc3eAkJObZGhzUlZiaGt2U1djfYCKZGdyhYiQeHyFio6VgYWOVVllbHB6XWFsY2ZxaWx3jZCYXmFsfYCJcnZ/UVVham54V1tng4aPb3N8WV1pX2JtZWl0YWVvVlpmiYyUWVxohomRd3uEdHiBeX2GZ2t1hIeQVFhkf4OMbnJ8fYGKdnqEb3N9kJScY2dycnaAjpKZdHeBjpKajI+Yc3eBhYiRf4KLXmFtio6Wi4+XjZCZkJSbkZScjI+XlJifTlJe+rAZcwAAAZBJREFUeNp0lOeWgjAQhSdUBQRRbFjX7tpW3XUt23tL3v9xNigJIHh/zRk+5iR3ZgIkULWmwgv+A7VWDWWBR/nSt2gLUzIVbLH1lo8RRW1wEfqxPtCKUaKTMUhURuUhTIi6Q07l6LuAEFdpEld6tWNEx00CKKJ3jsR1xSHJcj4bB+LmkpxT49Yj8mqQUVBBciUk8ITepESJ+5AqY1+uwny5IjDPcADoN0BIwjLOsjKZOewtbi/9fvi338a44CetIai2H/cokPLj9tfEj2wVzD4rIWMlfpu+CXc5Pw4qh5X7AUw4gZIswUENGT8lAN1fMBVeAxIIxYR3Nin0imOe52emdxkyP8aY+0S9Y2d63cNoxvACRTaeI70slst+cjYCAnXmuuS1RKKmy1hKBX0hzaC3KOsxsmz2Ir2NzMcEbVCo+cf5oDOWOzNAucpxxoglnZlT1+KzXk4kymKwL4ttN+73dhHeuWV85zLL073Vw3v7MdDuE3a/JRrCmqwFQ2yV8gmvg/d+aPCMH0GLvB//AgwAo1MTpxsaxVoAAAAASUVORK5CYII="
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "68px",
+	      height: "68px",
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "src": "data:image/gif;base64,R0lGODlhIgAiANU7AMvLy83Nzdra2srKysnJyejo6MbGxtzc3M7Ozuzs7NTU1N3d3fz8/NfX1/j4+Ovr6+/v79DQ0Obm5v39/d/f3/f398/Pz9vb2+np6fn5+f7+/tXV1fX19dnZ2erq6tHR0fb29sjIyMfHx+Li4vLy8u7u7ufn5/r6+uPj49bW1tPT09LS0sTExPT09ODg4O3t7eHh4eTk5MXFxd7e3vHx8fPz8/Dw8OXl5djY2P///8zMzP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0Q0QxODlDNENEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0Q0QxODlDNUNEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRDRDE4OUMyQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRDRDE4OUMzQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEBQAAOwAsAAAAACIAIgAABv/AnXBIFDIEnxmoyGw6hw6LTrdKPK9PhmI6lWC/xQN3agWDMWNdhDTJmZ+gS1oXUDUoD8dbOHk05oAIHS8aYDRbgIlTDTVXGiiKkVwFTgwdkpg6GE1ymZIRJUUjnpkURBCkmQJDDBueAQGJACEAOqtCCaQhBgOAAxEAAAtCGQKeBAAIyGkiFzk3Ii64UpghCg45EstTAAYQOS0DMUKjmLMPOTkVAQRc3d8cAZQ7YpgDAzbpHDrt3AYlOTggeCDEmL0B3wLyc+ctBwgEHgpmupdwXz8dAGTAC2BCCIWJBACqYzfGwIEcHkSM21EgFiYRC9I9uDcm2IoAAGAIaYFIEgBkAh8UBJvTbUCAYUIkkDLAwiggWLagREiF6ZaQAlQlIR3SKeucAJuITLjkNc2CE0yOlOWiIsOTAgjKNnB7pYKLuKQimJhgxkEBJC7nWFBwwAPaPTs0kJBwIMWGDSkaHECRoMKTIAAh+QQFAAA7ACwPAA0AEgAJAAAGRMCdUKcTGo3E4jF5RDKHSaUzCdtFn9ar5IrVBUQsA+JBDBkMISuSIJAsdgkAgFIojHaDpm3nOJKEFQFpTTsgUi+EiUJBACH5BAUAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZRwJ1wSBwCAMVdYJkMhGSiYYDAYhmSIVyJQnDtCApTYXY0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEk7d0MlkpdBACH5BAUAADsALBAADQAQAAQAAAYmwN0uEBAajyGAMWQYHIW6QQQA0O0ACILyKLrkbqLQzpGTEJ6GYxAAIfkEBQAAOwAsEAANABAABAAABiTA3U6nExqPgKIwQDwuQzKRLrBjsQxKYwhXohAIO9ODAnDKjkEAIfkEBQAAOwAsDwANABIACQAABkPAnXBIHOp0xR0yqTwum86k8wiDTo1TnSQbFeoCIpYB8TiGDIaQ0kgQSBa7BABAKRRGu0HRtnMQSUIVAWpJIE8vTIlBACH5BAUAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZQwJ1wSBwCAMVdICkMhGSiYYDAYhmSIVyJQnDtCArTg3I0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEx3QyVMlkEAIfkEBWQAOwAsEAANABAABAAABibA3S4QEBqPIYAxZBgchbpBBADQ7QAIgvIouuRuotDOkZMQnoZjEAA7"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "resize",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "resize=stretch(default) 600 x 200 "
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "stretch"
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "resize=contain 600 x 200 "
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "contain"
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "resize=cover 600 x 200"
+	    }
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "600px",
+	      height: "200px",
+	      borderStyle: "solid",
+	      borderWidth: "1px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "src": _vm.img,
+	      "resize": "cover"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/input.js b/android/playground/app/src/main/assets/vue/components/input.js
new file mode 100644
index 0000000..d996ab4
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/input.js
@@ -0,0 +1,364 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(408)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(409)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(410)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/input.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 408:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 60,
+	    "height": 80,
+	    "width": 400
+	  }
+	}
+
+/***/ },
+
+/***/ 409:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      txtInput: '',
+	      txtChange: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  methods: {
+	    onchange: function onchange(event) {
+	      this.txtChange = event.value;
+	      modal.toast({
+	        message: 'onchange: ' + event.value,
+	        duration: 2
+	      });
+	    },
+	    oninput: function oninput(event) {
+	      this.txtInput = event.value;
+	      modal.toast({
+	        message: 'onitput: ' + event.value,
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 410:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "input",
+	      "type": "primary"
+	    }
+	  }, [_h('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "Text Input",
+	      "autofocus": "true",
+	      "value": ""
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  }), _h('text', ["oninput: " + _vm._s(_vm.txtInput)]), _h('text', ["onchange: " + _vm._s(_vm.txtChange)])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/list.js b/android/playground/app/src/main/assets/vue/components/list.js
new file mode 100644
index 0000000..e8d18d2
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/list.js
@@ -0,0 +1,246 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(411)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(412)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(413)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/list.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 411:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "list": {
+	    "height": 850
+	  },
+	  "count": {
+	    "fontSize": 48,
+	    "margin": 10
+	  },
+	  "indicator": {
+	    "height": 40,
+	    "width": 40,
+	    "color": "#45b5f0"
+	  },
+	  "row": {
+	    "width": 750
+	  },
+	  "item": {
+	    "justifyContent": "center",
+	    "borderBottomWidth": 2,
+	    "borderBottomColor": "#c0c0c0",
+	    "height": 100,
+	    "padding": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 412:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  methods: {
+	    onappear: function onappear(e) {
+	      var appearId = this.rows[e.target.attr.index].id;
+	      nativeLog('+++++', appearId);
+	      var appearIds = this.appearIds;
+	      appearIds.push(appearId);
+	      this.getMinAndMaxIds(appearIds);
+	    },
+	    ondisappear: function ondisappear(e) {
+	      var disAppearId = this.rows[e.target.attr.index].id;
+	      nativeLog('+++++', disAppearId);
+	      var appearIds = this.appearIds;
+	      var index = appearIds.indexOf(disAppearId);
+	      if (index > -1) {
+	        appearIds.splice(index, 1);
+	      }
+	      this.getMinAndMaxIds(appearIds);
+	    },
+	    getMinAndMaxIds: function getMinAndMaxIds(appearIds) {
+	      appearIds.sort(function (a, b) {
+	        return a - b;
+	      });
+	      this.appearIds = appearIds;
+	      this.appearMax = appearIds[appearIds.length - 1];
+	      this.appearMin = appearIds[0];
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      appearMin: 1,
+	      appearMax: 1,
+	      appearIds: [],
+	      rows: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }, { id: 6 }, { id: 7 }, { id: 8 }, { id: 9 }, { id: 10 }, { id: 11 }, { id: 12 }, { id: 13 }, { id: 14 }, { id: 15 }, { id: 16 }, { id: 17 }, { id: 18 }, { id: 19 }, { id: 20 }, { id: 21 }, { id: 22 }, { id: 23 }, { id: 24 }, { id: 25 }, { id: 26 }, { id: 27 }, { id: 28 }, { id: 29 }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 413:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('list', {
+	    staticClass: ["list"]
+	  }, [_vm._l((_vm.rows), function(v, i) {
+	    return _h('cell', {
+	      staticClass: ["row"],
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree",
+	        "index": i
+	      },
+	      on: {
+	        "appear": _vm.onappear,
+	        "disappear": _vm.ondisappear
+	      }
+	    }, [_h('div', {
+	      staticClass: ["item"]
+	    }, [_h('text', {
+	      staticClass: ["item-title"]
+	    }, ["row " + _vm._s(v.id)])])])
+	  })]), _h('text', {
+	    staticClass: ["count"],
+	    attrs: {
+	      "value": 'Appear items: ' + _vm.appearMin + ' ~ ' + _vm.appearMax
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/marquee.js b/android/playground/app/src/main/assets/vue/components/marquee.js
new file mode 100644
index 0000000..8f71cff
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/marquee.js
@@ -0,0 +1,534 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(414)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(419)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/marquee.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 414:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      marquee: {
+	        height: 30,
+	        duration: 1500,
+	        interval: 2000,
+	        list: [{ text: 'Introducing Bots on Messenger' }, { text: 'Capturing 3D 360-Stereo VR Video' }, { text: 'The Future of Video on Facebook' }, { text: 'Announcing Vue.js 2.0' }, { text: 'Not Your Average Virtual-DOM' }, { text: 'Templates, JSX, or Hyperscript?' }]
+	      }
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    marquee: __webpack_require__(415)
+	  },
+	  methods: {
+	    marqueeChange: function marqueeChange(e) {
+	      console.log(e);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 415:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(416)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(417)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(418)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/marquee.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 416:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrap": {
+	    "overflow": "hidden",
+	    "position": "relative"
+	  },
+	  "anim": {
+	    "flexDirection": "column",
+	    "position": "absolute",
+	    "transform": "translateY(0) translateZ(0)"
+	  }
+	}
+
+/***/ },
+
+/***/ 417:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var _animation = __weex_require_module__('animation');
+
+	module.exports = {
+	  props: {
+	    step: { default: 0 },
+	    count: { default: 0 },
+	    index: { default: 1 },
+	    duration: { default: 0 },
+	    interval: { default: 0 },
+	    outofview: { default: false }
+	  },
+	  created: function created() {
+	    if (this.interval > 0 && this.step > 0 && this.duration > 0) {
+	      this.run();
+	    }
+	  },
+	  methods: {
+	    run: function run() {
+	      if (this.outofview) {
+	        setTimeout(this.run.bind(this), this.interval);
+	      } else {
+	        setTimeout(function () {
+	          this.animation(this.run.bind(this));
+	        }.bind(this), this.interval);
+	      }
+	    },
+	    animation: function animation(cb) {
+	      var offset = -this.step * this.index;
+	      _animation.transition(this.$refs.anim.ref, {
+	        styles: {
+	          transform: 'translateY(' + offset + 'px) translateZ(0)'
+	        },
+	        timingFunction: 'ease',
+	        duration: this.duration
+	      }, function () {
+	        this.index = (this.index + 1) % this.count;
+	        this.$emit('change', {
+	          index: this.index,
+	          count: this.count
+	        });
+	        cb && cb();
+	      }.bind(this));
+	    },
+	    appeared: function appeared() {
+	      this.outofview = false;
+	    },
+	    disappeared: function disappeared() {
+	      this.outofview = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 418:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrap"],
+	    on: {
+	      "appear": _vm.appeared,
+	      "disappear": _vm.disappeared
+	    }
+	  }, [_h('div', {
+	    ref: "anim",
+	    staticClass: ["anim"]
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 419:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Marquee",
+	      "type": "primary"
+	    }
+	  }, [_h('marquee', {
+	    style: {
+	      width: 700,
+	      height: _vm.marquee.height * 2,
+	      backgroundColor: 'rgb(223, 240, 216)',
+	      borderRadius: 8,
+	      paddingLeft: 10,
+	      paddingRight: 10
+	    },
+	    attrs: {
+	      "step": _vm.marquee.height * 2,
+	      "count": _vm.marquee.list.length,
+	      "interval": _vm.marquee.interval,
+	      "duration": _vm.marquee.duration
+	    },
+	    on: {
+	      "change": _vm.marqueeChange
+	    }
+	  }, [_vm._l((_vm.marquee.list), function(item) {
+	    return _h('div', {
+	      style: {
+	        height: _vm.marquee.height * _vm.marquee.length,
+	        paddingTop: _vm.marquee.height * 0.5,
+	        paddingBottom: _vm.marquee.height * 0.5,
+	        overflow: 'hidden'
+	      }
+	    }, [_h('text', {
+	      style: {
+	        height: _vm.marquee.height,
+	        color: 'rgb(60, 118, 61)',
+	        fontSize: 28
+	      }
+	    }, [_vm._s(item.text)])])
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/navigator.js b/android/playground/app/src/main/assets/vue/components/navigator.js
new file mode 100644
index 0000000..5fdefce
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/navigator.js
@@ -0,0 +1,1059 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(420)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(430)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/navigator.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 420:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var navigator = __weex_require_module__('navigator');
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      navBarHeight: 88,
+	      title: 'Navigator',
+	      dir: 'examples',
+	      baseURL: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    navpage: __webpack_require__(422),
+	    button: __webpack_require__(387)
+	  },
+	  created: function created() {
+	    this.$getConfig(function (config) {
+	      var env = config.env;
+	      if (env.platform == 'iOS') {
+	        var scale = env.scale;
+	        var deviceWidth = env.deviceWidth / scale;
+	        this.navBarHeight = 64.0 * 750.0 / deviceWidth;
+	      }
+	    }.bind(this));
+	    this.baseURL = getBaseURL(this);
+	  },
+	  methods: {
+	    naviBarLeftItemClick: function naviBarLeftItemClick(e) {
+	      modal.toast({ message: 'naviBarLeftItemClick', duration: 2 });
+	    },
+	    naviBarRightItemClick: function naviBarRightItemClick(e) {
+	      modal.toast({ message: 'naviBarRightItemClick', duration: 2 });
+	    },
+	    push: function push() {
+	      var params = {
+	        'url': this.baseURL + 'vue/components/navigator.js?test=1',
+	        'animated': 'true'
+	      };
+	      navigator.push(params, function () {});
+	    },
+	    pop: function pop() {
+	      var params = {
+	        'url': this.baseURL + 'vue/components/navigator.js?test=1',
+	        'animated': 'true'
+	      };
+	      navigator.pop(params, function () {});
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 422:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(423)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(424)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(429)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/navpage.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 423:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "width": 750
+	  }
+	}
+
+/***/ },
+
+/***/ 424:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    navbar: __webpack_require__(425)
+	  },
+	  props: {
+	    dataRole: { default: 'navbar' },
+	    backgroundColor: { default: 'black' },
+	    height: { default: 88 },
+	    title: { default: "" },
+	    titleColor: { default: 'black' },
+	    rightItemSrc: { default: '' },
+	    rightItemTitle: { default: '' },
+	    rightItemColor: { default: 'black' },
+	    leftItemSrc: { default: '' },
+	    leftItemTitle: { default: '' },
+	    leftItemColor: { default: 'black' }
+	  },
+	  methods: {
+	    naviBarRightItemClick: function naviBarRightItemClick(e) {
+	      this.$emit('naviBarRightItemClick', e);
+	    },
+	    naviBarLeftItemClick: function naviBarLeftItemClick(e) {
+	      this.$emit('naviBarLeftItemClick', e);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 425:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(426)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(427)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(428)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/navbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 426:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "width": 750
+	  },
+	  "right-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "right": 32,
+	    "textAlign": "right",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "left-text": {
+	    "position": "absolute",
+	    "bottom": 28,
+	    "left": 32,
+	    "textAlign": "left",
+	    "fontSize": 32,
+	    "fontFamily": "'Open Sans', sans-serif"
+	  },
+	  "center-text": {
+	    "position": "absolute",
+	    "bottom": 25,
+	    "left": 172,
+	    "right": 172,
+	    "textAlign": "center",
+	    "fontSize": 36,
+	    "fontWeight": "bold"
+	  },
+	  "left-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "left": 28,
+	    "width": 50,
+	    "height": 50
+	  },
+	  "right-image": {
+	    "position": "absolute",
+	    "bottom": 20,
+	    "right": 28,
+	    "width": 50,
+	    "height": 50
+	  }
+	}
+
+/***/ },
+
+/***/ 427:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    dataRole: { default: 'navbar' },
+	    //导航条背景色
+	    backgroundColor: { default: 'black' },
+	    //导航条高度
+	    height: { default: 88 },
+	    //导航条标题 
+	    title: { default: '' },
+	    //导航条标题颜色
+	    titleColor: { default: 'black' },
+	    //右侧按钮图片
+	    rightItemSrc: { default: '' },
+	    //右侧按钮标题
+	    rightItemTitle: { default: '' },
+	    //右侧按钮标题颜色
+	    rightItemColor: { default: 'black' },
+	    //左侧按钮图片
+	    leftItemSrc: { default: '' },
+	    //左侧按钮标题
+	    leftItemTitle: { default: '' },
+	    //左侧按钮颜色
+	    leftItemColor: { default: 'black' }
+	  },
+	  methods: {
+	    onclickrightitem: function onclickrightitem(e) {
+	      this.$emit('naviBarRightItemClick');
+	    },
+	    onclickleftitem: function onclickleftitem(e) {
+	      this.$emit('naviBarLeftItemClick');
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 428:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"],
+	    style: {
+	      height: _vm.height,
+	      backgroundColor: _vm.backgroundColor
+	    },
+	    attrs: {
+	      "dataRole": _vm.dataRole
+	    }
+	  }, [(!_vm.rightItemSrc) ? _h('text', {
+	    staticClass: ["right-text"],
+	    style: {
+	      color: _vm.rightItemColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "right"
+	    },
+	    on: {
+	      "click": _vm.onclickrightitem
+	    }
+	  }, [_vm._s(_vm.rightItemTitle)]) : _vm._e(), (_vm.rightItemSrc) ? _h('image', {
+	    staticClass: ["right-image"],
+	    attrs: {
+	      "naviItemPosition": "right",
+	      "src": _vm.rightItemSrc
+	    },
+	    on: {
+	      "click": _vm.onclickrightitem
+	    }
+	  }) : _vm._e(), (!_vm.leftItemSrc) ? _h('text', {
+	    staticClass: ["left-text"],
+	    style: {
+	      color: _vm.leftItemColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "left"
+	    },
+	    on: {
+	      "click": _vm.onclickleftitem
+	    }
+	  }, [_vm._s(_vm.leftItemTitle)]) : _vm._e(), (_vm.leftItemSrc) ? _h('image', {
+	    staticClass: ["left-image"],
+	    attrs: {
+	      "naviItemPosition": "left",
+	      "src": _vm.leftItemSrc
+	    },
+	    on: {
+	      "click": _vm.onclickleftitem
+	    }
+	  }) : _vm._e(), _h('text', {
+	    staticClass: ["center-text"],
+	    style: {
+	      color: _vm.titleColor
+	    },
+	    attrs: {
+	      "naviItemPosition": "center"
+	    }
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 429:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('navbar', {
+	    attrs: {
+	      "dataRole": _vm.dataRole,
+	      "height": _vm.height,
+	      "backgroundColor": _vm.backgroundColor,
+	      "title": _vm.title,
+	      "titleColor": _vm.titleColor,
+	      "leftItemSrc": _vm.leftItemSrc,
+	      "leftItemTitle": _vm.leftItemTitle,
+	      "leftItemColor": _vm.leftItemColor,
+	      "rightItemSrc": _vm.rightItemSrc,
+	      "rightItemTitle": _vm.rightItemTitle,
+	      "rightItemColor": _vm.rightItemColor
+	    },
+	    on: {
+	      "naviBarRightItemClick": _vm.naviBarRightItemClick,
+	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["wrapper"],
+	    style: {
+	      marginTop: _vm.height
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 430:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('navpage', {
+	    attrs: {
+	      "dataRole": "none",
+	      "height": _vm.navBarHeight,
+	      "title": _vm.title,
+	      "backgroundColor": "#ff5898",
+	      "titleColor": "white",
+	      "leftItemTitle": "More",
+	      "leftItemColor": "white",
+	      "rightItemSrc": "http://gtms02.alicdn.com/tps/i2/TB1ED7iMpXXXXXEXXXXWA_BHXXX-48-48.png"
+	    },
+	    on: {
+	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick,
+	      "naviBarRightItemClick": _vm.naviBarRightItemClick
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "push a new page"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "push"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.push($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "pop to the last page"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "success",
+	      "size": "small",
+	      "value": "pop"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.pop($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/scroller.js b/android/playground/app/src/main/assets/vue/components/scroller.js
new file mode 100644
index 0000000..922f338
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/scroller.js
@@ -0,0 +1,304 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(431)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(432)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(433)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/scroller.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 431:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "refresh-view": {
+	    "height": 120,
+	    "width": 750,
+	    "display": "flex",
+	    "MsFlexAlign": "center",
+	    "WebkitAlignItems": "center",
+	    "WebkitBoxAlign": "center",
+	    "alignItems": "center"
+	  },
+	  "refresh-arrow": {
+	    "fontSize": 30,
+	    "color": "#45b5f0"
+	  },
+	  "loading-view": {
+	    "height": 80,
+	    "width": 750,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "indicator": {
+	    "height": 40,
+	    "width": 40,
+	    "color": "#45b5f0"
+	  },
+	  "header": {
+	    "backgroundColor": "#45b5f0",
+	    "padding": 20,
+	    "height": 88,
+	    "justifyContent": "center"
+	  },
+	  "header-title": {
+	    "color": "#FFFFFF",
+	    "fontWeight": "bold"
+	  },
+	  "item": {
+	    "justifyContent": "center",
+	    "borderBottomWidth": 2,
+	    "borderBottomColor": "#c0c0c0",
+	    "height": 100,
+	    "padding": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 432:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  methods: {
+	    onrefresh: function onrefresh(e) {
+	      var self = this;
+	      self.refresh_display = 'show';
+	      setTimeout(function () {
+	        self.refresh_display = 'hide';
+	      }, 1000);
+	    },
+	    onloading: function onloading(e) {
+	      var self = this;
+	      self.loading_display = 'show';
+	      setTimeout(function () {
+	        self.loading_display = 'hide';
+	      }, 1000);
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      refresh_display: 'hide',
+	      loading_display: 'hide',
+	      sections: [{
+	        title: 'Header 1',
+	        items: [{ id: 1 }, { id: 2 }, { id: 3 }, { id: 4 }, { id: 5 }]
+	      }, {
+	        title: 'Header 2',
+	        items: [{ id: 6 }, { id: 7 }, { id: 8 }, { id: 9 }, { id: 10 }, { id: 11 }]
+	      }],
+	      moreSections: [{
+	        title: 'Header 3',
+	        items: [{ id: 12 }, { id: 13 }, { id: 14 }, { id: 15 }, { id: 16 }, { id: 17 }, { id: 18 }]
+	      }, {
+	        title: 'Header 4',
+	        items: [{ id: 19 }, { id: 20 }, { id: 21 }, { id: 22 }]
+	      }, {
+	        title: 'Header 5',
+	        items: [{ id: 23 }, { id: 24 }, { id: 25 }, { id: 26 }, { id: 27 }]
+	      }, {
+	        title: 'Header 6',
+	        items: [{ id: 28 }, { id: 29 }, { id: 30 }, { id: 31 }, { id: 32 }]
+	      }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 433:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', {
+	    staticClass: ["list"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_vm._l((_vm.sections), function(sec) {
+	    return _h('div', {
+	      staticClass: ["section"]
+	    }, [_h('div', {
+	      staticClass: ["header"]
+	    }, [_h('text', {
+	      staticClass: ["header-title"]
+	    }, [_vm._s(sec.title)])]), _vm._l((sec.items), function(item) {
+	      return _h('div', {
+	        staticClass: ["item"]
+	      }, [_h('text', {
+	        staticClass: ["item-title"]
+	      }, ["row " + _vm._s(item.id)])])
+	    })])
+	  }), _h('loading', {
+	    staticClass: ["loading-view"],
+	    attrs: {
+	      "display": _vm.loading_display,
+	      "onloading": "onloading"
+	    }
+	  }, [_h('loading-indicator', {
+	    staticStyle: {
+	      height: "60",
+	      width: "60"
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/slider.js b/android/playground/app/src/main/assets/vue/components/slider.js
new file mode 100644
index 0000000..c67c482
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/slider.js
@@ -0,0 +1,898 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(434)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(435)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(444)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/slider.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 434:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "body": {
+	    "backgroundColor": "#ffffff"
+	  },
+	  "slider": {
+	    "flexDirection": "row",
+	    "width": 690,
+	    "height": 360
+	  },
+	  "indicator": {
+	    "position": "absolute",
+	    "width": 690,
+	    "height": 420,
+	    "top": 140,
+	    "left": 240,
+	    "itemColor": "#dddddd",
+	    "itemSelectedColor": "rgb(40, 96, 144)"
+	  }
+	}
+
+/***/ },
+
+/***/ 435:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var img0 = '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg';
+	var img1 = '//gw.alicdn.com/tps/i1/TB1M3sQMpXXXXakXXXXApNeJVXX-360-360.png';
+	module.exports = {
+	  data: function data() {
+	    return {
+	      eventCnt: 0,
+	      togglePlayMsg: 'pause',
+	      sliders: [{
+	        interval: 1000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }, {
+	        interval: 3000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }, {
+	        interval: 5000,
+	        autoPlay: true,
+	        sliderPages: [{
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }, {
+	          items: [{
+	            image: img0,
+	            link: '//h5.m.taobao.com/1'
+	          }, {
+	            image: img1,
+	            link: '//h5.m.taobao.com/1'
+	          }]
+	        }]
+	      }]
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    sliderPage: __webpack_require__(436)
+	  },
+	  methods: {
+	    togglePlay: function togglePlay() {
+	      var autoPlay = this.sliders[0].autoPlay;
+	      autoPlay = !autoPlay;
+	      this.sliders[0].autoPlay = autoPlay;
+	      this.togglePlayMsg = autoPlay ? 'pause' : 'play';
+	    },
+	    handleSliderChange: function handleSliderChange() {
+	      var nowCnt = this.eventCnt + 1;
+	      this.eventCnt = nowCnt;
+	    },
+	    setInterval1: function setInterval1() {
+	      this.sliders[0].interval = 1000;
+	    },
+	    setInterval3: function setInterval3() {
+	      this.sliders[0].interval = 3000;
+	    },
+	    setInterval5: function setInterval5() {
+	      this.sliders[0].interval = 5000;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 436:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(437)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(438)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(443)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/slider-page.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 437:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "slider-page": {
+	    "flexDirection": "row",
+	    "justifyContent": "space-between",
+	    "width": 714,
+	    "height": 420
+	  }
+	}
+
+/***/ },
+
+/***/ 438:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    items: { default: [] }
+	  },
+	  components: {
+	    sliderItem: __webpack_require__(439)
+	  }
+	};
+
+/***/ },
+
+/***/ 439:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(440)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(441)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(442)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/slider-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 440:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "slider-item": {
+	    "width": 348,
+	    "height": 400
+	  }
+	}
+
+/***/ },
+
+/***/ 441:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    image: { default: '' },
+	    link: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 442:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('image', {
+	    staticClass: ["slider-item"],
+	    attrs: {
+	      "src": _vm.image
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 443:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["slider-page"]
+	  }, [_vm._l((_vm.items), function(v) {
+	    return _h('slider-item', {
+	      attrs: {
+	        "image": v.image,
+	        "link": v.link
+	      }
+	    })
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 444:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', {
+	    staticClass: ["body"]
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "auto-play",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "auto-play = false",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": "false"
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "auto-play = true",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])])]), _h('panel', {
+	    attrs: {
+	      "title": 'Event, ' + _vm.eventCnt + ' change',
+	      "type": "primary"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    },
+	    on: {
+	      "change": _vm.handleSliderChange
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "Indicator",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "default style",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    },
+	    on: {
+	      "change": _vm.handleSliderChange
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"]
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "width & height",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[0].interval,
+	      "autoPlay": _vm.sliders[0].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticStyle: {
+	      itemColor: "#dddddd",
+	      width: "714",
+	      height: "460"
+	    }
+	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "left & top",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": _vm.sliders[1].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"],
+	    staticStyle: {
+	      top: "-140",
+	      left: "-240"
+	    }
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "itemColor & itemSelectedColor",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[2].interval,
+	      "autoPlay": _vm.sliders[2].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticClass: ["indicator"],
+	    staticStyle: {
+	      itemSelectedColor: "rgb(217, 83, 79)"
+	    }
+	  }), _vm._l((_vm.sliders[2].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "itemSize",
+	      "padding-body": "0"
+	    }
+	  }, [_h('slider', {
+	    staticClass: ["slider"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree",
+	      "interval": _vm.sliders[1].interval,
+	      "autoPlay": _vm.sliders[1].autoPlay
+	    }
+	  }, [_h('indicator', {
+	    staticStyle: {
+	      itemColor: "#dddddd",
+	      itemSize: "40",
+	      top: "140",
+	      left: "180",
+	      width: "700",
+	      height: "380"
+	    }
+	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
+	    return _h('slider-page', {
+	      attrs: {
+	        "items": v.items
+	      }
+	    })
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/tabbar.js b/android/playground/app/src/main/assets/vue/components/tabbar.js
new file mode 100644
index 0000000..85d581a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/tabbar.js
@@ -0,0 +1,599 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(445)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(454)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/tabbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 445:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      dir: 'examples',
+	      tabItems: [{
+	        index: 0,
+	        title: 'tab1',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms01.alicdn.com/tps/i1/TB1qw.hMpXXXXagXXXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms04.alicdn.com/tps/i4/TB16jjPMpXXXXazXVXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab1',
+	        visibility: 'visible'
+	      }, {
+	        index: 1,
+	        title: 'tab2',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms03.alicdn.com/tps/i3/TB1LEn9MpXXXXaUXpXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms02.alicdn.com/tps/i2/TB1qysbMpXXXXcnXXXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab2',
+	        visibility: 'hidden'
+	      }, {
+	        index: 2,
+	        title: 'tab3',
+	        titleColor: '#000000',
+	        icon: '',
+	        image: 'http://gtms01.alicdn.com/tps/i1/TB1B0v5MpXXXXcvXpXX9t7RGVXX-46-46.png',
+	        selectedImage: 'http://gtms04.alicdn.com/tps/i4/TB1NxY5MpXXXXcrXpXX9t7RGVXX-46-46.png',
+	        src: 'component/tabbar/tabbar-item.js?itemId=tab3',
+	        visibility: 'hidden'
+	      }]
+	    };
+	  },
+	  components: {
+	    tabbar: __webpack_require__(446)
+	  },
+	  created: function created() {
+	    var baseURL = getBaseURL(this);
+	    for (var i = 0; i < this.tabItems.length; i++) {
+	      var tabItem = this.tabItems[i];
+	      tabItem.src = baseURL + tabItem.src;
+	    }
+	  },
+	  methods: {
+	    tabBarOnClick: function tabBarOnClick(e) {
+	      console.log('tabBarOnClick', e.index);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 446:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(447)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(448)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(453)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tabbar.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 447:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 88
+	  },
+	  "tabbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 88
+	  }
+	}
+
+/***/ },
+
+/***/ 448:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    tabItems: { default: [] },
+	    selectedColor: { default: '#ff0000' },
+	    unselectedColor: { default: '#000000' }
+	  },
+	  data: function data() {
+	    return {
+	      selectedIndex: 0
+	    };
+	  },
+	  components: {
+	    tabitem: __webpack_require__(449)
+	  },
+	  created: function created() {
+	    this.select(this.selectedIndex);
+	  },
+	  methods: {
+	    tabItemOnClick: function tabItemOnClick(e) {
+	      this.selectedIndex = e.index;
+	      this.select(e.index);
+	      this.$emit('tabBarOnClick', e);
+	    },
+	    select: function select(index) {
+	      for (var i = 0; i < this.tabItems.length; i++) {
+	        var tabItem = this.tabItems[i];
+	        if (i == index) {
+	          tabItem.icon = tabItem.selectedImage;
+	          tabItem.titleColor = this.selectedColor;
+	          tabItem.visibility = 'visible';
+	        } else {
+	          tabItem.icon = tabItem.image;
+	          tabItem.titleColor = this.unselectedColor;
+	          tabItem.visibility = 'hidden';
+	        }
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 449:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(450)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(451)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(452)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tabitem.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 450:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "container": {
+	    "flex": 1,
+	    "flexDirection": "column",
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "height": 88
+	  },
+	  "top-line": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 2
+	  },
+	  "tab-icon": {
+	    "marginTop": 5,
+	    "width": 40,
+	    "height": 40
+	  },
+	  "tab-text": {
+	    "marginTop": 5,
+	    "textAlign": "center",
+	    "fontSize": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 451:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    index: { default: 0 },
+	    title: { default: '' },
+	    titleColor: { default: '#000000' },
+	    icon: { default: '' },
+	    backgroundColor: { default: '#ffffff' }
+	  },
+	  methods: {
+	    onclickitem: function onclickitem(e) {
+	      var params = {
+	        index: this.index
+	      };
+	      this.$emit('tabItemOnClick', params);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 452:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"],
+	    style: {
+	      backgroundColor: _vm.backgroundColor
+	    },
+	    on: {
+	      "click": _vm.onclickitem
+	    }
+	  }, [_h('image', {
+	    staticClass: ["top-line"],
+	    attrs: {
+	      "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
+	    }
+	  }), _h('image', {
+	    staticClass: ["tab-icon"],
+	    attrs: {
+	      "src": _vm.icon
+	    }
+	  }), _h('text', {
+	    staticClass: ["tab-text"],
+	    style: {
+	      color: _vm.titleColor
+	    }
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 453:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_vm._l((_vm.tabItems), function(item) {
+	    return _h('embed', {
+	      staticClass: ["content"],
+	      style: {
+	        visibility: item.visibility
+	      },
+	      attrs: {
+	        "src": item.src,
+	        "type": "weex"
+	      }
+	    })
+	  }), _h('div', {
+	    staticClass: ["tabbar"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_vm._l((_vm.tabItems), function(item) {
+	    return _h('tabitem', {
+	      attrs: {
+	        "index": item.index,
+	        "icon": item.icon,
+	        "title": item.title,
+	        "titleColor": item.titleColor
+	      },
+	      on: {
+	        "tabItemOnClick": _vm.tabItemOnClick
+	      }
+	    })
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 454:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('tabbar', {
+	    attrs: {
+	      "tabItems": _vm.tabItems
+	    },
+	    on: {
+	      "tabBarOnClick": _vm.tabBarOnClick
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/text.js b/android/playground/app/src/main/assets/vue/components/text.js
new file mode 100644
index 0000000..4b3ff9a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/text.js
@@ -0,0 +1,513 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(455)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(456)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(457)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/text.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 455:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "txt": {
+	    "marginBottom": 12,
+	    "fontSize": 40
+	  }
+	}
+
+/***/ },
+
+/***/ 456:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383)
+	  }
+	};
+
+/***/ },
+
+/***/ 457:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "color",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"]
+	  }, ["default is black"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "#286090"
+	    }
+	  }, ["#286090"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "#0f0"
+	    }
+	  }, ["#0f0"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "red"
+	    }
+	  }, ["keyword"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "rgb(238, 162, 54)"
+	    }
+	  }, ["rgb(238, 162, 54)"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      color: "rgba(238, 162, 54, 0.5)"
+	    }
+	  }, ["rgba(238, 162, 54, 0.5)"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-size",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "32px"
+	    }
+	  }, ["32"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "64px"
+	    }
+	  }, ["64"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontSize: "100px"
+	    }
+	  }, ["100"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-style",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontStyle: "normal"
+	    }
+	  }, ["normal"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontStyle: "italic"
+	    }
+	  }, ["italic"])]), _h('panel', {
+	    attrs: {
+	      "title": "font-weight",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontWeight: "normal"
+	    }
+	  }, ["normal"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      fontWeight: "bold"
+	    }
+	  }, ["bold"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-decoration",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "none"
+	    }
+	  }, ["none"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "underline"
+	    }
+	  }, ["underline"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textDecoration: "line-through"
+	    }
+	  }, ["line-through"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-align",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "left"
+	    }
+	  }, ["left"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, ["center"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textAlign: "right"
+	    }
+	  }, ["right"])]), _h('panel', {
+	    attrs: {
+	      "title": "text-overflow",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lines: "1"
+	    }
+	  }, ["no text-overflow, no text-overflow"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textOverflow: "clip",
+	      width: "450px",
+	      lines: "1"
+	    }
+	  }, ["text-overflow: clip, text-overflow: clip"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      textOverflow: "ellipsis",
+	      width: "450px",
+	      lines: "1"
+	    }
+	  }, ["text-overflow: ellipsis, text-overflow: ellipsis"])]), _h('panel', {
+	    attrs: {
+	      "title": "line-height",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["txt"]
+	  }, ["no lineheight setting"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lineHeight: "50"
+	    }
+	  }, ["lineheight 50"]), _h('text', {
+	    staticClass: ["txt"],
+	    staticStyle: {
+	      lineHeight: "80"
+	    }
+	  }, [" lineheight 80"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/video.js b/android/playground/app/src/main/assets/vue/components/video.js
new file mode 100644
index 0000000..17b1165
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/video.js
@@ -0,0 +1,396 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(458)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(459)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(460)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/video.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 458:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "video": {
+	    "width": 750,
+	    "height": 460,
+	    "marginBottom": 80
+	  }
+	}
+
+/***/ },
+
+/***/ 459:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      playStatus: 'play'
+	    };
+	  },
+	  components: {
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    pause: function pause() {
+	      this.playStatus = 'pause';
+	      modal.toast({ 'message': 'click pause' });
+	    },
+	    play: function play() {
+	      this.playStatus = 'play';
+	      modal.toast({ 'message': 'click play' });
+	    },
+	    onpause: function onpause(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video pause' });
+	    },
+	    onstart: function onstart(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video start' });
+	    },
+	    onfinish: function onfinish(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video finish' });
+	    },
+	    onfail: function onfail(e) {
+	      this.playStatus = e.playStatus;
+	      modal.toast({ 'message': 'video fail' });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 460:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('video', {
+	    staticClass: ["video"],
+	    attrs: {
+	      "onpause": "onpause",
+	      "onstart": "onstart",
+	      "onfinish": "onfinish",
+	      "onfail": "onfail",
+	      "src": "http://g.tbcdn.cn/ali-wireless-h5/res/0.0.6/toy.mp4",
+	      "auto-play": "true",
+	      "playStatus": _vm.playStatus
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      justifyContent: "center"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "value": "Pause"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.pause($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "20px"
+	    },
+	    attrs: {
+	      "value": "Play",
+	      "type": "primary"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.play($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/components/web.js b/android/playground/app/src/main/assets/vue/components/web.js
new file mode 100644
index 0000000..01c4680
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/components/web.js
@@ -0,0 +1,459 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(461)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(462)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(463)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/components/web.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 461:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "width": 750,
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "content": {
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0,
+	    "marginTop": 0,
+	    "marginBottom": 70
+	  },
+	  "toolbar": {
+	    "flexDirection": "row",
+	    "position": "fixed",
+	    "bottom": 0,
+	    "left": 0,
+	    "right": 0,
+	    "height": 70
+	  }
+	}
+
+/***/ },
+
+/***/ 462:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var webview = __weex_require_module__('webview');
+	module.exports = {
+	  components: {
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    goback: function goback() {
+	      var el = this.$refs.webview;
+	      webview.goBack(el);
+	    },
+	    goforward: function goforward() {
+	      var el = this.$refs.webview;
+	      webview.goForward(el);
+	    },
+	    refresh: function refresh() {
+	      var el = this.$refs.webview;
+	      webview.reload(el);
+	    },
+	    startload: function startload(e) {},
+	    finishload: function finishload(e) {},
+	    failload: function failload(e) {}
+	  }
+	};
+
+/***/ },
+
+/***/ 463:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('div', {
+	    staticClass: ["toolbar"],
+	    appendAsTree: true,
+	    attrs: {
+	      "append": "tree"
+	    }
+	  }, [_h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "back"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.goback($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "forward"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.goforward($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginLeft: "30px",
+	      width: "210px",
+	      marginTop: "5px",
+	      marginBottom: "5px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "size": "small",
+	      "value": "refresh"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.refresh($event)
+	      }
+	    }
+	  })]), _h('web', {
+	    ref: "webview",
+	    staticClass: ["content"],
+	    attrs: {
+	      "src": "http://alibaba.github.io/weex/index.html"
+	    },
+	    on: {
+	      "pagestart": _vm.startload,
+	      "pagefinish": _vm.finishload,
+	      "error": _vm.failload
+	    }
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/hello.js b/android/playground/app/src/main/assets/vue/hello.js
new file mode 100644
index 0000000..6f21da1
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/hello.js
@@ -0,0 +1,99 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(464)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/hello.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 464:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "100px"
+	    }
+	  }, ["Hello World."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/iconfont.js b/android/playground/app/src/main/assets/vue/iconfont.js
new file mode 100644
index 0000000..30ceb05
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/iconfont.js
@@ -0,0 +1,204 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(465)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(466)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(467)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/iconfont.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 465:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title1": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont1"
+	  },
+	  "title2": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont2"
+	  },
+	  "title3": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont3"
+	  },
+	  "title4": {
+	    "color": "#FF0000",
+	    "fontSize": 36,
+	    "fontFamily": "iconfont4"
+	  }
+	}
+
+/***/ },
+
+/***/ 466:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var domModule = __weex_require_module__('dom');
+	module.exports = {
+	  created: function created() {
+	    //目前支持ttf、woff文件,不支持svg、eot类型
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont1",
+	      'src': "url('iconfont.ttf')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont2",
+	      'src': "url('http://at.alicdn.com/t/font_1469606063_76593.ttf')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont3",
+	      'src': "url('http://at.alicdn.com/t/font_1469606522_9417143.woff')"
+	    });
+	    domModule.addRule('font-face', {
+	      'font-family': "iconfont4",
+	      'src': "url('file:///storage/emulated/0/Android/data/com.alibaba.weex/cache/http:__at.alicdn.com_t_font_1469606063_76593.ttf')"
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 467:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title1"]
+	  }, ["Assets: "]), _h('text', {
+	    staticClass: ["title2"]
+	  }, ["http ttf: "]), _h('text', {
+	    staticClass: ["title3"]
+	  }, ["http woff: "]), _h('text', {
+	    staticClass: ["title4"]
+	  }, ["file: "])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/index.js b/android/playground/app/src/main/assets/vue/index.js
new file mode 100644
index 0000000..2270e82
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/index.js
@@ -0,0 +1,496 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(468)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(480)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/index.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 421:
+/***/ function(module, exports) {
+
+	exports.getBaseURL = function (vm) {
+	  var bundleUrl = vm.$getConfig().bundleUrl;
+	  var nativeBase;
+	  var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
+	  var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	  if (isAndroidAssets) {
+	    nativeBase = 'file://assets/';
+	  }
+	  else if (isiOSAssets) {
+	    // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+	    nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	  }
+	  else {
+	    var host = 'localhost:12580';
+	    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+	    if (matches && matches.length >= 2) {
+	      host = matches[1];
+	    }
+	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
+	  }
+	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  // in Native
+	  var base = nativeBase;
+	  if (typeof window === 'object') {
+	    // in Browser or WebView
+	    base = h5Base;
+	  }
+	  return base
+	}
+
+
+/***/ },
+
+/***/ 468:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      items: [
+	      // common
+	      { name: 'vue/syntax/hello-world', title: 'Hello World' }, { name: 'vue/style/index', title: 'Common Style' }, { name: 'vue/animation', title: 'Animation' },
+
+	      // component
+	      { name: 'vue/components/text', title: 'Text' }, { name: 'vue/components/image', title: 'Image' }, { name: 'vue/components/input', title: 'Input' }, { name: 'vue/components/scroller', title: 'Scroller' }, { name: 'vue/components/list', title: 'List' }, { name: 'vue/components/slider', title: 'Slider' }, { name: 'vue/components/a', title: 'A' }, { name: 'vue/components/video', title: 'Video' }, { name: 'vue/components/countdown', title: 'Countdown' }, { name: 'vue/components/marquee', title: 'Marquee' }, { name: 'vue/components/web', title: 'Web' }, { name: 'vue/components/navigator', title: 'Navigator' }, { name: 'vue/components/tabbar', title: 'Tabbar' },
+
+	      // module
+	      { name: 'vue/modules/instance-api', title: 'Instance API' }, { name: 'vue/modules/modal', title: 'Modal' }, { name: 'vue/modules/stream', title: 'Stream' }, { name: 'vue/modules/storage', title: 'Storage' },
+	      // {name: 'module/clipboard', title: 'Clipboard'}, // 0.8 , developing
+
+	      // showcase
+	      { name: 'vue/showcase/progress', title: 'Progress Bar' }, { name: 'vue/showcase/itemlist', title: 'List (Advanced)' }, { name: 'vue/showcase/calculator', title: 'Calculator' }]
+	    };
+	  },
+	  components: {
+	    exampleList: __webpack_require__(469)
+	  }
+	};
+
+/***/ },
+
+/***/ 469:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(470)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(479)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/example-list.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 470:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var getBaseURL = __webpack_require__(421).getBaseURL;
+	module.exports = {
+	  props: {
+	    dir: {
+	      default: 'examples'
+	    }, // examples, test ...
+	    items: {
+	      default: [{ name: 'hello', title: 'Hello World', url: '' }]
+	    }
+	  },
+	  components: {
+	    exampleListItem: __webpack_require__(471)
+	  },
+	  created: function created() {
+	    var base = getBaseURL(this);
+	    for (var i in this.items) {
+	      var item = this.items[i];
+	      if (!item.url) {
+	        item.url = base + item.name + '.js';
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 471:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(472)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(473)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(478)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/example-list-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 472:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item-txt": {
+	    "fontSize": 48,
+	    "color": "#555555"
+	  }
+	}
+
+/***/ },
+
+/***/ 473:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var event = __weex_require_module__('event');
+	module.exports = {
+	  props: {
+	    title: { default: '456' },
+	    url: { default: '' }
+	  },
+	  components: {
+	    listItem: __webpack_require__(474)
+	  },
+	  methods: {
+	    redirect: function redirect() {
+	      event.openURL(this.url);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 474:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(475)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(476)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(477)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/list-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 475:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd"
+	  }
+	}
+
+/***/ },
+
+/***/ 476:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    bgColor: { default: '#ffffff' }
+	  },
+	  methods: {
+	    click: function click() {
+	      this.$emit('click');
+	    },
+	    touchstart: function touchstart() {
+	      // FIXME android touch
+	      // TODO adaptive opposite bgColor
+	      // this.bgColor = '#e6e6e6';
+	    },
+	    touchend: function touchend() {
+	      // FIXME android touchend not triggered
+	      // this.bgColor = '#ffffff';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 477:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["item"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    on: {
+	      "click": _vm.click,
+	      "touchstart": _vm.touchstart,
+	      "touchend": _vm.touchend
+	    }
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 478:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list-item', {
+	    on: {
+	      "click": _vm.redirect
+	    }
+	  }, [_h('text', {
+	    staticClass: ["item-txt"]
+	  }, [_vm._s(_vm.title)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 479:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', [_vm._l((_vm.items), function(item) {
+	    return _h('cell', {
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree"
+	      }
+	    }, [_h('example-list-item', {
+	      attrs: {
+	        "title": item.title,
+	        "url": item.url
+	      }
+	    })])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 480:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('example-list', {
+	    attrs: {
+	      "items": _vm.items,
+	      "dir": "examples"
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/modules/clipboard.js b/android/playground/app/src/main/assets/vue/modules/clipboard.js
new file mode 100644
index 0000000..ea4f907
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/clipboard.js
@@ -0,0 +1,691 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(481)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(482)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/clipboard.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 481:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	var clipboard = __weex_require_module__('clipboard');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      textToCopy: '',
+	      textFromPaste: '',
+	      tips: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    button: __webpack_require__(387)
+	  },
+	  mounted: function mounted() {
+	    this.tips = "1. Just click COPY button. It will auto generate a string with random text, and copy to system clipboard. \n 2. do copy in another app, then come back and click PASTE button.";
+	  },
+	  methods: {
+	    doCopy: function doCopy() {
+	      modal.toast({ 'message': 'doCopy!', duration: 0.5 });
+	      textToCopy = "autoGenerateTextToCopy" + Math.random();
+	      clipboard.setString(textToCopy);
+	      this.textToCopy = textToCopy;
+	      this.tips = "copy done. Now system clipboard has string of '" + textToCopy + "', try PASTE button, or paste in another app.";
+	    },
+	    doPaste: function doPaste() {
+	      var me = this;
+	      modal.toast({ 'message': 'doPaste!', duration: 0.5 });
+	      clipboard.getString(function (ret) {
+	        console.log("paste result is " + JSON.stringify(ret));
+	        me.textFromPaste = ret.data;
+	        me.tips = "Paste done. Only support native(Android/iOS) NOW. according to security reason, paste in html5 is not supported.";
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 482:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Clipboard",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "Copy to clipboard5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      lineHeight: "40px",
+	      fontSize: "28px"
+	    }
+	  }, [_vm._s(_vm.textToCopy)]), _h('button', {
+	    attrs: {
+	      "type": "info",
+	      "size": "middle",
+	      "value": "Copy"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.doCopy($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Paste from clipboard"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      lineHeight: "40px",
+	      fontSize: "28px"
+	    }
+	  }, [_vm._s(_vm.textFromPaste)]), _h('button', {
+	    attrs: {
+	      "type": "info",
+	      "size": "middle",
+	      "value": "Paste"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.doPaste($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Result"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "value": _vm.tips
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/modules/instance-api.js b/android/playground/app/src/main/assets/vue/modules/instance-api.js
new file mode 100644
index 0000000..9cff934
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/instance-api.js
@@ -0,0 +1,304 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(483)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(484)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/instance-api.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 483:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      config: ''
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var config = this.$getConfig();
+	    console.log('config', JSON.stringify(config));
+	    this.config = JSON.stringify(config, null, 2);
+	  }
+	};
+
+/***/ },
+
+/***/ 484:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "$getConfig()",
+	      "type": "primary"
+	    }
+	  }, [_h('text', [_vm._s(_vm.config)])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/modules/modal.js b/android/playground/app/src/main/assets/vue/modules/modal.js
new file mode 100644
index 0000000..5b8805f
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/modal.js
@@ -0,0 +1,581 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(485)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(486)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/modal.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 485:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {};
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    toast: function toast(msg, duration) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = 'I am Toast show!';
+	      }
+	      duration = duration || 2;
+	      modal.toast({
+	        'message': msg,
+	        'duration': duration
+	      });
+	    },
+	    alert: function alert(msg, okTitle, cancelTitle) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = "I am Alert!";
+	      }
+	      modal.alert({
+	        'message': msg,
+	        'okTitle': okTitle,
+	        'cancelTitle': cancelTitle
+	      }, function () {
+	        modal.toast({ message: "Click Alert OK Bnt!!" });
+	      });
+	    },
+	    confirm: function confirm(msg, okTitle, cancelTitle) {
+	      if (!msg || typeof msg !== 'string') {
+	        msg = "I am Confirm!";
+	      }
+	      okTitle = okTitle || "OK";
+	      cancelTitle = cancelTitle || "Cancel";
+	      modal.confirm({
+	        'message': msg,
+	        'okTitle': okTitle,
+	        'cancelTitle': cancelTitle
+	      }, function (result) {
+	        modal.toast({ message: "Click Confirm  " + JSON.stringify(result) });
+	      });
+	    },
+	    prompt: function prompt() {
+	      modal.prompt({
+	        'message': 'I am Prompt!',
+	        'okTitle': 'ok',
+	        'cancelTitle': 'cancel'
+	      }, function (result) {
+	        modal.toast({ message: "Click Prompt  " + JSON.stringify(result) });
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 486:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Toast",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Dialog",
+	      "type": "primary"
+	    }
+	  }, [_h('button', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "success",
+	      "value": "Alert"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.alert($event)
+	      }
+	    }
+	  }), _h('button', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "primary",
+	      "value": "Confirm"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.confirm($event)
+	      }
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "warning",
+	      "value": "Prompt"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.prompt($event)
+	      }
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/modules/storage.js b/android/playground/app/src/main/assets/vue/modules/storage.js
new file mode 100644
index 0000000..13a3d93
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/storage.js
@@ -0,0 +1,381 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(487)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(488)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/storage.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 487:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var storage = __weex_require_module__('storage');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      setItemResult: 'loading',
+	      getItemResult: 'loading',
+	      removeItemResult: 'loading',
+	      lengthResult: 'loading',
+	      getAllKeysResult: 'loading'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+
+	    //setItem
+	    storage.setItem('foo', 'foo-value', function (e) {
+	      console.log('set [foo<->foo-value]:' + JSON.stringify(e));
+	      me.setItemResult = 'foo:' + JSON.stringify(e) + '\n';
+	    });
+	    storage.setItem('bar', 'bar-value', function (e) {
+	      console.log('set [bar<->bar-value]:' + JSON.stringify(e));
+	      me.setItemResult = me.setItemResult + 'bar:' + JSON.stringify(e);
+	    });
+
+	    //getItem
+	    storage.getItem('foo', function (e) {
+	      console.log('get foo result:' + JSON.stringify(e));
+	      me.getItemResult = 'get foo,value is ' + e.data + '\n';
+	    });
+	    storage.getItem('bar', function (e) {
+	      console.log('get bar result:' + JSON.stringify(e));
+	      me.getItemResult += 'get bar,value is ' + e.data;
+	    });
+
+	    //length
+	    storage.length(function (e) {
+	      console.log('length:' + JSON.stringify(e));
+	      me.lengthResult = 'current length is ' + e.data;
+	    });
+
+	    //getAllKeys
+	    storage.getAllKeys(function (e) {
+	      console.log('getAllKeys:' + JSON.stringify(e));
+	      me.getAllKeysResult = '' + e.data;
+	      //me.getAllKeysResult +=' '+ typeof e.data
+	    });
+
+	    //removeItem
+	    storage.removeItem('foo', function (e) {
+	      console.log('remove foo:' + JSON.stringify(e));
+	      me.removeItemResult = 'remove item foo ' + e.result;
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 488:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "storage API",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "setItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.setItemResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "getItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getItemResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "length"
+	    }
+	  }, [_h('text', [_vm._s(_vm.lengthResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "getAllKeys"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getAllKeysResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "removeItem"
+	    }
+	  }, [_h('text', [_vm._s(_vm.removeItemResult)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/modules/stream.js b/android/playground/app/src/main/assets/vue/modules/stream.js
new file mode 100644
index 0000000..785a8bf
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/modules/stream.js
@@ -0,0 +1,477 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(489)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(490)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/modules/stream.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 489:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var stream = __weex_require_module__('stream');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      getJsonpResult: 'loading...',
+	      getResult: 'loading...',
+	      postResult: 'loading...',
+	      putResult: 'loading...',
+	      deleteResult: 'loading...',
+	      headResult: 'loading...',
+	      patchResult: 'loading...'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+	    var GET_URL_JSONP = 'http://jsfiddle.net/echo/jsonp/?callback=anything&result=content_in_response';
+	    var GET_URL = 'http://httpbin.org/get';
+	    var POST_URL = 'http://httpbin.org/post';
+	    var PUT_URL = 'http://httpbin.org/put';
+	    var DELETE_URL = 'http://httpbin.org/delete';
+	    var HEAD_URL = 'http://httpbin.org/status/418';
+	    var PATCH_URL = 'http://httpbin.org/patch';
+
+	    stream.fetch({
+	      method: 'GET',
+	      url: GET_URL_JSONP,
+	      type: 'jsonp'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.getJsonpResult = "request failed";
+	      } else {
+	        console.log('get:' + ret);
+	        me.getJsonpResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get jsonp in progress:' + response.length);
+	      me.getJsonpResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'GET',
+	      url: GET_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.getResult = "request failed";
+	      } else {
+	        console.log('get:' + ret);
+	        me.getResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.getResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'POST',
+	      url: POST_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.postResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.postResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.postResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'PUT',
+	      url: PUT_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.putResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.putResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.putResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'DELETE',
+	      url: DELETE_URL,
+	      type: 'json'
+	    }, function (ret) {
+
+	      if (!ret.ok) {
+	        me.deleteResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.deleteResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.deleteResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'HEAD',
+	      url: HEAD_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (ret.statusText !== 'I\'m a teapot') {
+	        me.headResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.headResult = ret.statusText;
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.headResult = "bytes received:" + response.length;
+	    });
+
+	    stream.fetch({
+	      method: 'PATCH',
+	      url: PATCH_URL,
+	      type: 'json'
+	    }, function (ret) {
+	      if (!ret.ok) {
+	        me.patchResult = "request failed";
+	      } else {
+	        console.log('get:' + JSON.stringify(ret));
+	        me.patchResult = JSON.stringify(ret.data);
+	      }
+	    }, function (response) {
+	      console.log('get in progress:' + response.length);
+	      me.patchResult = "bytes received:" + response.length;
+	    });
+	  }
+	};
+
+/***/ },
+
+/***/ 490:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "stream.fetch",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "method = GET"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = GET / type = jsonp"
+	    }
+	  }, [_h('text', [_vm._s(_vm.getJsonpResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = POST"
+	    }
+	  }, [_h('text', [_vm._s(_vm.postResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = PUT"
+	    }
+	  }, [_h('text', [_vm._s(_vm.putResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = DELETE"
+	    }
+	  }, [_h('text', [_vm._s(_vm.deleteResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = HEAD"
+	    }
+	  }, [_h('text', [_vm._s(_vm.headResult)])]), _h('panel', {
+	    attrs: {
+	      "title": "method = PATCH"
+	    }
+	  }, [_h('text', [_vm._s(_vm.patchResult)])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/showcase/calculator.js b/android/playground/app/src/main/assets/vue/showcase/calculator.js
new file mode 100644
index 0000000..eb5e7c0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/calculator.js
@@ -0,0 +1,340 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(491)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(492)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(493)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/calculator.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 491:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row"
+	  },
+	  "result": {
+	    "textAlign": "right",
+	    "backgroundColor": "#666666",
+	    "fontSize": 40,
+	    "color": "#FFFFFF",
+	    "height": 100,
+	    "padding": 30,
+	    "margin": 5
+	  },
+	  "btn": {
+	    "flex": 1,
+	    "textAlign": "center",
+	    "backgroundColor": "#eeeeee",
+	    "fontSize": 36,
+	    "height": 100,
+	    "padding": 30,
+	    "margin": 5
+	  },
+	  "btn-operator": {
+	    "backgroundColor": "#666699",
+	    "fontSize": 40,
+	    "color": "#FFFFFF"
+	  }
+	}
+
+/***/ },
+
+/***/ 492:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var OP = ['+', '-', '*', '/'];
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      result: '',
+	      inputs: []
+	    };
+	  },
+	  methods: {
+	    input: function input(e) {
+	      modal.toast({ message: 'input: ' + e.target.attr.value, duration: 1 });
+	      var value = e.target.attr['value'];
+	      var inputs = this.inputs;
+	      var lastOne = inputs.length ? inputs[inputs.length - 1] : '';
+	      if (OP.indexOf(lastOne) > -1 && OP.indexOf(value) > -1) {
+	        return;
+	      }
+	      inputs.push(value);
+	      var buf = [],
+	          char;
+	      for (var i = 0; i < inputs.length; i++) {
+	        char = inputs[i];
+	        if (OP.indexOf(char) > -1) {
+	          char = ' ' + char + ' ';
+	        }
+	        buf.push(char);
+	      }
+	      this.result = buf.join('');
+	    },
+	    calculate: function calculate() {
+	      var result = eval(this.result);
+	      this.inputs = [result];
+	      this.result = result;
+	    },
+	    clear: function clear() {
+	      this.inputs = [];
+	      this.result = '';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 493:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      padding: "5px"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["result"]
+	  }, [_vm._s(_vm.result)]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["2"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["3"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["+"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["4"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["5"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["6"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["-"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["7"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["8"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["9"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["*"])]), _h('div', {
+	    staticClass: ["row"]
+	  }, [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["0"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.input
+	    }
+	  }, ["."]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.clear
+	    }
+	  }, ["AC"]), _h('text', {
+	    staticClass: ["btn", "btn-operator"],
+	    on: {
+	      "click": _vm.calculate
+	    }
+	  }, ["="])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/showcase/itemlist.js b/android/playground/app/src/main/assets/vue/showcase/itemlist.js
new file mode 100644
index 0000000..036f742
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/itemlist.js
@@ -0,0 +1,1062 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(494)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(495)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(496)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/itemlist.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 494:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "flexRow": {
+	    "flexDirection": "row"
+	  },
+	  "flexColumn": {
+	    "flexDirection": "column"
+	  },
+	  "fixed": {
+	    "position": "fixed",
+	    "bottom": 50,
+	    "left": 50,
+	    "width": 300,
+	    "height": 50,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "shopImg": {
+	    "width": 220,
+	    "height": 220
+	  },
+	  "list": {
+	    "flexDirection": "column",
+	    "overflow": "hidden",
+	    "width": 750,
+	    "height": 1200,
+	    "backgroundColor": "#dddddd"
+	  },
+	  "cell": {
+	    "backgroundColor": "#dddddd",
+	    "flexDirection": "column",
+	    "width": 750
+	  },
+	  "shopDiv": {
+	    "flexDirection": "column",
+	    "backgroundColor": "#ffffff",
+	    "margin": 5,
+	    "padding": 10,
+	    "borderWidth": 1,
+	    "borderColor": "#cccccc",
+	    "overflow": "visible"
+	  },
+	  "shopRowList": {
+	    "flexDirection": "column",
+	    "borderWidth": 1,
+	    "borderColor": "#cccccc",
+	    "overflow": "visible",
+	    "margin": 5,
+	    "padding": 10,
+	    "backgroundColor": "#ffffff"
+	  },
+	  "shopHeader": {
+	    "flexDirection": "row",
+	    "width": 720
+	  },
+	  "shopFooter": {
+	    "flexDirection": "row",
+	    "width": 720
+	  },
+	  "smallImg": {
+	    "width": 20,
+	    "height": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 495:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      shopList: [{
+	        id: 1,
+	        scopeValue: 1,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Mendeleyev',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Genius only means hard-working all one\'s life',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1rtOnHpXXXXXLaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB15KrfFVXXXXXJXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1t5YBGVXXXXXcaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 2,
+	        scopeValue: 2,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Napoleon',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'The man who has made up his mind to win will never say "impossible "',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2655929383/TB2.qITjpXXXXcIXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2655929383/TB2eWwZjpXXXXbHXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2655929383/TB2tgQWjpXXXXbZXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 3,
+	        scopeValue: 3,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Balzac',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'There is no such thing as a great talent without great will - power',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/TB1AFz9LXXXXXbrXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2is2njXXXXXatXpXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2PNYGjXXXXXbXXXXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 4,
+	        scopeValue: 4,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Thomas Carlyle',
+	        PersonVisitTime: '3 day ago',
+	        shopDesc: 'Cease to struggle and you cease to live',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2zbwdfXXXXXa4XpXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2L7ZAfXXXXXXOXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2p9wufXXXXXbiXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 5,
+	        scopeValue: 5,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Addison',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'A strong man will struggle with the storms of fate',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1MQ8_KVXXXXaLXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/53218032/TB2bGSqiXXXXXXyXpXXXXXXXXXX_!!53218032.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1kP2zKFXXXXbIXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 6,
+	        scopeValue: 1,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Ruskin',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'Living without an aim is like sailing without a compass',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB11yFnHXXXXXakaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/32720628/TB2CRJUcXXXXXXwXpXXXXXXXXXX_!!32720628.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB17LUzHXXXXXcEaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 7,
+	        scopeValue: 2,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Yiming',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Live a noble and honest life. Reviving past times in your old age will help you to enjoy your life again',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB1hvNoJXXXXXaMaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/2058567235/TB2V8iygFXXXXaRXpXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2058567235/TB2im1QgFXXXXX8XXXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 8,
+	        scopeValue: 3,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'Brown',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'Behind every successful man there\'s a lot u unsuccessful years',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB18BZ2KFXXXXb8XFXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2775383848/TB2r012jVXXXXXHXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2775383848/TB2iI9VjVXXXXaoXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 9,
+	        scopeValue: 4,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'YIMING',
+	        PersonVisitTime: 'today',
+	        shopDesc: 'Enrich your life today,. yesterday is history.tomorrow is mystery',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1JB.rLpXXXXXLXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd4.alicdn.com/imgextra/i4/2702739128/TB2JdvmjVXXXXXjXXXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd2.alicdn.com/imgextra/i2/2702739128/TB2A.e6jVXXXXXGXpXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+
+	      }, {
+	        id: 10,
+	        scopeValue: 5,
+	        PersonPhoto: 'https://gw.alicdn.com/tps/i3/TB1yeWeIFXXXXX5XFXXuAZJYXXX-210-210.png_60x60.jpg',
+	        PersonName: 'YIMING',
+	        PersonVisitTime: 'yesterday',
+	        shopDesc: 'The secret of success is constancy to purpose',
+	        shopImgList: [{
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB17zXOGXXXXXbEXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd1.alicdn.com/imgextra/i1/2265445951/TB22ACTbFXXXXXBXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
+	        }, {
+	          shopImgWidth: 220,
+	          shopImgHeight: 220,
+	          shopImg: 'https://gd3.alicdn.com/imgextra/i3/2265445951/TB2oXqUbFXXXXXIXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
+	        }],
+	        shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopLikeText: '6',
+	        shopCommentImg: 'https://img.alicdn.com/tps/i1/TB1kTKyIVXXXXacXFXX07tlTXXX-200-200.png_88x88xz.jpg',
+	        shopCommentText: '97',
+	        shopLookImg: 'https://img.alicdn.com/imgextra/i4/397746073/TB2IseKeFXXXXcVXXXXXXXXXXXX-397746073.png_88x88xz.jpg',
+	        shopLookText: '1003',
+	        shareImg: 'https://cbu01.alicdn.com/cms/upload/2015/930/224/2422039_702806130.png_88x88xz.jpg',
+	        shareText: "10"
+	      }]
+	    };
+	  },
+	  methods: {
+	    loadmore: function loadmore(e) {
+	      modal.toast({
+	        'message': 'loadmore',
+	        'duration': 2.0
+	      });
+	    },
+	    oncellclick: function oncellclick(id) {
+	      modal.toast({
+	        'message': 'row ' + id + ' clicked',
+	        'duration': 2.0
+	      });
+	    }
+	  }
+
+	};
+
+/***/ },
+
+/***/ 496:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', {
+	    staticClass: ["list"],
+	    attrs: {
+	      "loadmoreoffset": "2000"
+	    },
+	    on: {
+	      "loadmore": _vm.loadmore
+	    }
+	  }, [_vm._l((_vm.shopList), function(item) {
+	    return _h('cell', {
+	      staticClass: ["cell"],
+	      attrs: {
+	        "scope": item.scopeValue
+	      },
+	      on: {
+	        "click": function($event) {
+	          _vm.oncellclick(item.id)
+	        }
+	      }
+	    }, [_h('div', {
+	      staticClass: ["shopDiv"]
+	    }, [_h('div', {
+	      staticClass: ["shopHeader"],
+	      staticStyle: {
+	        flexDirection: "row"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        flex: "2",
+	        flexDirection: "row"
+	      }
+	    }, [_h('div', [_h('image', {
+	      staticStyle: {
+	        width: "60",
+	        height: "60"
+	      },
+	      attrs: {
+	        "src": item.PersonPhoto
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        flexDirection: "column",
+	        marginLeft: "5"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        marginTop: "5"
+	      }
+	    }, [_h('text', {
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.PersonName)])]), _h('div', {
+	      staticStyle: {
+	        marginTop: "5"
+	      }
+	    }, [_h('text', {
+	      staticStyle: {
+	        fontSize: "20",
+	        color: "#cccccc"
+	      }
+	    }, [_vm._s(item.PersonVisitTime)])])])]), _vm._m(0, true)]), _h('div', {
+	      staticClass: ["shopBody"],
+	      staticStyle: {
+	        flexDirection: "column"
+	      }
+	    }, [_h('div', {
+	      staticClass: ["descDiv"],
+	      staticStyle: {
+	        marginTop: "10",
+	        marginLeft: "10"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopDesc"],
+	      staticStyle: {
+	        fontSize: "25"
+	      }
+	    }, [_vm._s(item.shopDesc)])]), _h('div', {
+	      staticStyle: {
+	        flexDirection: "row"
+	      }
+	    }, [_vm._l((item.shopImgList), function(img) {
+	      return _h('div', {
+	        staticClass: ["imgDiv"],
+	        staticStyle: {
+	          flex: "1",
+	          flexDirection: "column",
+	          margin: "10"
+	        }
+	      }, [_h('div', [_h('image', {
+	        staticClass: ["shopImg"],
+	        style: {
+	          width: img.shopImgWidth,
+	          height: img.shopImgHeight
+	        },
+	        attrs: {
+	          "src": img.shopImg
+	        }
+	      })]), _vm._m(1, true)])
+	    })])]), _h('div', {
+	      staticClass: ["shopFooter"],
+	      staticStyle: {
+	        flexDirection: "row",
+	        marginTop: "10",
+	        marginLeft: "10",
+	        justifyContent: "flex-end"
+	      }
+	    }, [_h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopLikeImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopLikeImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopLikeText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopLikeText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopCommentImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopCommentImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopCommentText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopCommentText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shopLookImg", "smallImg"],
+	      attrs: {
+	        "src": item.shopLookImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "15"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shopLookText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shopLookText)])]), _h('div', {
+	      staticStyle: {
+	        marginRight: "5"
+	      }
+	    }, [_h('image', {
+	      staticClass: ["shareImg", "smallImg"],
+	      attrs: {
+	        "src": item.shareImg
+	      }
+	    })]), _h('div', {
+	      staticStyle: {
+	        marginRight: "20"
+	      }
+	    }, [_h('text', {
+	      staticClass: ["shareText"],
+	      staticStyle: {
+	        fontSize: "20"
+	      }
+	    }, [_vm._s(item.shareText)])])])])])
+	  })])
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flex: "5",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      marginLeft: "10",
+	      marginTop: "10"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i4/TB1zkDeIFXXXXXrXVXX07tlTXXX-200-200.png_88x88xz.jpg"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Hope"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "90",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1hRb1IXXXXXX3XVXXXQaP.pXX-87-87.jpeg"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Mem"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "170",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i3/TB1DGkJJFXXXXaZXFXX07tlTXXX-200-200.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["auth"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "250",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["Friend"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "330",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["issue"])])]), _h('div', {
+	    staticStyle: {
+	      position: "absolute",
+	      left: "410",
+	      top: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://gtms02.alicdn.com/tps/i2/TB11ZZfIVXXXXbMXFXXEDhGGXXX-32-32.png"
+	    }
+	  })]), _h('div', [_h('text', {
+	    staticStyle: {
+	      fontSize: "20"
+	    }
+	  }, ["super"])])])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      marginTop: "10",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      justifyContent: "center",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', {
+	    staticStyle: {
+	      marginLeft: "5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "20",
+	      textAlign: "center"
+	    }
+	  }, ["Up"])])]), _h('div', {
+	    staticStyle: {
+	      flex: "1",
+	      justifyContent: "center",
+	      flexDirection: "row"
+	    }
+	  }, [_h('div', [_h('image', {
+	    staticStyle: {
+	      width: "20",
+	      height: "20"
+	    },
+	    attrs: {
+	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
+	    }
+	  })]), _h('div', {
+	    staticStyle: {
+	      marginLeft: "5"
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "20",
+	      textAlign: "center"
+	    }
+	  }, ["down"])])])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/showcase/new-fashion.js b/android/playground/app/src/main/assets/vue/showcase/new-fashion.js
new file mode 100644
index 0000000..37e2558
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/new-fashion.js
@@ -0,0 +1,3302 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(497)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(498)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(540)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/new-fashion.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 497:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "content": {
+	    "color": "#353535",
+	    "backgroundColor": "#666666",
+	    "position": "absolute",
+	    "top": 0,
+	    "left": 0,
+	    "right": 0,
+	    "bottom": 0
+	  },
+	  "refresh": {
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "loading": {
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  }
+	}
+
+/***/ },
+
+/***/ 498:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	var timer = __weex_require_module__('timer');
+
+	module.exports = {
+	  components: {
+	    headlines: __webpack_require__(499),
+	    category: __webpack_require__(512),
+	    coupon: __webpack_require__(516),
+	    goods: __webpack_require__(520),
+	    resource: __webpack_require__(524),
+	    scene: __webpack_require__(528),
+	    match: __webpack_require__(532),
+	    brand: __webpack_require__(536)
+	  },
+	  data: {
+	    navBarHeight: 88,
+	    cnt: 0,
+	    show0: true,
+	    show1: false,
+	    show2: false,
+	    displayRefresh: 'show',
+	    displayLoading: 'show',
+	    showData: {}
+	  },
+	  created: function created() {
+	    this.showData = {
+	      "header": {
+	        "topBanner": "https://gw.alicdn.com/tps/TB1J48kMXXXXXXtapXXXXXXXXXX-750-782.jpg",
+	        "ruleLink": "https://chaoshi.m.tmall.com/",
+	        "isShowShare": true,
+	        "shareInfo": {
+	          "shareTitle": "我是分享标题",
+	          "shareIntro": " 我是分享内容测试",
+	          "allLink": "https://www.tmall.com",
+	          "mobileImage": "https://gw.alicdn.com/tps/TB1J48kMXXXXXXtapXXXXXXXXXX-750-782.jpg",
+	          "pcImage": "https://img.alicdn.com/tps/i4/TB1Dyw1LVXXXXXEapXXSutbFXXX.jpg",
+	          "shareScene": "我是测试业务",
+	          "bizId": ""
+	        },
+	        "announceHdBanner": "https://gw.alicdn.com/tps/i4/TB1fzclLVXXXXaVaXXXwu0bFXXX.png",
+	        "bannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1U8LHLVXXXXa3XpXXXXXXXXXX-233-172.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "fashion": {
+	        "isHide": false,
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bigBannerImg": "https://gw.alicdn.com/tps/TB1tO.aLVXXXXcvXpXXXXXXXXXX-750-262.jpg",
+	        "bigBannerUrl": "https://chaoshi.m.tmall.com/",
+	        "smallBannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "isHideStarBanner": false,
+	        "firstStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "secondStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }],
+	        "thirdStarBannerItems": [{
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://gw.alicdn.com/tps/TB1xlIVLVXXXXckXVXXXXXXXXXX-250-220.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "goods": {
+	        "isHide": false,
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bannerItems": [{
+	          "img1": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url1": "https://chaoshi.m.tmall.com/",
+	          "img2": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url2": "https://chaoshi.m.tmall.com/",
+	          "img3": "https://gw.alicdn.com/tps/TB12MPFLVXXXXXnXVXXXXXXXXXX-250-592.jpg",
+	          "url3": "https://chaoshi.m.tmall.com/",
+	          "img4": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url4": "https://chaoshi.m.tmall.com/",
+	          "img5": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url5": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img1": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url1": "https://chaoshi.m.tmall.com/",
+	          "img2": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url2": "https://chaoshi.m.tmall.com/",
+	          "img3": "https://gw.alicdn.com/tps/TB12MPFLVXXXXXnXVXXXXXXXXXX-250-592.jpg",
+	          "url3": "https://chaoshi.m.tmall.com/",
+	          "img4": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url4": "https://chaoshi.m.tmall.com/",
+	          "img5": "https://gw.alicdn.com/tps/TB1TUzGLVXXXXc1XFXXXXXXXXXX-250-296.jpg",
+	          "url5": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "coupon": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg"
+	      },
+	      "scene": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "_backup": {
+	          "id": "03653",
+	          "data": [{
+	            "id": "1395",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1395&scm=1003.1.03653.MAIN_1395_710531&pos=1",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1n6bVLVXXXXcCXVXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50008881,50008883,50008882,50008884,50012774,50012775,50012776,50012781,50008886,50012766,50012771,50012772,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,16240,50012773,50006846,50010394,50008888,50008890,50008889,50012784,50012785,50012786,50012787,50008885,50012777,50012778,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124942005,50010368,50011892,50011894,50023751,121366037,121458036,121392038,121420035,121364028,121468026,121400029,121418030,121478031,121480030,121366035,121424025,121426030,121484030,121412031,125054002,125074007,125074008,125104003,125080003,125024006,125080004,121400030,121424024,121482025,121418031,121402028,121388035",
+	            "finalScore": "77.26011111111112",
+	            "_pos_": 1,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1Onr9LVXXXXbiXpXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1394",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1394&scm=1003.1.03653.MAIN_1394_710531&pos=2",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB13mj1LVXXXXa.XFXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124986002,50010368, 50011892,50011894,121480030,121366035,121424025,121426030,121484030,121412031",
+	            "finalScore": "77.06103999999999",
+	            "_pos_": 2,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB17kvVLVXXXXaTXVXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1396",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1396&scm=1003.1.03653.MAIN_1396_710531&pos=3",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1ZOAXLVXXXXa0XXXXTCU0QpXX-300-300.jpg",
+	            "sceneCat": "50010368,50011892,50011894,50013794,50010792,50010790,50010790,121434025,121396024,50010793,50010789,50010793,121386035,121392037,121458034,121392036,121482027,121392015,121368014,121418013,121392016,50011982,122690003,302910,50012010,122654005,50012019,50012825,50012027,50012042,50011744,50012906,50012907,50008881,50008883,50008882?,50012784?,50022889,50022728,50013228,50013896,50014775,50019578,50014822,50026394,50019694,50019279,50019272,50014079,50014078,50014076,50014077,50017238,121464011,121468014,50019130,50019127,50019126,50019128,50019125,50015984,50014803,50014802,50015980,50014788,50014787,50019526,50014791,50019520,50013932,50014677,50015978,50014786,50014785,50522001,50014493,50023100,121418021,121388027,121424021,121418020,121368020,50012036,50012044,50012043,50010368, 50011892, 50019274,50012044,50012048,50012043,50013228,50013238,50011726,50019279,50015984,50014803,50014802,50019526,50014791,50019520,50013932,50014677,50019526,50013314,50023341,50016752,50016749,50016747,50016744,50016741,50016740,50016739,50016738,50016737,50016769,50016763,50016750,50007003,302910,50012010,50012032,50012033,50011745,50011746,50011894,121458034,121756003,121426033,50011982,50011979,121390006,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,1512,123534001,14,50008090,50012341,50132002,50012342,50012343,50012345,50012346,50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,121450007,50013697,50010218,50005960,50005962,50012820,50012406,50023620,50023605,50008829,50024064,50023440,50008687,124392001,50023771,50006804,50012410,124482010,121398023,50023789,50011975",
+	            "finalScore": "76.76379487179486",
+	            "_pos_": 3,
+	            "entityType": "MAIN",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1Usn.LVXXXXaoXpXXB8gAQpXX-300-100.png"
+	          }, {
+	            "id": "1619",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1619&scm=1003.1.03653.SUB_1619_710531&pos=4",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i2/TB1MpoBLVXXXXbxXpXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,122654005,50011740,50009032,124688012,213202,121396029,121476023,121410029,213203,50023326,213205,50022686,50023293,50466023,50024999,50016885,50011894",
+	            "finalScore": "75.88480000000001",
+	            "_pos_": 4,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1j0AxLVXXXXaRXFXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1612",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1612&scm=1003.1.03653.SUB_1612_710531&pos=5",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i3/TB1NNwyLVXXXXaEXVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50010850,50000671,162104,162116,123216004",
+	            "finalScore": "75.23733333333334",
+	            "_pos_": 5,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i1/TB1PsoBLVXXXXbQXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1610",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1610&scm=1003.1.03653.SUB_1610_710531&pos=6",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i4/TB1EkczLVXXXXcVXpXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "121484044,121452038,50012342,50012027,50012032,50006843,50010850,50000671,162104,1623,50011277,162116,123216004,50008898,121366037,121458036,121392038,121420035,121364028,121468026,121472031,121476036,121470042,121418032,121410036,121472032,121420032,121470040,121384032,121460028,121448028,121400030,121424024,121482025,121418031,121402028,121388035,121460029,121400028,121400029,121418030,121476034,121478031,121448029,121480030,121366035,121424025,121426030,121484030,121412031,121384033,121424023,121402027,121408039,121420033,121452028,121466040,121416029,121482028,121420034,121396046,121422052,121370037,121424031,21364043,121472040,121412045,121424032,125054002,125074007,125074008,125104003,125080003,125024006,125080004",
+	            "finalScore": "75.00533333333334",
+	            "_pos_": 6,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB1RzwFLVXXXXXsXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1620",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1620&scm=1003.1.03653.SUB_1620_710531&pos=7",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1IJsILVXXXXbGXXXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50010789,50010790,50010792,50010793,50010794,50010796,50010797,50010798,50010801,50010803,50010805,50010807,50010808,50010813,50010814,50010815,50013794,121382014,121386023,121388007,121388008,121398004,121364007,121398006,121410007,121426007,121452004,50012010,50012027,50012032,124688012, 124986002, 124942005,50010850,50000671,162104,162201,50022566,162116,1623,50011277,50008897,162401,162402",
+	            "finalScore": "74.72522222222223",
+	            "_pos_": 7,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i1/TB16A.yLVXXXXX8XFXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1608",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1608&scm=1003.1.03653.SUB_1608_710531&pos=8",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i3/TB1xA3jLVXXXXXqapXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50012010,50012027,50012032,50007003,50008881,50008883,1623,162116,50010850,123216004",
+	            "finalScore": "74.626",
+	            "_pos_": 8,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i2/TB1WvoALVXXXXcdXpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1615",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1615&scm=1003.1.03653.SUB_1615_710531&pos=9",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1PVctLVXXXXchXFXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50011978,50011979,50011980,50011993,50011996,50011997,121390006,121408011,121474010,50010789,50010790,50010792,50010793,50010803,50013794,121398004,121410007,213205,121470030,50024980,121408030",
+	            "finalScore": "74.02799999999999",
+	            "_pos_": 9,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1yKwBLVXXXXa4XpXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1618",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1618&scm=1003.1.03653.SUB_1618_710531&pos=10",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1vn3sLVXXXXX5XVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50008886,50012766,50012771,50012772,50012773,50008090,111219,50012100,50012082,50012478,50012475,213202,50018977,121396029,121476023,50018994,121410029,213203,50023326,50003820,213205,50022686,50012481,50013976?,50001871,122854005,121458010,121452006,121416008,50008779,50002777,121394007,121386009,50010825,50013810,121434010,50001865,50008565,50008246,50017192,121404045,121368009,121462014,50019372,50008248,121418011,50008249,50017193,50008252,50008251,50000512,121364047",
+	            "finalScore": "73.94212121212121",
+	            "_pos_": 10,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i4/TB1kSkpLVXXXXbTXVXX3bpXTXXX-170-100.png"
+	          }, {
+	            "id": "1617",
+	            "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.710531&aldid=TPMkJDIw&wh_id=1617&scm=1003.1.03653.SUB_1617_710531&pos=11",
+	            "_s_": "d",
+	            "itemImg": "//img.alicdn.com/tps/i1/TB1ELwrLVXXXXaNXVXXKofZZpXX-182-206.jpg",
+	            "sceneCat": "50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,50012341,50132002,50012342,50012343,50012345,50012346,50012341,50132002,50012342,50012343,50012345,50012346",
+	            "finalScore": "73.78883333333334",
+	            "_pos_": 11,
+	            "entityType": "SUB",
+	            "benefitImg": "//img.alicdn.com/tps/i3/TB1CtsuLVXXXXcJXFXX3bpXTXXX-170-100.png"
+	          }],
+	          "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1001_B5&com=02&acm=03653.1003.1.710531&cod=03653&cache=jWl8FJsb&aldid=TPMkJDIw&logtype=4&abtest=_AB-LR1001-PR1001&scm=1003.1.03653.710531&ip=42.120.74.104",
+	          "serverTime": 1458296110334
+	        }
+	      },
+	      "resource": {
+	        "isHide": false,
+	        "bigBannerImg": "https://gw.alicdn.com/tps/TB1tO.aLVXXXXcvXpXXXXXXXXXX-750-262.jpg",
+	        "bigBannerUrl": "https://chaoshi.m.tmall.com/",
+	        "smallBannerItems": [{
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "img": "https://img.alicdn.com/tps/TB1Ff_0LVXXXXXNaXXXXXXXXXXX-375-262.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "category": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "_backup": {
+	          "main": [],
+	          "sub": [{
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/dqc?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_15_735362&pos=1",
+	            "entityType": "OTHER",
+	            "colour": "b4ebff",
+	            "industryTitle": "数码",
+	            "_pos_": 1,
+	            "industryBenefit": "疯抢大牌新品",
+	            "industryId": "15",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1_xG.LVXXXXbWaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/xihu?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_13_735362&pos=2",
+	            "entityType": "OTHER",
+	            "colour": "cdffa4",
+	            "industryTitle": "洗护",
+	            "_pos_": 2,
+	            "industryBenefit": "爆款1分钱抢",
+	            "industryId": "13",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1Ft_CLVXXXXX2XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/mobilephone?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_14_735362&pos=3",
+	            "entityType": "OTHER",
+	            "colour": "c5ffdf",
+	            "industryTitle": "手机",
+	            "_pos_": 3,
+	            "industryBenefit": "1元抢优惠券",
+	            "industryId": "14",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1mJjuLVXXXXc.XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/xiangbaohuanxin?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_11_735362&pos=4",
+	            "entityType": "OTHER",
+	            "colour": "ffccdc",
+	            "industryTitle": "箱包",
+	            "_pos_": 4,
+	            "industryBenefit": "极致焕新尖货",
+	            "industryId": "11",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1_5P9KVXXXXayaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/newfood?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_12_735362&pos=5",
+	            "entityType": "OTHER",
+	            "colour": "fff5a3",
+	            "industryTitle": "食品",
+	            "_pos_": 5,
+	            "industryBenefit": "新品1分试吃",
+	            "industryId": "12",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1HfLzLVXXXXb_XXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/zbps?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_3_735362&pos=6",
+	            "entityType": "OTHER",
+	            "colour": "bbffe5",
+	            "industryTitle": "珠宝配饰",
+	            "_pos_": 6,
+	            "industryBenefit": "大牌1折秒杀",
+	            "industryId": "3",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1s5y.LVXXXXb.aXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/getbeauty?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_2_735362&pos=7",
+	            "entityType": "OTHER",
+	            "colour": "ffd1b6",
+	            "industryTitle": "美妆",
+	            "_pos_": 7,
+	            "industryBenefit": "即刻预约美丽",
+	            "industryId": "2",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1lNvoLVXXXXaoXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/guojixfs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_1_735362&pos=8",
+	            "entityType": "OTHER",
+	            "colour": "b9eaf2",
+	            "industryTitle": "天猫国际",
+	            "_pos_": 8,
+	            "industryBenefit": "唤醒全球潮流",
+	            "industryId": "1",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1JHbkLVXXXXblXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/newnv?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_10_735362&pos=9",
+	            "entityType": "OTHER",
+	            "colour": "fff8ee",
+	            "industryTitle": "鞋履",
+	            "_pos_": 9,
+	            "industryBenefit": "潮品精选鞋履",
+	            "industryId": "10",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1RovwLVXXXXXnXpXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/nvzhuang?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_7_735362&pos=10",
+	            "entityType": "OTHER",
+	            "colour": "d5cbe8",
+	            "industryTitle": "女装",
+	            "_pos_": 10,
+	            "industryBenefit": "折后用券抢新",
+	            "industryId": "7",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1BOncLVXXXXXSaXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/man?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_6_735362&pos=11",
+	            "entityType": "OTHER",
+	            "colour": "cbe9a9",
+	            "industryTitle": "男装",
+	            "_pos_": 11,
+	            "industryBenefit": "新品低至9.9元",
+	            "industryId": "6",
+	            "industryImg": "//img.alicdn.com/tps/i4/TB1t9TmLVXXXXbkXFXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/myxfs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_5_735362&pos=12",
+	            "entityType": "OTHER",
+	            "colour": "f8e1ff",
+	            "industryTitle": "母婴童装",
+	            "_pos_": 12,
+	            "industryBenefit": "跨店满299减40",
+	            "industryId": "5",
+	            "industryImg": "//img.alicdn.com/tps/i3/TB1kpziLVXXXXabXVXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/jfjs?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_4_735362&pos=13",
+	            "entityType": "OTHER",
+	            "colour": "bbffe5",
+	            "industryTitle": "家纺家饰",
+	            "_pos_": 13,
+	            "industryBenefit": "全场低至9.9元",
+	            "industryId": "4",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1lUjzLVXXXXbAXXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/neiyi328?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_9_735362&pos=14",
+	            "entityType": "OTHER",
+	            "colour": "ffc7c9",
+	            "industryTitle": "内衣",
+	            "_pos_": 14,
+	            "industryBenefit": "新品3折起",
+	            "industryId": "9",
+	            "industryImg": "//img.alicdn.com/tps/i1/TB1S7PuLVXXXXcVXXXXrdvGIFXX-248-155.jpg"
+	          }, {
+	            "finalScore": 0,
+	            "industryUrl": "//pages.tmall.com/wow/act/15617/ydhw?abbucket=_AB-M1011_B5&acm=03654.1003.1.735362&aldid=e5zPEI6R&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_8_735362&pos=15",
+	            "entityType": "OTHER",
+	            "colour": "cbdbfe",
+	            "industryTitle": "运动户外",
+	            "_pos_": 15,
+	            "industryBenefit": "大牌新品抢券",
+	            "industryId": "8",
+	            "industryImg": "//img.alicdn.com/tps/i2/TB1mQDALVXXXXbdXXXXrdvGIFXX-248-155.jpg"
+	          }],
+	          "isFormal": false,
+	          "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1011_B5&com=02&acm=03654.1003.1.735362&cod=03654&cache=CG5ZB02B&aldid=e5zPEI6R&logtype=4&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.735362&ip=42.120.74.159",
+	          "id": "03654"
+	        }
+	      },
+	      "brand": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "bannerItems": [{
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }]
+	      },
+	      "match": {
+	        "floorTitle": "https://gw.alicdn.com/tps/TB1._64LVXXXXatXVXXXXXXXXXX-750-100.jpg",
+	        "isShowTmSpecBanner": true,
+	        "tmSpecBanner": {
+	          "img": "https://gw.alicdn.com/tps/TB1F2fJLVXXXXccXFXXXXXXXXXX-750-230.jpg",
+	          "url": "https://chaoshi.m.tmall.com/"
+	        },
+	        "bannerItems": [{
+	          "leftImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }, {
+	          "leftImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "leftUrl": "https://chaoshi.m.tmall.com/",
+	          "rightImg": "https://gw.alicdn.com/tps/TB1OUnILVXXXXcoXFXXXXXXXXXX-374-416.jpg",
+	          "rightUrl": "https://chaoshi.m.tmall.com/"
+	        }]
+	      }
+	    };
+	    this.simLoadingData(this.cnt++);
+	  },
+	  methods: {
+	    handleRefresh: function handleRefresh(e) {
+	      var vm = this;
+	      vm.displayRefresh = 'show';
+	      if (timer) {
+	        timer.setTimeout(function () {
+	          vm.displayRefresh = 'hide';
+	        }, 2000);
+	      } else {
+	        modal.alert({
+	          message: 'refreshing.'
+	        }, function () {
+	          vm.displayRefresh = 'hide';
+	        });
+	      }
+	    },
+	    handleLoading: function handleLoading(e) {
+	      var vm = this;
+	      vm.displayLoading = 'show';
+	      modal.toast({
+	        message: 'loading.'
+	      });
+	      if (timer) {
+	        timer.setTimeout(function () {
+	          vm.simLoadingData(vm.cnt++);
+	          vm.displayLoading = 'hide';
+	        }, 2000);
+	      } else {
+	        vm.simLoadingData(vm.cnt++);
+	        vm.displayLoading = 'hide';
+	      }
+	    },
+	    simLoadingData: function simLoadingData(num) {
+	      if (num >= 3) {
+	        modal.toast({
+	          message: '已到底部'
+	        });
+	        return;
+	      }
+	      this['show' + num] = true;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 499:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(500)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(501)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(511)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/headlines.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 500:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "banner": {
+	    "width": 750,
+	    "height": 782
+	  },
+	  "share-container": {
+	    "position": "absolute",
+	    "right": 100,
+	    "top": 15,
+	    "zIndex": 100,
+	    "fontSize": 20,
+	    "color": "#ffffff",
+	    "backgroundColor": "#000000",
+	    "borderRadius": 17,
+	    "width": 110,
+	    "height": 35,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "rule-container": {
+	    "position": "absolute",
+	    "right": 22,
+	    "top": 15,
+	    "zIndex": 100,
+	    "fontSize": 20,
+	    "color": "#ffffff",
+	    "backgroundColor": "#000000",
+	    "borderRadius": 17,
+	    "width": 70,
+	    "height": 35,
+	    "justifyContent": "center"
+	  },
+	  "announce": {
+	    "backgroundColor": "#f5f3f4",
+	    "width": 716,
+	    "height": 286,
+	    "position": "absolute",
+	    "bottom": 17,
+	    "left": 17,
+	    "borderRadius": 5
+	  },
+	  "announce-hd": {
+	    "width": 700,
+	    "height": 90,
+	    "marginTop": 8,
+	    "marginBottom": 8,
+	    "marginLeft": 5,
+	    "marginRight": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 501:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    link: __webpack_require__(502),
+	    banners: __webpack_require__(505)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_233: 233,
+	      NUMBER_172: 172,
+	      NUMBER_3: 3
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 502:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(503)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(504)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/link.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 503:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: ['text', 'href'],
+	  methods: {
+	    clickHandler: function clickHandler() {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 504:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    on: {
+	      "click": _vm.clickHandler
+	    }
+	  }, [_vm._s(_vm.text)])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 505:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(506)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(510)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/banners.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 506:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: ['ds', 'width', 'height', 'space', 'direction']
+	};
+
+/***/ },
+
+/***/ 507:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(508)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(509)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/banner.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 508:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: ['width', 'height', 'src', 'href'],
+	  data: function data() {
+	    return {
+	      quality: 'normal'
+	    };
+	  },
+	  methods: {
+	    clickHandler: function clickHandler() {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 509:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('image', {
+	    style: {
+	      width: _vm.width,
+	      height: _vm.height
+	    },
+	    attrs: {
+	      "src": _vm.src,
+	      "image-quality": _vm.quality
+	    },
+	    on: {
+	      "click": _vm.clickHandler
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 510:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.direction === 'row') ? _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_vm._l((_vm.ds), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: _vm.width,
+	        height: _vm.height,
+	        marginLeft: (i % _vm.ds.length ? _vm.space : 0)
+	      }
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.width,
+	        "height": _vm.height,
+	        "src": item.img,
+	        "href": item.url
+	      }
+	    })])
+	  })]) : _vm._e(), (_vm.direction === 'column') ? _h('div', [_vm._l((_vm.ds), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: _vm.width,
+	        height: _vm.height,
+	        marginTop: (i % _vm.ds.length ? _vm.space : 0)
+	      }
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.width,
+	        "height": _vm.height,
+	        "src": item.img,
+	        "href": item.url
+	      }
+	    })])
+	  })]) : _vm._e()])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 511:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"]
+	  }, [_h('image', {
+	    staticClass: ["banner"],
+	    attrs: {
+	      "src": _vm.ds.topBanner
+	    }
+	  }), _h('div', {
+	    staticClass: ["rule-container"]
+	  }, [_h('link', {
+	    staticStyle: {
+	      fontSize: "22px",
+	      color: "#ffffff",
+	      textAlign: "center"
+	    },
+	    attrs: {
+	      "text": "帮助",
+	      "href": _vm.ds.ruleLink
+	    }
+	  })]), _h('div', {
+	    staticClass: ["announce"]
+	  }, [_h('image', {
+	    staticClass: ["announce-hd"],
+	    attrs: {
+	      "src": _vm.ds.announceHdBanner
+	    }
+	  }), _h('banners', {
+	    staticStyle: {
+	      marginLeft: "6",
+	      marginRight: "6"
+	    },
+	    attrs: {
+	      "ds": _vm.ds.bannerItems,
+	      "direction": "row",
+	      "width": _vm.NUMBER_233,
+	      "height": _vm.NUMBER_172,
+	      "space": _vm.NUMBER_3
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 512:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(513)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(514)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(515)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/category.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 513:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "shop-list": {
+	    "flexDirection": "row"
+	  },
+	  "shop-img-container": {
+	    "marginRight": 2
+	  },
+	  "sub-item": {
+	    "position": "absolute",
+	    "width": 248,
+	    "height": 241,
+	    "alignItems": "center",
+	    "backgroundColor": "#ffffff"
+	  },
+	  "sub-item-bg": {
+	    "width": 248,
+	    "height": 86
+	  },
+	  "sub-item-title": {
+	    "position": "absolute",
+	    "left": 0,
+	    "top": 0,
+	    "width": 248,
+	    "textAlign": "center"
+	  },
+	  "industry-title": {
+	    "fontSize": 28,
+	    "color": "#484848",
+	    "textAlign": "center",
+	    "marginTop": 10,
+	    "height": 34
+	  },
+	  "industry-benefit": {
+	    "fontSize": 24,
+	    "color": "#999999",
+	    "textAlign": "center"
+	  }
+	}
+
+/***/ },
+
+/***/ 514:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var demoContent = {
+	  "main": [{
+	    "shopList": [{
+	      "id": "619123122",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Cl5MLVXXXXXTaXXXSutbFXXX.jpg",
+	      "finalScore": "0.884765209440857",
+	      "shopUrl": "http://liangpinpuzi.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "7724367"
+	    }, {
+	      "id": "880734502",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1HN2XLVXXXXbkXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8822246866512714",
+	      "shopUrl": "http://sanzhisongshu.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "147280915"
+	    }, {
+	      "id": "392147177",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1yq6dLVXXXXbXXpXXSutbFXXX.jpg",
+	      "finalScore": "0.8805854724243631",
+	      "shopUrl": "http://zhouheiya.tmall.com/campaign-3735-6.htm",
+	      "entityType": "SHOP",
+	      "brandId": "111496"
+	    }, {
+	      "id": "2081058060",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1w4jxLVXXXXaxXXXXtKXbFXXX.gif",
+	      "finalScore": "0.8640439551049249",
+	      "shopUrl": "http://rongxintang.tmall.com/campaign-3735-6.htm",
+	      "entityType": "SHOP",
+	      "brandId": "8709890"
+	    }],
+	    "finalScore": "4.657333333333334",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#fff5a3",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/newfood?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_12_735362&pos=1",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i1/TB1LHh4MXXXXXbsXpXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "1",
+	    "industryBenefit": null,
+	    "industryId": "12",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB1wshUMXXXXXXaXVXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "520557274",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1aMjXLVXXXXbUaXXXSutbFXXX.jpg",
+	      "finalScore": "0.8986382989845325",
+	      "shopUrl": "http://newbalance.tmall.com/campaign-3735-20.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20584"
+	    }, {
+	      "id": "746866993",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1pXG9LVXXXXaLXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8917855242977327",
+	      "shopUrl": "http://vans.tmall.com/campaign-3735-19.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29529"
+	    }, {
+	      "id": "1612713147",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1jHfXLVXXXXXPXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8895943606442631",
+	      "shopUrl": "http://dcshoecousa.tmall.com/campaign-3735-8.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3851662"
+	    }, {
+	      "id": "2379251418",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1sbLlLVXXXXbeXXXXSutbFXXX.jpg",
+	      "finalScore": "0.8881539668874383",
+	      "shopUrl": "http://baijinydhw.tmall.com/campaign-3735-2.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20579"
+	    }],
+	    "finalScore": "4.545333333333334",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#cbdbfe",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/ydhw?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_8_735362&pos=2",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1h4kzLVXXXXawXpXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "2",
+	    "industryBenefit": null,
+	    "industryId": "8",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB19VMjLVXXXXaeaXXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "811383091",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1q49ZLVXXXXaJXVXXSutbFXXX.jpg",
+	      "finalScore": "0.8723682716749482",
+	      "shopUrl": "http://tongrentangbj.tmall.com/campaign-3735-9.htm",
+	      "entityType": "SHOP",
+	      "brandId": "44652"
+	    }, {
+	      "id": "838914626",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1GQYbLVXXXXaXXVXXSutbFXXX.jpg",
+	      "finalScore": "0.5027131908086584",
+	      "shopUrl": "http://jouo.tmall.com/campaign-3735-3.htm",
+	      "entityType": "SHOP",
+	      "brandId": "14170081"
+	    }, {
+	      "id": "1077716829",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1rdW2LVXXXXagapXXSutbFXXX.jpg",
+	      "finalScore": "0.5015387557024262",
+	      "shopUrl": "http://wetcode.tmall.com/campaign-3735-14.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3675642"
+	    }, {
+	      "id": "1664976033",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Q.rpLVXXXXXiXpXXSutbFXXX.jpg",
+	      "finalScore": "0.5014897109669442",
+	      "shopUrl": "http://hanhoohzp.tmall.com/campaign-3735-17.htm",
+	      "entityType": "SHOP",
+	      "brandId": "78888695"
+	    }],
+	    "finalScore": "4.526666666666666",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#ffd1b6",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/getbeauty?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_2_735362&pos=3",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i4/TB1Djt9MXXXXXanXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "3",
+	    "industryBenefit": null,
+	    "industryId": "2",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i3/TB1_gVQMXXXXXX9XVXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "2153169655",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1nlK7LVXXXXaRXFXXSutbFXXX.jpg",
+	      "finalScore": "0.8820210808835905",
+	      "shopUrl": "http://ctkicks.tmall.com/campaign-3735-15.htm",
+	      "entityType": "SHOP",
+	      "brandId": "20584"
+	    }, {
+	      "id": "2784101115",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1RrS.LVXXXXcrXpXXSutbFXXX.jpg",
+	      "finalScore": "0.5930383227012586",
+	      "shopUrl": "http://tomtailor.tmall.com/campaign-3735-0.htm",
+	      "entityType": "SHOP",
+	      "brandId": "213474060"
+	    }, {
+	      "id": "2183813726",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1kmS_LVXXXXaBaXXXSutbFXXX.jpg",
+	      "finalScore": "0.5882558957771681",
+	      "shopUrl": "http://huaiyuan.tmall.com/campaign-3735-5.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29465"
+	    }, {
+	      "id": "1785908005",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1dB6zLVXXXXcJXXXXSutbFXXX.jpg",
+	      "finalScore": "0.5694211862124341",
+	      "shopUrl": "http://axonus.tmall.com/campaign-3735-1.htm",
+	      "entityType": "SHOP",
+	      "brandId": "115035841"
+	    }],
+	    "finalScore": "4.413955555555555",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#b9eaf2",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/guojixfs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_1_735362&pos=4",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1_T7ALVXXXXXOXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "4",
+	    "industryBenefit": null,
+	    "industryId": "1",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i2/TB1s7koLVXXXXafXFXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "2453054335",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1RX_vLVXXXXchXpXXSutbFXXX.jpg",
+	      "finalScore": "0.8463447899590267",
+	      "shopUrl": "http://nanshizixing.tmall.com/campaign-3735-2.htm",
+	      "entityType": "SHOP",
+	      "brandId": "844502560"
+	    }, {
+	      "id": "1041773234",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1Q7jpLVXXXXX8XpXXSutbFXXX.jpg",
+	      "finalScore": "0.560952734503075",
+	      "shopUrl": "http://dapu.tmall.com/campaign-3735-8.htm",
+	      "entityType": "SHOP",
+	      "brandId": "14493763"
+	    }, {
+	      "id": "300031438",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB13VC4LVXXXXarXVXXSutbFXXX.jpg",
+	      "finalScore": "0.5450674634839442",
+	      "shopUrl": "http://kangerxin.tmall.com/campaign-3735-10.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3781905"
+	    }, {
+	      "id": "92042735",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1PxYcLVXXXXasaXXXSutbFXXX.jpg",
+	      "finalScore": "0.5448023228053981",
+	      "shopUrl": "http://shuixing.tmall.com/campaign-3735-10.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3685660"
+	    }],
+	    "finalScore": "4.13",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#bbffe5",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/jfjs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_4_735362&pos=5",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i3/TB1jeoCLVXXXXcoXXXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "5",
+	    "industryBenefit": null,
+	    "industryId": "4",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i4/TB1C5.fLVXXXXb3aXXXeWjm2pXX-750-240.jpg"
+	  }, {
+	    "shopList": [{
+	      "id": "822428555",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1g46aLVXXXXcUXVXXSutbFXXX.jpg",
+	      "finalScore": "0.9183458776971917",
+	      "shopUrl": "http://playboyyd.tmall.com/campaign-3735-11.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29510"
+	    }, {
+	      "id": "196993935",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1pHG8LVXXXXbraXXXSutbFXXX.jpg",
+	      "finalScore": "0.9105525246667775",
+	      "shopUrl": "https://uniqlo.tmall.com/campaign-3735-56.htm",
+	      "entityType": "SHOP",
+	      "brandId": "29527"
+	    }, {
+	      "id": "505753958",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1WKYyLVXXXXXHXXXXSutbFXXX.jpg",
+	      "finalScore": "0.90750966370726",
+	      "shopUrl": "http://bonas.tmall.com/campaign-3735-11.htm",
+	      "entityType": "SHOP",
+	      "brandId": "3486580"
+	    }, {
+	      "id": "2113823580",
+	      "picUrl": "//img.alicdn.com/tps/i1/TB1itHkLVXXXXX9XFXXSutbFXXX.jpg",
+	      "finalScore": "0.5900977955635289",
+	      "shopUrl": "http://kafanya.tmall.com/campaign-3735-7.htm",
+	      "entityType": "SHOP",
+	      "brandId": "110684218"
+	    }],
+	    "finalScore": "4.088",
+	    "industryUrl": null,
+	    "entityType": "OTHER",
+	    "colour": "#ffc7c9",
+	    "industryTitle": null,
+	    "bannerUrl": "//pages.tmall.com/wow/act/15617/neiyi328?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_9_735362&pos=6",
+	    "leftBannerImg": "http://img.alicdn.com/tps/i1/TB1tl3tLVXXXXbbXFXXeWjm2pXX-750-240.jpg",
+	    "_pos_": "6",
+	    "industryBenefit": null,
+	    "industryId": "9",
+	    "industryImg": null,
+	    "rightBannerImg": "//img.alicdn.com/tps/i2/TB1AkIyLVXXXXbjXpXXeWjm2pXX-750-240.jpg"
+	  }],
+	  "sub": [{
+	    "shopList": null,
+	    "finalScore": "4.033333333333333",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/zbps?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_3_735362&pos=7",
+	    "entityType": "OTHER",
+	    "colour": "#bbffe5",
+	    "industryTitle": "珠宝配饰",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "7",
+	    "industryBenefit": "大牌1折秒杀",
+	    "industryId": "3",
+	    "industryImg": "//img.alicdn.com/tps/i1/TB1s5y.LVXXXXb.aXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.8773333333333335",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/dqc?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_15_735362&pos=8",
+	    "entityType": "OTHER",
+	    "colour": "#b4ebff",
+	    "industryTitle": "数码",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "8",
+	    "industryBenefit": "疯抢大牌新品",
+	    "industryId": "15",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1_xG.LVXXXXbWaXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.8359999999999994",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/man?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_6_735362&pos=9",
+	    "entityType": "OTHER",
+	    "colour": "#cbe9a9",
+	    "industryTitle": "男装",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "9",
+	    "industryBenefit": "新品低至9.9元",
+	    "industryId": "6",
+	    "industryImg": "//img.alicdn.com/tps/i1/TB1mO2qLVXXXXXiXFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.243333333333333",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/xihu?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_13_735362&pos=10",
+	    "entityType": "OTHER",
+	    "colour": "#cdffa4",
+	    "industryTitle": "洗护",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "10",
+	    "industryBenefit": "爆款1分钱抢",
+	    "industryId": "13",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1Ft_CLVXXXXX2XXXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "3.1553333333333335",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/myxfs?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_5_735362&pos=11",
+	    "entityType": "OTHER",
+	    "colour": "#f8e1ff",
+	    "industryTitle": "母婴童装",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "11",
+	    "industryBenefit": "跨店满299减40",
+	    "industryId": "5",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1c.HvLVXXXXXPXpXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "2.6739999999999995",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/nvzhuang?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_7_735362&pos=12",
+	    "entityType": "OTHER",
+	    "colour": "#d5cbe8",
+	    "industryTitle": "女装",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "12",
+	    "industryBenefit": "折后用券抢新",
+	    "industryId": "7",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1JdfsLVXXXXbRXpXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/mobilephone?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_14_735362&pos=13",
+	    "entityType": "OTHER",
+	    "colour": "#c5ffdf",
+	    "industryTitle": "手机",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "13",
+	    "industryBenefit": "1元抢优惠券",
+	    "industryId": "14",
+	    "industryImg": "//img.alicdn.com/tps/i4/TB1M3zhLVXXXXX4XVXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/xiangbaohuanxin?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_11_735362&pos=14",
+	    "entityType": "OTHER",
+	    "colour": "#ffccdc",
+	    "industryTitle": "箱包",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "14",
+	    "industryBenefit": "极致焕新尖货",
+	    "industryId": "11",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1gE6kLVXXXXcrXFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }, {
+	    "shopList": null,
+	    "finalScore": "0.0",
+	    "industryUrl": "//pages.tmall.com/wow/act/15617/newnv?abbucket=_AB-M1011_B14&acm=03654.1003.1.735362&aldid=KXPpnvEH&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.OTHER_10_735362&pos=15",
+	    "entityType": "OTHER",
+	    "colour": "#fff8ee",
+	    "industryTitle": "鞋履",
+	    "bannerUrl": null,
+	    "leftBannerImg": null,
+	    "_pos_": "15",
+	    "industryBenefit": "潮品精选鞋履",
+	    "industryId": "10",
+	    "industryImg": "//img.alicdn.com/tps/i3/TB1.qzpLVXXXXX.XFXXrdvGIFXX-248-155.jpg",
+	    "rightBannerImg": null
+	  }],
+	  "isFormal": "false",
+	  "exposureParam": "//ac.mmstat.com/1.gif?apply=vote&abbucket=_AB-M1011_B14&com=02&acm=03654.1003.1.735362&cod=03654&cache=U5revsTn&aldid=KXPpnvEH&logtype=4&abtest=_AB-LR1011-PR1011&scm=1003.1.03654.735362&ip=",
+	  "id": "03654"
+	};
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_248: 248,
+	      NUMBER_155: 155,
+	      NUMBER_373: 373,
+	      NUMBER_237: 237,
+	      NUMBER_186: 186,
+	      NUMBER_208: 208,
+	      NUMBER_750: 750,
+	      subItemBg: '//gw.alicdn.com/tps/TB1QzUfLVXXXXaOXVXXXXXXXXXX-248-86.jpg',
+	      items: [],
+	      subItems: []
+	    };
+	  },
+	  created: function created() {
+	    this.initData(demoContent);
+	  },
+	  methods: {
+	    getSubItemTop: function getSubItemTop(i) {
+	      return (i - i % 3) / 3 * (241 + 3);
+	    },
+	    getSubItemLeft: function getSubItemLeft(i) {
+	      return i % 3 * (248 + 3);
+	    },
+	    initData: function initData(content) {
+	      this.items = content.main;
+	      this.subItems = content.sub;
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 515:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticClass: ["item-container"]
+	  }, [_vm._l((_vm.items), function(i, item) {
+	    return _h('div', {
+	      style: {
+	        width: 750,
+	        paddingBottom: 14,
+	        backgroundColor: item.colour
+	      }
+	    }, [_h('div', [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_750,
+	        "height": _vm.NUMBER_237,
+	        "src": i % 2 === 0 ? item.leftBannerImg : item.rightBannerImg,
+	        "href": item.bannerUrl
+	      }
+	    })]), _h('div', {
+	      staticClass: ["shop-list"]
+	    }, [_vm._l((item.shopList), function(shop) {
+	      return _h('div', {
+	        staticClass: ["shop-img-container"]
+	      }, [_h('banner', {
+	        attrs: {
+	          "width": _vm.NUMBER_186,
+	          "height": _vm.NUMBER_208,
+	          "src": shop.picUrl,
+	          "href": shop.shopUrl
+	        }
+	      })])
+	    })])])
+	  })]), _h('div', {
+	    staticClass: ["sub-item-container"],
+	    style: {
+	      height: Math.round(_vm.subItems.length / 3) * (241 + 3)
+	    }
+	  }, [_vm._l((_vm.subItems), function(i, item) {
+	    return _h('div', {
+	      staticClass: ["sub-item"],
+	      style: {
+	        top: _vm.getSubItemTop(i),
+	        left: _vm.getSubItemLeft(i)
+	      }
+	    }, [_h('image', {
+	      staticClass: ["sub-item-bg"],
+	      attrs: {
+	        "src": _vm.subItemBg
+	      }
+	    }), _h('div', {
+	      staticClass: ["sub-item-img"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_248,
+	        "height": _vm.NUMBER_155,
+	        "src": item.industryImg,
+	        "href": item.industryUrl
+	      }
+	    })]), _h('div', {
+	      staticClass: ["sub-item-title"]
+	    }, [_h('text', {
+	      staticClass: ["industry-title"],
+	      attrs: {
+	        "href": item.industryUrl
+	      }
+	    }, [_vm._s(item.industryTitle)]), _h('text', {
+	      staticClass: ["industry-benefit"],
+	      attrs: {
+	        "href": item.industryUrl
+	      }
+	    }, [_vm._s(item.industryBenefit)])])])
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 516:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(517)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(518)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(519)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/coupon.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 517:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "wrapper": {
+	    "color": "#FF4550",
+	    "width": 750,
+	    "height": 230
+	  },
+	  "my-coupon": {
+	    "width": 180,
+	    "height": 39,
+	    "position": "absolute",
+	    "top": 15,
+	    "right": 149
+	  },
+	  "guides": {
+	    "height": 39,
+	    "width": 110,
+	    "position": "absolute",
+	    "top": 15,
+	    "right": 32
+	  },
+	  "lottery": {
+	    "width": 348,
+	    "height": 76,
+	    "position": "absolute",
+	    "top": 132,
+	    "right": 70
+	  },
+	  "info": {
+	    "fontSize": 18,
+	    "position": "absolute",
+	    "top": 84,
+	    "right": 70
+	  },
+	  "img": {
+	    "width": 750,
+	    "height": 230
+	  }
+	}
+
+/***/ },
+
+/***/ 518:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      currentStatus: '//img.alicdn.com/tps/i4/TB1cYBKMXXXXXayaXXXkxHk2pXX-750-228.jpg_q75.jpg'
+	    };
+	  },
+	  methods: {
+	    handleClick: function handleClick(e) {
+	      modal.toast({
+	        message: 'click',
+	        duration: 1
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 519:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["img"],
+	    attrs: {
+	      "src": _vm.currentStatus
+	    }
+	  }), _h('div', {
+	    staticClass: ["my-coupon"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["guides"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  }), _h('div', {
+	    staticClass: ["lottery"],
+	    on: {
+	      "click": _vm.handleClick
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 520:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(521)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(522)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(523)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/goods.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 521:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "slider": {
+	    "height": 652
+	  },
+	  "pannel": {
+	    "width": 750,
+	    "height": 592,
+	    "flexDirection": "row"
+	  },
+	  "middle-col": {
+	    "marginLeft": 4,
+	    "marginRight": 4,
+	    "width": 240,
+	    "height": 588
+	  }
+	}
+
+/***/ },
+
+/***/ 522:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_251: 251,
+	      NUMBER_240: 240,
+	      NUMBER_292: 292,
+	      NUMBER_588: 588
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 523:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return (!_vm.ds.isHide) ? _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('slider', {
+	    staticClass: ["slider"],
+	    attrs: {
+	      "show-indicators": "true",
+	      "auto-play": "true",
+	      "interval": "3000"
+	    }
+	  }, [_vm._l((_vm.ds.bannerItems), function(item) {
+	    return _h('div', {
+	      staticClass: ["pannel"]
+	    }, [_h('div', [_h('banner', {
+	      staticStyle: {
+	        marginBottom: "4"
+	      },
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img1,
+	        "href": item.url1
+	      }
+	    }), _h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img2,
+	        "href": item.url2
+	      }
+	    })]), _h('div', {
+	      staticClass: ["middle-col"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_240,
+	        "height": _vm.NUMBER_588,
+	        "src": item.img3,
+	        "href": item.url3
+	      }
+	    })]), _h('div', [_h('banner', {
+	      staticStyle: {
+	        marginBottom: "4"
+	      },
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img4,
+	        "href": item.url4
+	      }
+	    }), _h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_251,
+	        "height": _vm.NUMBER_292,
+	        "src": item.img5,
+	        "href": item.url5
+	      }
+	    })])])
+	  }), _h('indicator', {
+	    staticStyle: {
+	      position: "absolute",
+	      width: "714",
+	      height: "200",
+	      left: "10",
+	      bottom: "-80",
+	      itemSize: "20",
+	      itemColor: "#999999",
+	      itemSelectedColor: "#000000"
+	    }
+	  })])]) : _vm._e()
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 524:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(525)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(526)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(527)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/resource.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 525:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "big-banner-container": {
+	    "marginBottom": 4
+	  }
+	}
+
+/***/ },
+
+/***/ 526:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banners: __webpack_require__(505),
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_750: 750,
+	      NUMBER_200: 200,
+	      NUMBER_373: 373,
+	      NUMBER_224: 224,
+	      NUMBER_4: 4
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 527:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return (!_vm.ds.isHide) ? _h('div', [_h('div', {
+	    staticClass: ["big-banner-container"]
+	  }, [_h('banner', {
+	    attrs: {
+	      "width": _vm.NUMBER_750,
+	      "height": _vm.NUMBER_200,
+	      "src": _vm.ds.bigBannerImg,
+	      "href": _vm.ds.bigBannerUrl
+	    }
+	  })]), _h('banners', {
+	    attrs: {
+	      "direction": "row",
+	      "ds": _vm.ds.smallBannerItems,
+	      "width": _vm.NUMBER_373,
+	      "height": _vm.NUMBER_224,
+	      "space": _vm.NUMBER_4
+	    }
+	  })]) : _vm._e()
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 528:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(529)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(530)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(531)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/scene.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 529:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "item": {
+	    "width": 750,
+	    "height": 340,
+	    "marginBottom": 4
+	  },
+	  "item-img": {
+	    "position": "absolute",
+	    "left": 110,
+	    "top": 20
+	  },
+	  "right-item-img": {
+	    "position": "absolute",
+	    "right": 110,
+	    "top": 20
+	  },
+	  "benifit-img": {
+	    "position": "absolute",
+	    "right": 5,
+	    "top": 160
+	  },
+	  "right-benifit-img": {
+	    "position": "absolute",
+	    "left": 40,
+	    "top": 160
+	  },
+	  "small-item-container": {
+	    "width": 750
+	  },
+	  "small-item": {
+	    "position": "absolute",
+	    "width": 373,
+	    "height": 230,
+	    "flexDirection": "row"
+	  },
+	  "small-item-bg": {
+	    "width": 373,
+	    "height": 230
+	  },
+	  "small-item-img": {
+	    "position": "absolute",
+	    "left": 12,
+	    "top": 12
+	  },
+	  "small-benifit-img": {
+	    "position": "absolute",
+	    "right": 0,
+	    "top": 65
+	  }
+	}
+
+/***/ },
+
+/***/ 530:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var demoContent = [{
+	  "id": "1111",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1392&scm=1003.1.03653.SUB_1111_740603&pos=1",
+	  "_s_": "d",
+	  "itemImg": "https://img.alicdn.com/tps/TB1c7t.MXXXXXchXXXXXXXXXXXX-182-206.jpg",
+	  "sceneCat": "50012010,50012027,50012032,50007003,50008881,50008883,1623,162116,50010850,123216004",
+	  "finalScore": "10000.0",
+	  "_pos_": "1",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/TB1Zgl2MXXXXXaYXFXXXXXXXXXX-170-100.png"
+	}, {
+	  "id": "1396",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1396&scm=1003.1.03653.SUB_1396_740603&pos=2",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i2/TB1O1VfMXXXXXX0aXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50010368,50011892,50011894,50013794,50010792,50010790,50010790,121434025,121396024,50010793,50010789,50010793,121386035,121392037,121458034,121392036,121482027,121392015,121368014,121418013,121392016,50011982,122690003,302910,50012010,122654005,50012019,50012825,50012027,50012042,50011744,50012906,50012907,50008881,50008883,50008882?,50012784?,50022889,50022728,50013228,50013896,50014775,50019578,50014822,50026394,50019694,50019279,50019272,50014079,50014078,50014076,50014077,50017238,121464011,121468014,50019130,50019127,50019126,50019128,50019125,50015984,50014803,50014802,50015980,50014788,50014787,50019526,50014791,50019520,50013932,50014677,50015978,50014786,50014785,50522001,50014493,50023100,121418021,121388027,121424021,121418020,121368020,50012036,50012044,50012043,50010368, 50011892, 50019274,50012044,50012048,50012043,50013228,50013238,50011726,50019279,50015984,50014803,50014802,50019526,50014791,50019520,50013932,50014677,50019526,50013314,50023341,50016752,50016749,50016747,50016744,50016741,50016740,50016739,50016738,50016737,50016769,50016763,50016750,50007003,302910,50012010,50012032,50012033,50011745,50011746,50011894,121458034,121756003,121426033,50011982,50011979,121390006,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,1512,123534001,14,50008090,50012341,50132002,50012342,50012343,50012345,50012346,50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,121450007,50013697,50010218,50005960,50005962,50012820,50012406,50023620,50023605,50008829,50024064,50023440,50008687,124392001,50023771,50006804,50012410,124482010,121398023,50023789,50011975",
+	  "finalScore": "10000.0",
+	  "_pos_": "2",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i1/TB1cp4sMXXXXXbLXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1616",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1616&scm=1003.1.03653.SUB_1616_740603&pos=3",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1dlEALVXXXXbxXpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50009032,50007003,302910,1512,124688012,124986002,124942005,50023722,50010368,50011892,50011894",
+	  "finalScore": "10000.0",
+	  "_pos_": "3",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i3/TB1fxonLVXXXXXUaXXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "16424",
+	  "sceneUrl": "https://brand.tmall.com/mobilestreet/subject.htm?id=16424&acm=03653.1003.1.740603&aldid=VyrSqx06&spm=0.0.0.0.Wv8ion&scm=1003.1.03653.SUB_16424_740603&pos=4",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1.i2_LVXXXXbrXpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50012043,50012036,50010850,50000671,1622,50000852,162104,50000697,162205,162116,50012027,50012032,50012028,50012033,50012042,50008882,50012772,50006846,50008881,50000436,50011123,3035,50010167,50000557,50010158,50010159,50010402,50010160,50011980,50011993,121390006,50011978,50011977,50011979,121454013,50011745",
+	  "finalScore": "6.729749999999999",
+	  "_pos_": "4",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i2/TB1bhH5LVXXXXapXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "16425",
+	  "sceneUrl": "https://brand.tmall.com/mobilestreet/subject.htm?id=16360&acm=03653.1003.1.740603&aldid=VyrSqx06&spm=0.0.0.0.MttFEC&scm=1003.1.03653.SUB_16425_740603&pos=5",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i3/TB15ywbLVXXXXcdXXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50012043,50012036,50010850,50000671,1622,50000852,162104,50000697,162205,162116,50012027,50012032,50012028,50012033,50012042,50008882,50012772,50006846,50008881,50000436,50011123,3035,50010167,50000557,50010158,50010159,50010402,50010160,50011980,50011993,121390006,50011978,50011977,50011979,121454013,50011745",
+	  "finalScore": "6.729749999999999",
+	  "_pos_": "5",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i1/TB1JBLYLVXXXXXlXVXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1625",
+	  "sceneUrl": "https://pages.tmall.com/wow/fushi/act/gf-chaoliu?acm=03653.1003.1.740603&aldid=VyrSqx06&scm=1003.1.03653.SUB_1625_740603&pos=6",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/bao/uploaded/i2/TB1Gd21KVXXXXXZXVXXXXXXXXXX_!!0-item_pic.jpg",
+	  "sceneCat": "50012043,50012036,50010850,50000671,1622,50000852,162104,50000697,162205,162116,50012027,50012032,50012028,50012033,50012042,50008882,50012772,50006846,50008881,50000436,50011123,3035,50010167,50000557,50010158,50010159,50010402,50010160,50011980,50011993,121390006,50011978,50011977,50011979,121454013,50011982,50011991,50012906,50011744,50011745,50011743,50012907,50011746,50010815,121460005,50013794,122438001,121398006,121386023,50010808",
+	  "finalScore": "6.729749999999999",
+	  "_pos_": "6",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i3/TB1qxXzMXXXXXcjXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1392",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1392&scm=1003.1.03653.SUB_1392_740603&pos=7",
+	  "_s_": "d",
+	  "itemImg": "https://img.alicdn.com/tps/TB1c7t.MXXXXXchXXXXXXXXXXXX-182-206.jpg",
+	  "sceneCat": "50006842,50006840,50008881,50008883,50008882,50008884,50012774,50012775,50012776,50012781,5000888,50012766,50012771,50012772,50010404,50010368, 50011892, 50011894,124688012,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50008882,50008886,50008885,50012777,50012778,50011977,50011978,50011979,50011980,50011982,50011990,50011999,50012000,50011993,50011996,50011997,121366011,121484009,121368010,121390006,121398029,121404030,121404031,121408040,121410035,121412033,121414041,121418013,121454013,121410013,121422013,121484013,50010789,50010790,50010792,50010793,50010794,50010796,50010797,50010798,50010801,50010803,50010805,50010807,50010808,50010815,121410007,121426007,121452004,121460005,50012341,50132002,50012342,50012343,50012345,50012346,50013189,50010527,121394006,50013618,50010537,50012424,121452038,121484044,50010540,50010548,50024769,121366037,121458036,121392038,121420035,121364028,121468026,121472031,121476036,121470042,121418032,121410036,121472032,121420032,121470040,121384032,121460028,121448028,121400030,121424024,121482025,121418031,121402028,121388035,121460029,121400028,121400029,121418030,121476034,121478031,121448029,121480030,121366035,121424025,121426030,121484030,121412031,121384033,121424023,121402027,121408039,121420033,121452028,121466040,121416029,121482028,121420034,121396046,121422052,121370037,121424031,21364043,121472040,121412045,121424032,125054002,125074007,125074008,125104003,125080003,125024006,125080004",
+	  "finalScore": "4.4951428571428576",
+	  "_pos_": "7",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/TB1Zgl2MXXXXXaYXFXXXXXXXXXX-170-100.png"
+	}, {
+	  "id": "1395",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1395&scm=1003.1.03653.SUB_1395_740603&pos=8",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i2/TB1p4NcMXXXXXbGaXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50008881,50008883,50008882,50008884,50012774,50012775,50012776,50012781,50008886,50012766,50012771,50012772,50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,16240,50012773,50006846,50010394,50008888,50008890,50008889,50012784,50012785,50012786,50012787,50008885,50012777,50012778,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124942005,50010368,50011892,50011894,50023751,121366037,121458036,121392038,121420035,121364028,121468026,121400029,121418030,121478031,121480030,121366035,121424025,121426030,121484030,121412031,125054002,125074007,125074008,125104003,125080003,125024006,125080004,121400030,121424024,121482025,121418031,121402028,121388035",
+	  "finalScore": "4.465166666666667",
+	  "_pos_": "8",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i1/TB1ySNtMXXXXXamXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1394",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1394&scm=1003.1.03653.SUB_1394_740603&pos=9",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1Ns8eMXXXXXb1aXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50010850,50000671,162201,50022566,50007068,50026651,50000852,162104,162116,162205,1623,123216004,162404,162401,50011412,50011411,162402,50008903,50011413,162403,50000697,1629,50011277,121412004,50008897,50008901,50008899,50013194,50008904,50008905,50008898,162103,50008900,50013196,121434004,50005065,162702,162701,162703,1636,124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,50011740,50006843,50006842,124986002,50010368, 50011892,50011894,121480030,121366035,121424025,121426030,121484030,121412031",
+	  "finalScore": "4.309925925925926",
+	  "_pos_": "9",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i3/TB1ZEXfMXXXXXapaXXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1610",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1610&scm=1003.1.03653.SUB_1610_740603&pos=10",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i3/TB1ONckLVXXXXbJaXXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "121484044,121452038,50012342,50012027,50012032,50006843,50010850,50000671,162104,1623,50011277,162116,123216004,50008898,121366037,121458036,121392038,121420035,121364028,121468026,121472031,121476036,121470042,121418032,121410036,121472032,121420032,121470040,121384032,121460028,121448028,121400030,121424024,121482025,121418031,121402028,121388035,121460029,121400028,121400029,121418030,121476034,121478031,121448029,121480030,121366035,121424025,121426030,121484030,121412031,121384033,121424023,121402027,121408039,121420033,121452028,121466040,121416029,121482028,121420034,121396046,121422052,121370037,121424031,21364043,121472040,121412045,121424032,125054002,125074007,125074008,125104003,125080003,125024006,125080004",
+	  "finalScore": "4.293333333333334",
+	  "_pos_": "10",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i2/TB1RzwFLVXXXXXsXpXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1619",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1619&scm=1003.1.03653.SUB_1619_740603&pos=11",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i3/TB1eagyLVXXXXaiXFXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "124730001,50001748,50011130,124730001,50001748,50011130,50011129,50010160,50011161,50011159,50010159,50010158,50011127,3035,50010167,50000557,50011123,50010402,50000436,50011153,122654005,50011740,50009032,124688012,213202,121396029,121476023,121410029,213203,50023326,213205,50022686,50023293,50466023,50024999,50016885,50011894",
+	  "finalScore": "4.23",
+	  "_pos_": "11",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i4/TB1j0AxLVXXXXaRXFXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1613",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1613&scm=1003.1.03653.SUB_1613_740603&pos=12",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i2/TB1WssFLVXXXXXUXpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50023108,50022893,50022892,50022890,50013228,50019520,50017120,50019560,50017129,50017128,50017127,50017126,50017125,50017124,50017123,50017122,50017121,50020039,50020038,50017119,50019559,50017110,50017108,50017107,50017097,50017096,50017095,50017094,50017093,50017092,50012036,50012041",
+	  "finalScore": "4.2186666666666675",
+	  "_pos_": "12",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i1/TB1Rg.qLVXXXXbqXVXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1614",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1614&scm=1003.1.03653.SUB_1614_740603&pos=13",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i1/TB1KzUxLVXXXXajXFXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50013238,50011726,50022893,50022892,50022890,50013228,50017129,50020038,50017119,50019559,50017102,50017110,50017097,50019707,50019555,50016677,50018317,50016675,50016673,50016672,50016671,50016670,50016732,50016669,50016668,50016667,50016666,50016665,50016683,50016682,50016608,50016607,50016637,50016638,50012036,50012043",
+	  "finalScore": "4.216",
+	  "_pos_": "13",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i2/TB1WyouLVXXXXXcXVXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1397",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1397&scm=1003.1.03653.SUB_1397_740603&pos=14",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i4/TB1dCxvMXXXXXc1XpXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "122846004,50020776,50024799,50024801,50024921,50002794,50020778,50002792,50002791,50002793,50003942,50005500,50005497,50001692,50005495,50005496,50005503,50005498,50005499,50005501,50005502,50003455,50003457,122904003,50023091,50020770,50008863,50005507,121414011,50020768,50022701,50008862,121420012,50020766,50020764,121398012,121380011,50020751,50020676,50024945,50020720,50002790,50020730,50001866,50020678,121476008,121458013,50002795,121364011,50005505,121422014,50024943,50000583,50000582,50000584,213002,50005033,50000563,50008607,50006988,50008608,50024601,50024602,50012051,50001871,122854005,121458010,121452006,121416008,50008779,50002777,121394007,121386009,50010825,50013810,121434010,50001865,50008565,50008246,50017192,121404045,121368009,121462014,50019372,50008248,121418011,50008249,50017193,50008252,50008251,50000512,121364047,122846004,50020776,50024799,50024801,50024921,50002794,50020778,50002792,50002791,50002793,50003942,50005500,50005497,50001692,50005495,50005496,50005503,50005498,50005499,50005501,50005502,50003455,50003457,122904003,50023091,50020770,50008863,50005507,121414011,50020768,50022701,50008862,121420012,50020766,50020764,121398012,121380011,50020751,50020676,50024945,50020720,50002790,50020730,50001866,50020678,121476008,121458013,50002795,121364011,50005505,121422014,50024943,50000583,50000582,50000584,213002,50005033,50000563,50008607,50006988,50008608,50024601,50024602,50012051,50020835,50021907,121472021,50021902,50005919,50002045,122724003,122652007,121408025,122688004,50021924,50021923,50000561,50011738,122676005,121396026,121388028,50003338,50021915,50011415,50011416,50003454,50021928,50021930,50021929,50021931,50024939,121384024,121472020,50020902,50020903,50020904,50020905,50021888,50021889,50021890,50023266,122960005,50012001,50011999,50012004,50012000,50012006,121394024,121412033,121394025,121450036,121472007,121480009,121388013,121466009,121484012,121366014,121434014,121422012,121476006,121396013,50011997,121434013,122646001,121458012,121468012,121368013,50011979,121366015,121406016,121456012,121366011,121414010,121460006,121368014,121388016,121396013,121400010,121470011,121474011,121478009,124760009,124768010,124822006,121482009,122430002,121454014,121392016,50001871,122854005,121458010,121452006,121416008,50008779,50002777,121394007,121386009,50010825,50013810,121434010,50001865,50008565,50008246,50017192,121404045,121368009,121462014,50019372,50008248,121418011,50008249,50017193,50008252,50008251,50000512,121364047,122846004,50020776,50024799,50024801,50024921,50002794,50020778,50002792,50002791,50002793,50003942,50005500,50005497,50001692,50005495,50005496,50005503,50005498,50005499,50005501,50005502,50003455,50003457,122904003,50023091,50020770,50008863,50005507,121414011,50020768,50022701,50008862,121420012,50020766,50020764,121398012,121380011,50020751,50020676,50024945,50020720,50002790,50020730,50001866,50020678,121476008,121458013,50002795,121364011,50005505,121422014,50024943,50000583,50000582,50000584,213002,50005033,50000563,50008607,50006988,50008608,50024601,50024602,50012051",
+	  "finalScore": "3.4206666666666665",
+	  "_pos_": "14",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i3/TB1ZARnMXXXXXaGXVXX3bpXTXXX-170-100.png"
+	}, {
+	  "id": "1608",
+	  "sceneUrl": "https://pages.tmall.com/wow/act/15617/scene?acm=03653.1003.1.740603&aldid=VyrSqx06&wh_id=1608&scm=1003.1.03653.SUB_1608_740603&pos=15",
+	  "_s_": "d",
+	  "itemImg": "//img.alicdn.com/tps/i3/TB1xA3jLVXXXXXqapXXKofZZpXX-182-206.jpg",
+	  "sceneCat": "50012010,50012027,50012032,50007003,50008881,50008883,1623,162116,50010850,123216004",
+	  "finalScore": "0.0",
+	  "_pos_": "15",
+	  "entityType": "SUB",
+	  "benefitImg": "//img.alicdn.com/tps/i2/TB1WvoALVXXXXcdXpXX3bpXTXXX-170-100.png"
+	}];
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_186: 186,
+	      NUMBER_206: 206,
+	      NUMBER_373: 373,
+	      NUMBER_230: 230,
+	      NUMBER_170: 170,
+	      NUMBER_100: 100,
+	      NUMBER_750: 750,
+	      NUMBER_300: 300,
+	      NUMBER_340: 340,
+	      smallItemBg: 'https://gw.alicdn.com/tps/TB1oBIeLVXXXXatXpXXXXXXXXXX-373-230.jpg',
+	      items: [],
+	      smallItems: [],
+	      sceneBgs: ['https://gw.alicdn.com/tps/TB1xBT8LVXXXXbYXVXXXXXXXXXX-750-340.jpg', 'https://gw.alicdn.com/tps/TB1RoEkLVXXXXaMXpXXXXXXXXXX-750-340.jpg', 'https://gw.alicdn.com/tps/TB1DiEpLVXXXXa7XXXXXXXXXXXX-750-340.jpg']
+	    };
+	  },
+	  created: function created() {
+	    this.items = demoContent.slice(0, 3);
+	    this.smallItems = demoContent.slice(3);
+	  },
+	  methods: {
+	    getItemTop: function getItemTop(i) {
+	      return (i - i % 2) / 2 * (230 + 4);
+	    },
+	    getItemLeft: function getItemLeft(i) {
+	      return i % 2 * (373 + 4);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 531:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticClass: ["small-item-container"],
+	    style: {
+	      height: Math.round(_vm.smallItems.length / 2) * 234
+	    }
+	  }, [_vm._l((_vm.smallItems), function(i, item) {
+	    return _h('div', {
+	      staticClass: ["small-item"],
+	      style: {
+	        top: _vm.getItemTop(i),
+	        left: _vm.getItemLeft(i)
+	      }
+	    }, [_h('div', [_h('image', {
+	      staticClass: ["small-item-bg"],
+	      attrs: {
+	        "src": _vm.smallItemBg
+	      }
+	    })]), _h('div', {
+	      staticClass: ["small-item-img"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_186,
+	        "height": _vm.NUMBER_206,
+	        "src": item.itemImg,
+	        "href": item.sceneUrl
+	      }
+	    })]), _h('div', {
+	      staticClass: ["small-benifit-img"]
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_170,
+	        "height": _vm.NUMBER_100,
+	        "src": item.benefitImg,
+	        "href": item.sceneUrl
+	      }
+	    })])])
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 532:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(533)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(534)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(535)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/match.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 533:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "tm-banner": {
+	    "bottom": 4
+	  }
+	}
+
+/***/ },
+
+/***/ 534:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banner: __webpack_require__(507)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {};
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_750: 750,
+	      NUMBER_373: 373,
+	      NUMBER_240: 240,
+	      NUMBER_200: 200,
+	      NUMBER_4: 4
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 535:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), (_vm.ds.isShowTmSpecBanner && _vm.ds.tmSpecBanner) ? _h('div', {
+	    staticClass: ["tm-banner"]
+	  }, [_h('banner', {
+	    attrs: {
+	      "width": _vm.NUMBER_750,
+	      "height": _vm.NUMBER_200,
+	      "src": _vm.ds.tmSpecBanner.img,
+	      "href": _vm.ds.tmSpecBanner.url
+	    }
+	  })]) : _vm._e(), _vm._l((_vm.ds.bannerItems), function(item) {
+	    return _h('div', {
+	      style: {
+	        flexDirection: 'row',
+	        marginBottom: _vm.NUMBER_4
+	      }
+	    }, [_h('div', {
+	      style: {
+	        marginRight: _vm.NUMBER_4
+	      }
+	    }, [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_373,
+	        "height": _vm.NUMBER_240,
+	        "src": item.leftImg,
+	        "href": item.leftUrl
+	      }
+	    })]), _h('div', [_h('banner', {
+	      attrs: {
+	        "width": _vm.NUMBER_373,
+	        "height": _vm.NUMBER_240,
+	        "src": item.rightImg,
+	        "href": item.rightUrl
+	      }
+	    })])])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 536:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(537)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(538)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(539)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/include/brand.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 537:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "width": 750,
+	    "height": 100
+	  },
+	  "container": {
+	    "marginBottom": 4,
+	    "backgroundColor": "#C0BABC"
+	  }
+	}
+
+/***/ },
+
+/***/ 538:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    banners: __webpack_require__(505)
+	  },
+	  props: {
+	    ds: {
+	      default: function _default() {
+	        return {
+	          bannerItems: []
+	        };
+	      }
+	    }
+	  },
+	  data: function data() {
+	    return {
+	      NUMBER_742: 742,
+	      NUMBER_230: 230,
+	      NUMBER_4: 4
+	    };
+	  },
+	  computed: {
+	    bannerItems: function bannerItems() {
+	      return this.ds.bannerItems.slice(0, 8);
+	    }
+	  },
+	  created: function created() {
+	    var bannerItems = this.ds.bannerItems;
+	    bannerItems.sort(function () {
+	      return Math.random() - 0.5;
+	    });
+	    for (var i = 0; i < bannerItems.length; i++) {
+	      var item = bannerItems[i];
+	      if (i % 2 === 0) {
+	        item.img = item.leftImg;
+	        item.url = item.rightUrl;
+	      } else {
+	        item.img = item.rightImg;
+	        item.url = item.rightUrl;
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 539:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["container"]
+	  }, [(_vm.ds.floorTitle) ? _h('image', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "src": _vm.ds.floorTitle
+	    }
+	  }) : _vm._e(), _h('div', {
+	    staticStyle: {
+	      marginLeft: "4",
+	      marginRight: "4"
+	    }
+	  }, [_h('banners', {
+	    attrs: {
+	      "direction": "column",
+	      "ds": _vm.bannerItems,
+	      "width": _vm.NUMBER_742,
+	      "height": _vm.NUMBER_230,
+	      "space": _vm.NUMBER_4
+	    }
+	  })])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 540:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', {
+	    staticClass: ["content"]
+	  }, [_h('refresh', {
+	    staticClass: ["refresh"],
+	    staticStyle: {
+	      flexDirection: "row"
+	    },
+	    attrs: {
+	      "display": _vm.displayRefresh
+	    },
+	    on: {
+	      "refresh": _vm.handleRefresh
+	    }
+	  }, [_h('loading-indicator'), _h('text', {
+	    staticStyle: {
+	      marginLeft: "36px",
+	      color: "#eee"
+	    }
+	  }, ["下拉刷新..."])]), (_vm.show0) ? _h('headlines', {
+	    attrs: {
+	      "ds": _vm.showData.header
+	    }
+	  }) : _vm._e(), (_vm.show0) ? _h('category', {
+	    attrs: {
+	      "ds": _vm.showData.category
+	    }
+	  }) : _vm._e(), (_vm.show1) ? _h('coupon', {
+	    attrs: {
+	      "ds": _vm.showData.coupon
+	    }
+	  }) : _vm._e(), (_vm.show1) ? _h('goods', {
+	    attrs: {
+	      "ds": _vm.showData.goods
+	    }
+	  }) : _vm._e(), (_vm.show1) ? _h('resource', {
+	    attrs: {
+	      "ds": _vm.showData.resource
+	    }
+	  }) : _vm._e(), (_vm.show1) ? _h('scene', {
+	    attrs: {
+	      "ds": _vm.showData.scene
+	    }
+	  }) : _vm._e(), (_vm.show2) ? _h('match', {
+	    attrs: {
+	      "ds": _vm.showData.match
+	    }
+	  }) : _vm._e(), (_vm.show2) ? _h('brand', {
+	    attrs: {
+	      "ds": _vm.showData.brand
+	    }
+	  }) : _vm._e(), _h('loading', {
+	    staticClass: ["loading"],
+	    attrs: {
+	      "display": _vm.displayLoading
+	    },
+	    on: {
+	      "loading": _vm.handleLoading
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      color: "#eee"
+	    }
+	  }, ["加载更多..."])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/showcase/progress.js b/android/playground/app/src/main/assets/vue/showcase/progress.js
new file mode 100644
index 0000000..8ed8cf0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/showcase/progress.js
@@ -0,0 +1,336 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(541)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(542)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/showcase/progress.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 541:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var INC = 20;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      fullW: 600,
+	      w: 40
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383)
+	  },
+	  created: function created() {
+	    var me = this;
+	    setInterval(function () {
+	      if (me.w >= me.fullW) {
+	        me.w = 0;
+	      }
+	      me.w = me.w + INC >= me.fullW ? me.fullW : me.w + INC;
+	    }, 33);
+	  }
+	};
+
+/***/ },
+
+/***/ 542:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Basic",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    style: {
+	      width: _vm.fullW,
+	      borderColor: '#333',
+	      borderWidth: 1,
+	      borderStyle: 'solid'
+	    }
+	  }, [_h('div', {
+	    style: {
+	      width: _vm.w,
+	      height: 60,
+	      backgroundColor: '#333'
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/style/index.js b/android/playground/app/src/main/assets/vue/style/index.js
new file mode 100644
index 0000000..a1e6cd0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/index.js
@@ -0,0 +1,1566 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(543)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(544)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(557)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/index.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 543:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "bg-item": {
+	    "width": 690,
+	    "marginBottom": 10
+	  }
+	}
+
+/***/ },
+
+/***/ 544:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleBox: __webpack_require__(545),
+	    styleFlex: __webpack_require__(553),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 545:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(546)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(547)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(552)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-box.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 546:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "box": {
+	    "backgroundColor": "#f5f5f5",
+	    "width": 260,
+	    "height": 260,
+	    "paddingLeft": 40,
+	    "paddingTop": 40,
+	    "paddingRight": 40,
+	    "paddingBottom": 40,
+	    "marginLeft": 40,
+	    "marginTop": 40,
+	    "marginRight": 40,
+	    "marginBottom": 40,
+	    "borderWidth": 40,
+	    "borderColor": "#333333",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 547:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 552:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Box Model",
+	      "padding-body": "0",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["box"]
+	  }, ["Box"])]), _h('panel', {
+	    attrs: {
+	      "title": "border",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "border-width",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "2px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "10px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderLeftWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderBottomWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-color",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#ddd"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "red"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-style",
+	      "type": ""
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "10px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "just support four edges"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dashed",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": "",
+	      "type": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dotted",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-radius",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      width: "75px",
+	      borderRadius: "38px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderTopLeftRadius: "20px",
+	      borderTopRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderBottomLeftRadius: "20px",
+	      borderBottomRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 553:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(554)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(555)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(556)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-flex.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 554:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row",
+	    "marginBottom": 10
+	  },
+	  "row-align": {
+	    "height": 160,
+	    "borderWidth": 3,
+	    "borderColor": "#dddddd",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 555:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 556:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "flex-direction",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "row"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "column"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "justify-content",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "space-between"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "align-items",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "stretch"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex",
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "value": "flex:2"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:2"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "3"
+	    },
+	    attrs: {
+	      "value": "flex:3"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex-wrap",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "wrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:wrap"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "nowrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:nowrap"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 557:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('style-box'), _h('style-flex'), _h('panel', {
+	    attrs: {
+	      "title": "opacity",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      opacity: "1"
+	    },
+	    attrs: {
+	      "value": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.9"
+	    },
+	    attrs: {
+	      "value": "0.9"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.5"
+	    },
+	    attrs: {
+	      "value": "0.5"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      opacity: "0.2"
+	    },
+	    attrs: {
+	      "value": "0.2"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "background-color",
+	      "type": "primary"
+	    }
+	  }, [_h('div', [_h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "#333"
+	    },
+	    attrs: {
+	      "value": "#333"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "#333333"
+	    },
+	    attrs: {
+	      "value": "#333333"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "rgb(238, 162, 54)"
+	    },
+	    attrs: {
+	      "value": "rgb()"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "rgba(238, 162, 54, 0.5)"
+	    },
+	    attrs: {
+	      "value": "rgba()"
+	    }
+	  }), _h('style-item', {
+	    staticClass: ["bg-item"],
+	    staticStyle: {
+	      backgroundColor: "red"
+	    },
+	    attrs: {
+	      "value": "red"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/style/style-box.js b/android/playground/app/src/main/assets/vue/style/style-box.js
new file mode 100644
index 0000000..d018835
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-box.js
@@ -0,0 +1,780 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(546)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(547)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(552)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-box.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 546:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "box": {
+	    "backgroundColor": "#f5f5f5",
+	    "width": 260,
+	    "height": 260,
+	    "paddingLeft": 40,
+	    "paddingTop": 40,
+	    "paddingRight": 40,
+	    "paddingBottom": 40,
+	    "marginLeft": 40,
+	    "marginTop": 40,
+	    "marginRight": 40,
+	    "marginBottom": 40,
+	    "borderWidth": 40,
+	    "borderColor": "#333333",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 547:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    tip: __webpack_require__(393),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 552:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "Box Model",
+	      "padding-body": "0",
+	      "type": "primary"
+	    }
+	  }, [_h('text', {
+	    staticClass: ["box"]
+	  }, ["Box"])]), _h('panel', {
+	    attrs: {
+	      "title": "border",
+	      "type": "primary"
+	    }
+	  }, [_h('panel', {
+	    attrs: {
+	      "title": "border-width",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "2px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "10px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderLeftWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderBottomWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-color",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#ddd"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "red"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-style",
+	      "type": ""
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "10px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "just support four edges"
+	    }
+	  }), _h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      borderStyle: "solid",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dashed",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": "",
+	      "type": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderStyle: "dotted",
+	      borderWidth: "4px",
+	      borderColor: "#333"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "border-radius",
+	      "type": ""
+	    }
+	  }, [_h('div', {
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      width: "75px",
+	      borderRadius: "38px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderTopLeftRadius: "20px",
+	      borderTopRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      borderBottomLeftRadius: "20px",
+	      borderBottomRightRadius: "20px"
+	    },
+	    attrs: {
+	      "value": ""
+	    }
+	  })])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/style/style-flex.js b/android/playground/app/src/main/assets/vue/style/style-flex.js
new file mode 100644
index 0000000..b5e4e82
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-flex.js
@@ -0,0 +1,919 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(554)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(555)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(556)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-flex.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 548:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 554:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "row": {
+	    "flexDirection": "row",
+	    "marginBottom": 10
+	  },
+	  "row-align": {
+	    "height": 160,
+	    "borderWidth": 3,
+	    "borderColor": "#dddddd",
+	    "borderStyle": "solid"
+	  }
+	}
+
+/***/ },
+
+/***/ 555:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    panel: __webpack_require__(383),
+	    styleItem: __webpack_require__(548)
+	  }
+	};
+
+/***/ },
+
+/***/ 556:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('panel', {
+	    attrs: {
+	      "title": "flex-direction",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "row"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "row"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexDirection: "column"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "column"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "type": "1"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "justify-content",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      justifyContent: "space-between"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "align-items",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "flex-end"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "center"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row", "row-align"],
+	    staticStyle: {
+	      alignItems: "stretch"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex",
+	      "type": "1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0"
+	    },
+	    attrs: {
+	      "value": "no flex"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "value": "flex:2"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      alignItems: "flex-start"
+	    }
+	  }, [_h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "1"
+	    },
+	    attrs: {
+	      "value": "flex:1"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "2"
+	    },
+	    attrs: {
+	      "type": "1",
+	      "value": "flex:2"
+	    }
+	  }), _h('style-item', {
+	    staticStyle: {
+	      marginRight: "0",
+	      flex: "3"
+	    },
+	    attrs: {
+	      "value": "flex:3"
+	    }
+	  })])]), _h('panel', {
+	    attrs: {
+	      "title": "flex-wrap",
+	      "type": "primary"
+	    }
+	  }, [_h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "wrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:wrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:wrap"
+	    }
+	  })]), _h('div', {
+	    staticClass: ["row"],
+	    staticStyle: {
+	      flexWrap: "nowrap",
+	      backgroundColor: "grey",
+	      padding: "10"
+	    }
+	  }, [_h('style-item', {
+	    attrs: {
+	      "value": "1:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "2:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "3:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "4:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "5:nowrap"
+	    }
+	  }), _h('style-item', {
+	    attrs: {
+	      "value": "6:nowrap"
+	    }
+	  })])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/style/style-item.js b/android/playground/app/src/main/assets/vue/style/style-item.js
new file mode 100644
index 0000000..35b36fb
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/style/style-item.js
@@ -0,0 +1,155 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(549)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(550)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(551)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/style/style-item.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 549:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item": {
+	    "marginRight": 10,
+	    "width": 160,
+	    "height": 75,
+	    "paddingLeft": 8,
+	    "paddingRight": 8,
+	    "paddingTop": 8,
+	    "paddingBottom": 8
+	  },
+	  "txt": {
+	    "color": "#eeeeee"
+	  }
+	}
+
+/***/ },
+
+/***/ 550:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    value: { default: '' },
+	    type: { default: '0' } // 0, 1
+	  },
+	  computed: {
+	    bgColor: function bgColor() {
+	      return this.type == '1' ? '#7BA3A8' : '#BEAD92';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 551:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item", "txt"],
+	    style: {
+	      backgroundColor: _vm.bgColor
+	    },
+	    attrs: {
+	      "value": _vm.value
+	    }
+	  })
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js
new file mode 100644
index 0000000..4a0919b
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-1.js
@@ -0,0 +1,95 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(561)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-1.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 561:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js
new file mode 100644
index 0000000..de7f9e0
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-2.js
@@ -0,0 +1,112 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* template */
+	var __vue_template__ = __webpack_require__(562)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-2.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 562:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticStyle: {
+	      alignItems: "center",
+	      marginTop: "120px"
+	    }
+	  }, [_h('image', {
+	    staticStyle: {
+	      width: "360px",
+	      height: "82px"
+	    },
+	    attrs: {
+	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	    }
+	  }), _h('text', {
+	    staticStyle: {
+	      fontSize: "48px"
+	    }
+	  }, ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js
new file mode 100644
index 0000000..2726128
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-3.js
@@ -0,0 +1,127 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(563)
+	)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(564)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-3.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 563:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 564:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello World"])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js
new file mode 100644
index 0000000..d46a4cc
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-4.js
@@ -0,0 +1,167 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(565)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(566)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(567)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-4.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 565:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 566:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  }
+	};
+
+/***/ },
+
+/***/ 567:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"]
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js b/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js
new file mode 100644
index 0000000..1818b65
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world-5.js
@@ -0,0 +1,173 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(568)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(569)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(570)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world-5.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 568:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 569:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.target = 'Weex';
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 570:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/hello-world.js b/android/playground/app/src/main/assets/vue/syntax/hello-world.js
new file mode 100644
index 0000000..e7bce00
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/hello-world.js
@@ -0,0 +1,183 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(558)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(559)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(560)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/hello-world.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 558:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "logo": {
+	    "width": 360,
+	    "height": 82
+	  }
+	}
+
+/***/ },
+
+/***/ 559:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	    target: 'World'
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.target = 'Weex';
+	      console.log('target:', this.target);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 560:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["wrapper"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('image', {
+	    staticClass: ["logo"],
+	    attrs: {
+	      "src": _vm.logoUrl
+	    }
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.target)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-component.js b/android/playground/app/src/main/assets/vue/syntax/script-component.js
new file mode 100644
index 0000000..c27cffc
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-component.js
@@ -0,0 +1,224 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(571)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(576)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-component.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 571:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
+	    };
+	  },
+	  components: {
+	    item: __webpack_require__(572)
+	  }
+	};
+
+/***/ },
+
+/***/ 572:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(573)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(574)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(575)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/include/sub.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 573:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "item-txt": {
+	    "fontSize": 48,
+	    "color": "#555555"
+	  }
+	}
+
+/***/ },
+
+/***/ 574:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: ['url', 'title']
+	};
+
+/***/ },
+
+/***/ 575:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('text', {
+	    staticClass: ["item-txt"]
+	  }, [_vm._s(_vm.title)])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 576:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('list', [_vm._l((_vm.items), function(item) {
+	    return _h('cell', [_h('text', [_vm._s(item.title)]), _h('item', {
+	      attrs: {
+	        "title": 'a'
+	      }
+	    })])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-data.js b/android/playground/app/src/main/assets/vue/syntax/script-data.js
new file mode 100644
index 0000000..77e919a
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-data.js
@@ -0,0 +1,214 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(577)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(578)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(579)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-data.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 577:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 578:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	// // if this is a sub component and the parent component could set `firstName` and `lastName` by:
+	// // `<subcomponent first-name="John" last-name="Smith"></subcomponent>`
+	// // but the `date` won't be changed from parent component
+	// module.exports = {
+	//   props: ['firstName', 'lastName'],
+	//   data: function () {
+	//     return {
+	//       date: Date.now()
+	//     }
+	//   }
+	// }
+
+	// // more `props` formats like
+	// module.exports = {
+	//   props: {
+	//     firstName: {
+	//       default: 'John'
+	//     },
+	//     lastName: {
+	//       type: String,
+	//       default: 'Smith'
+	//     }
+	//   },
+	//   data: function () {
+	//     return {
+	//       date: Date.now()
+	//     }
+	//   }
+	// }
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      firstName: 'John',
+	      lastName: 'Smith',
+	      date: Date.now()
+	    };
+	  },
+	  methods: {
+	    update: function update() {
+	      this.today = '2016-01-01';
+	      console.log('today:', this.today);
+	    }
+	  },
+	  computed: {
+	    fullName: function fullName() {
+	      return this.firstName + ' ' + this.lastName;
+	    },
+	    today: {
+	      get: function get() {
+	        return new Date(this.date).toDateString();
+	      },
+	      set: function set(v) {
+	        this.date = Date.parse(v);
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 579:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.firstName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.lastName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.fullName)]), _h('text', {
+	    staticClass: ["title"]
+	  }, [_vm._s(_vm.today)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-events.js b/android/playground/app/src/main/assets/vue/syntax/script-events.js
new file mode 100644
index 0000000..ef2a671
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-events.js
@@ -0,0 +1,161 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(580)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(581)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(582)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-events.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 580:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 581:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: []
+	    };
+	  },
+	  mounted: function mounted() {
+	    function custom(e) {
+	      this.list.push('custom: ' + JSON.stringify(e));
+	      console.log(this.list);
+	    }
+
+	    this.$emit('custom', { x: 1 });
+
+	    this.$on('custom', custom);
+	    this.$emit('custom', { x: 2 });
+
+	    this.$off('custom', custom);
+	    this.$emit('custom', { x: 3 });
+	  }
+	};
+
+/***/ },
+
+/***/ 582:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_vm._l((_vm.list), function(value) {
+	    return _h('text', {
+	      staticClass: ["title"]
+	    }, [_vm._s(value)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-instance.js b/android/playground/app/src/main/assets/vue/syntax/script-instance.js
new file mode 100644
index 0000000..2af274c
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-instance.js
@@ -0,0 +1,196 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(583)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(584)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(585)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-instance.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 583:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 584:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      x: 1,
+	      y: 2
+	    };
+	  },
+	  methods: {
+	    foo: function foo() {
+	      console.log('foo');
+	    },
+	    test: function test() {
+
+	      // access data/props
+	      console.log(this.x);
+
+	      // access computed
+	      console.log(this.z);
+
+	      // call methods
+	      this.foo();
+
+	      // get config
+	      console.log(this.$getConfig());
+
+	      // listen and fire component events
+	      this.$emit('custom');
+	      this.$on('custom', this.foo);
+	      this.$off('custom', this.foo);
+
+	      // // parent component and sub components
+	      // this.$parent.$emit('custom')
+	      // this.$refs['sub'].$emit('custom')
+
+	      // // find element
+	      // var dom = __weex_require_module__('dom')
+	      // dom.scrollToElement(this.$el('title'), {offset: 0})
+	    }
+	  },
+	  computed: {
+	    z: function z() {
+	      return this.x + this.y;
+	    }
+	  },
+	  mounted: function mounted() {
+	    this.test();
+	  }
+	};
+
+/***/ },
+
+/***/ 585:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"],
+	    attrs: {
+	      "id": "title"
+	    }
+	  }, ["Please check out the source code."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js b/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js
new file mode 100644
index 0000000..3c52de4
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-lifecycle.js
@@ -0,0 +1,155 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(586)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(587)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(588)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-lifecycle.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 586:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 587:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var initMessage;
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: ['Lifecycle List']
+	    };
+	  },
+	  init: function init() {
+	    initMessage = 'component init: nothing more happen even the data initialization';
+	    console.log('init:', this.list);
+	  },
+	  created: function created() {
+	    this.list.push(initMessage);
+	    this.list.push('component created: data observed');
+	    console.log('created:', this.list);
+	  },
+	  mounted: function mounted() {
+	    this.list.push('component mounted: virtual dom generated');
+	    console.log('mounted:', this.list);
+	  }
+	};
+
+/***/ },
+
+/***/ 588:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_vm._l((_vm.list), function(value) {
+	    return _h('text', {
+	      staticClass: ["title"]
+	    }, [_vm._s(value)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-module.js b/android/playground/app/src/main/assets/vue/syntax/script-module.js
new file mode 100644
index 0000000..4e904f3
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-module.js
@@ -0,0 +1,156 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(589)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(590)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(591)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-module.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 589:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 590:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  methods: {
+	    test: function test() {
+	      modal.toast({
+	        message: 'Toast!',
+	        duration: 3
+	      });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 591:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.test
+	    }
+	  }, ["Toast!"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/script-options.js b/android/playground/app/src/main/assets/vue/syntax/script-options.js
new file mode 100644
index 0000000..25e9d94
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/script-options.js
@@ -0,0 +1,182 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(592)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(593)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(594)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/script-options.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 592:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 593:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  // // import sub components
+	  // components: {
+	  //   item: require('./components/sub.vue')
+	  // },
+
+	  // // for sub component only
+	  // props: ['a', 'b'],
+
+	  // for root component only
+	  data: {
+	    x: 1,
+	    y: 2
+	  },
+	  // // for sub component only
+	  // data: function () {
+	  //   return {
+	  //     x: 1,
+	  //     y: 2
+	  //   }
+	  // }
+
+	  methods: {
+	    foo: function foo() {
+	      console.log('foo');
+	    }
+	  },
+
+	  computed: {
+	    z: function z() {
+	      return this.x + this.y;
+	    }
+	  },
+
+	  init: function init() {},
+	  created: function created() {},
+	  mounted: function mounted() {}
+	};
+
+/***/ },
+
+/***/ 594:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _vm._m(0)
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Please check out the source code."])])
+	}]}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-class.js b/android/playground/app/src/main/assets/vue/syntax/template-class.js
new file mode 100644
index 0000000..1b70b78
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-class.js
@@ -0,0 +1,161 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(595)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(596)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(597)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-class.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 595:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "a": {
+	    "fontSize": 48
+	  },
+	  "b": {
+	    "color": "#ff0000"
+	  }
+	}
+
+/***/ },
+
+/***/ 596:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    x: ''
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.x = 'b';
+	      console.log('x', this.x);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 597:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticClass: ["a"]
+	  }, ["Hello"]), _h('text', {
+	    staticClass: ["b"]
+	  }, ["Hello"]), _h('text', {
+	    class: ['a', _vm.x]
+	  }, ["Hello"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-content.js b/android/playground/app/src/main/assets/vue/syntax/template-content.js
new file mode 100644
index 0000000..d9bddef
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-content.js
@@ -0,0 +1,189 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(598)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(602)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-content.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 598:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  components: {
+	    btn: __webpack_require__(599)
+	  }
+	};
+
+/***/ },
+
+/***/ 599:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(600)
+	)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(601)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/include/btn.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 600:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 601:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    staticClass: ["btn"]
+	  }, [_vm._t("default")])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 602:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('btn', [_h('text', ["Click!"])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-event.js b/android/playground/app/src/main/assets/vue/syntax/template-event.js
new file mode 100644
index 0000000..61e8a88
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-event.js
@@ -0,0 +1,197 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(603)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(604)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(605)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-event.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 603:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 604:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      name: 'Steve',
+	      temp: 'Mike'
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.setName('David');
+	      console.log('setName', this.name);
+	    },
+	    setName: function setName(value) {
+	      this.name = value;
+	      console.log('name', this.name);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 605:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Hello " + _vm._s(_vm.name)]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, ["Update 1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.update($event)
+	      }
+	    }
+	  }, ["Update 1"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.setName(_vm.temp, $event)
+	      }
+	    }
+	  }, ["Update 2"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": function($event) {
+	        _vm.setName('John')
+	      }
+	    }
+	  }, ["Update 3"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-if.js b/android/playground/app/src/main/assets/vue/syntax/template-if.js
new file mode 100644
index 0000000..192f88b
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-if.js
@@ -0,0 +1,165 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(606)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(607)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(608)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-if.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 606:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 607:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: {
+	    flag: true
+	  },
+	  methods: {
+	    toggle: function toggle(e) {
+	      this.flag = !this.flag;
+	      console.log('this.flag:', this.flag);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 608:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.toggle
+	    }
+	  }, ["Toggle"]), (_vm.flag) ? _h('text', {
+	    staticClass: ["title"]
+	  }, ["I'm ON"]) : _vm._e(), (!_vm.flag) ? _h('text', {
+	    staticClass: ["title"]
+	  }, ["I'm Off"]) : _vm._e()])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js b/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js
new file mode 100644
index 0000000..1d28c34
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-repeat-update.js
@@ -0,0 +1,195 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(612)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(613)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(614)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-repeat-update.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 612:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  },
+	  "btn": {
+	    "fontSize": 36,
+	    "textAlign": "center",
+	    "color": "#FFFFFF",
+	    "backgroundColor": "#808080",
+	    "padding": 20,
+	    "borderRadius": 5
+	  }
+	}
+
+/***/ },
+
+/***/ 613:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: [{ key: 1, text: 'a' }, { key: 2, text: 'a' }, { key: 3, text: 'b' }, { key: 4, text: 'c' }, { key: 5, text: 'a' }],
+	      flag: true
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      // equals to `this.list.text = 'foo'`
+	      // DO NOT USE: `this.list[2] = {key: 3, text: 'foo'}}`
+	      Vue.set(this.list, 2, { key: 3, text: 'foo' });
+	      console.log('this.list', this.list);
+	    },
+	    mutate: function mutate(e) {
+	      if (this.list.length % 2) {
+	        this.list.push({ key: 'x', text: 'bar' });
+	      } else {
+	        this.list.pop();
+	      }
+	      console.log('this.list', this.list);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 614:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Track by"]), _vm._l((_vm.list), function(item, k, $index) {
+	    return _h('text', {
+	      staticClass: ["subtitle"],
+	      attrs: {
+	        "track-by": "item.key"
+	      }
+	    }, [_vm._s($index) + "-" + _vm._s(item.text)])
+	  }), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, ["Update"]), _h('text', {
+	    staticClass: ["btn"],
+	    on: {
+	      "click": _vm.mutate
+	    }
+	  }, ["Mutate"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-repeat.js b/android/playground/app/src/main/assets/vue/syntax/template-repeat.js
new file mode 100644
index 0000000..f2dc598
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-repeat.js
@@ -0,0 +1,170 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(609)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(610)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(611)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-repeat.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 609:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "title": {
+	    "fontSize": 48
+	  },
+	  "subtitle": {
+	    "fontSize": 36
+	  }
+	}
+
+/***/ },
+
+/***/ 610:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      list: ['a', 'b', 'c', 'd', 'e'],
+	      list2: [{ text: 'a' }, { text: 'b' }, { text: 'c' }, { text: 'd' }, { text: 'e' }]
+	    };
+	  }
+	};
+
+/***/ },
+
+/***/ 611:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', [_h('text', {
+	    staticClass: ["title"]
+	  }, ["Custom item"]), _vm._l((_vm.list), function(item) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, [_vm._s(item)])
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Custom key and item"]), _vm._l((_vm.list), function(i, v) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, [_vm._s(i) + "-" + _vm._s(v)])
+	  }), _h('text', {
+	    staticClass: ["title"]
+	  }, ["Array of Object"]), _vm._l((_vm.list2), function(item, k, index) {
+	    return _h('text', {
+	      staticClass: ["subtitle"]
+	    }, ["> " + _vm._s(index) + "-" + _vm._s(item.text)])
+	  })])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/syntax/template-style.js b/android/playground/app/src/main/assets/vue/syntax/template-style.js
new file mode 100644
index 0000000..845da94
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/syntax/template-style.js
@@ -0,0 +1,144 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(615)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(616)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/syntax/template-style.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 615:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  data: function data() {
+	    return {
+	      size: 32,
+	      color: '#ff0000'
+	    };
+	  },
+	  methods: {
+	    update: function update(e) {
+	      this.size = 48;
+	      console.log('this.size', this.size);
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 616:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    on: {
+	      "click": _vm.update
+	    }
+	  }, [_h('text', {
+	    staticStyle: {
+	      fontSize: "48px",
+	      color: "#0000ff"
+	    }
+	  }, ["Hello"]), _h('text', {
+	    style: {
+	      fontSize: _vm.size,
+	      color: _vm.color
+	    }
+	  }, ["Hello"])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/assets/vue/template.js b/android/playground/app/src/main/assets/vue/template.js
new file mode 100644
index 0000000..26a1496
--- /dev/null
+++ b/android/playground/app/src/main/assets/vue/template.js
@@ -0,0 +1,796 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* script */
+	__vue_exports__ = __webpack_require__(617)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(622)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/template.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 383:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(384)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(385)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(386)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/panel.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 384:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "panel": {
+	    "marginBottom": 20,
+	    "backgroundColor": "#ffffff",
+	    "borderColor": "#dddddd",
+	    "borderWidth": 1
+	  },
+	  "panel-primary": {
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "panel-success": {
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "panel-info": {
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "panel-warning": {
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "panel-danger": {
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "panel-header": {
+	    "backgroundColor": "#f5f5f5",
+	    "fontSize": 40,
+	    "color": "#333333"
+	  },
+	  "panel-header-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "color": "#ffffff"
+	  },
+	  "panel-header-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "color": "#ffffff"
+	  }
+	}
+
+/***/ },
+
+/***/ 385:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    title: { default: '' },
+	    paddingBody: { default: 20 },
+	    paddingHead: { default: 20 },
+	    dataClass: { default: '' }, // FIXME transfer class
+	    border: { default: 0 }
+	  }
+	};
+
+/***/ },
+
+/***/ 386:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['panel', 'panel-' + _vm.type],
+	    style: {
+	      borderWidth: _vm.border
+	    }
+	  }, [_h('text', {
+	    class: ['panel-header', 'panel-header-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingHead,
+	      paddingBottom: _vm.paddingHead,
+	      paddingLeft: _vm.paddingHead * 1.5,
+	      paddingRight: _vm.paddingHead * 1.5
+	    }
+	  }, [_vm._s(_vm.title)]), _h('div', {
+	    class: ['panel-body', 'panel-body-' + _vm.type],
+	    style: {
+	      paddingTop: _vm.paddingBody,
+	      paddingBottom: _vm.paddingBody,
+	      paddingLeft: _vm.paddingBody * 1.5,
+	      paddingRight: _vm.paddingBody * 1.5
+	    }
+	  }, [_vm._t("default")])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 387:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(388)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(389)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(390)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/button.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 388:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "btn": {
+	    "marginBottom": 0,
+	    "alignItems": "center",
+	    "justifyContent": "center",
+	    "borderWidth": 1,
+	    "borderStyle": "solid",
+	    "borderColor": "#333333"
+	  },
+	  "btn-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-primary": {
+	    "backgroundColor": "rgb(40,96,144)",
+	    "borderColor": "rgb(40,96,144)"
+	  },
+	  "btn-success": {
+	    "backgroundColor": "rgb(92,184,92)",
+	    "borderColor": "rgb(76,174,76)"
+	  },
+	  "btn-info": {
+	    "backgroundColor": "rgb(91,192,222)",
+	    "borderColor": "rgb(70,184,218)"
+	  },
+	  "btn-warning": {
+	    "backgroundColor": "rgb(240,173,78)",
+	    "borderColor": "rgb(238,162,54)"
+	  },
+	  "btn-danger": {
+	    "backgroundColor": "rgb(217,83,79)",
+	    "borderColor": "rgb(212,63,58)"
+	  },
+	  "btn-link": {
+	    "borderColor": "rgba(0,0,0,0)",
+	    "borderRadius": 0
+	  },
+	  "btn-txt-default": {
+	    "color": "rgb(51,51,51)"
+	  },
+	  "btn-txt-primary": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-success": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-info": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-warning": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-danger": {
+	    "color": "rgb(255,255,255)"
+	  },
+	  "btn-txt-link": {
+	    "color": "rgb(51,122,183)"
+	  },
+	  "btn-sz-large": {
+	    "width": 300,
+	    "height": 100,
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 40,
+	    "paddingRight": 40,
+	    "borderRadius": 15
+	  },
+	  "btn-sz-middle": {
+	    "width": 240,
+	    "height": 80,
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "paddingLeft": 30,
+	    "paddingRight": 30,
+	    "borderRadius": 10
+	  },
+	  "btn-sz-small": {
+	    "width": 170,
+	    "height": 60,
+	    "paddingTop": 12,
+	    "paddingBottom": 12,
+	    "paddingLeft": 25,
+	    "paddingRight": 25,
+	    "borderRadius": 7
+	  },
+	  "btn-txt-sz-large": {
+	    "fontSize": 45
+	  },
+	  "btn-txt-sz-middle": {
+	    "fontSize": 35
+	  },
+	  "btn-txt-sz-small": {
+	    "fontSize": 30
+	  }
+	}
+
+/***/ },
+
+/***/ 389:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'default' },
+	    size: { default: 'large' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 390:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
+	  }, [_h('text', {
+	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 393:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(394)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(395)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(396)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/tip.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 394:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "tip": {
+	    "paddingLeft": 36,
+	    "paddingRight": 36,
+	    "paddingTop": 36,
+	    "paddingBottom": 36,
+	    "borderRadius": 10
+	  },
+	  "tip-txt": {
+	    "fontSize": 28
+	  },
+	  "tip-success": {
+	    "backgroundColor": "#dff0d8",
+	    "borderColor": "#d6e9c6"
+	  },
+	  "tip-txt-success": {
+	    "color": "#3c763d"
+	  },
+	  "tip-info": {
+	    "backgroundColor": "#d9edf7",
+	    "borderColor": "#bce8f1"
+	  },
+	  "tip-txt-info": {
+	    "color": "#31708f"
+	  },
+	  "tip-warning": {
+	    "backgroundColor": "#fcf8e3",
+	    "borderColor": "#faebcc"
+	  },
+	  "tip-txt-warning": {
+	    "color": "#8a6d3b"
+	  },
+	  "tip-danger": {
+	    "backgroundColor": "#f2dede",
+	    "borderColor": "#ebccd1"
+	  },
+	  "tip-txt-danger": {
+	    "color": "#a94442"
+	  }
+	}
+
+/***/ },
+
+/***/ 395:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    type: { default: 'success' },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 396:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['tip', 'tip-' + _vm.type]
+	  }, [_h('text', {
+	    class: ['tip-txt', 'tip-txt-' + _vm.type]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 617:
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	var modal = __weex_require_module__('modal');
+	module.exports = {
+	  data: function data() {
+	    return {
+	      img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    };
+	  },
+	  components: {
+	    panel: __webpack_require__(383),
+	    hn: __webpack_require__(618),
+	    tip: __webpack_require__(393),
+	    button: __webpack_require__(387)
+	  },
+	  methods: {
+	    toast: function toast() {
+	      modal.toast({ message: 'a toast', duration: 2 });
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 618:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(619)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(620)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(621)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/lixinke/git/other/weex/examples/vue/include/hn.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	for (var name in module) {
+	__vue_options__.style[name] = module[name]
+	}
+	})
+
+	module.exports = __vue_exports__
+
+
+/***/ },
+
+/***/ 619:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "h1": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h2": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "h3": {
+	    "height": 110,
+	    "paddingTop": 20,
+	    "paddingBottom": 20
+	  },
+	  "txt-h1": {
+	    "fontSize": 70
+	  },
+	  "txt-h2": {
+	    "fontSize": 52
+	  },
+	  "txt-h3": {
+	    "fontSize": 42
+	  }
+	}
+
+/***/ },
+
+/***/ 620:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	  props: {
+	    level: { default: 1 },
+	    value: { default: '' }
+	  }
+	};
+
+/***/ },
+
+/***/ 621:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('div', {
+	    class: ['h' + _vm.level],
+	    staticStyle: {
+	      justifyContent: "center"
+	    }
+	  }, [_h('text', {
+	    class: ['txt-h' + _vm.level]
+	  }, [_vm._s(_vm.value)])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ },
+
+/***/ 622:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _h('scroller', [_h('panel', {
+	    attrs: {
+	      "title": "Dialog",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "success",
+	      "value": "It's a weex example template."
+	    }
+	  }), _h('hn', {
+	    attrs: {
+	      "level": "1",
+	      "value": "H1"
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "primary",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  }), _h('hn', {
+	    attrs: {
+	      "level": "2",
+	      "value": "H3"
+	    }
+	  }), _h('button', {
+	    attrs: {
+	      "type": "warning",
+	      "value": "Toast"
+	    },
+	    nativeOn: {
+	      "click": function($event) {
+	        _vm.toast($event)
+	      }
+	    }
+	  })]), _h('panel', {
+	    attrs: {
+	      "title": "Image",
+	      "type": "primary"
+	    }
+	  }, [_h('tip', {
+	    staticStyle: {
+	      marginBottom: "20px"
+	    },
+	    attrs: {
+	      "type": "warning",
+	      "value": "Weex screen width is 750"
+	    }
+	  }), _h('image', {
+	    staticClass: ["img"],
+	    staticStyle: {
+	      width: "400px",
+	      height: "400px"
+	    },
+	    attrs: {
+	      "src": _vm.img
+	    }
+	  }), _h('panel', {
+	    attrs: {
+	      "title": "Image",
+	      "type": "default"
+	    }
+	  }, [_h('text', ["sub info"])])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/android/playground/app/src/main/ic_launcher-web.png b/android/playground/app/src/main/ic_launcher-web.png
new file mode 100644
index 0000000..bb92223
--- /dev/null
+++ b/android/playground/app/src/main/ic_launcher-web.png
Binary files differ
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/BenchmarkActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/BenchmarkActivity.java
index b265cad..63e0ee5 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/BenchmarkActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/BenchmarkActivity.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.alibaba.weex;
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
old mode 100755
new mode 100644
index 008ca72..8469b26
--- a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
@@ -363,6 +177,12 @@
     LocalBroadcastManager.getInstance(this).unregisterReceiver(mReloadReceiver);
   }
 
+  @Override
+  public void onPause() {
+    super.onPause();
+//    WXSDKManager.getInstance().takeJSHeapSnapshot("/sdcard/weex/");
+  }
+
   private static String getIndexUrl() {
     return "http://" + sCurrentIp + ":12580/examples/build/index.js";
   }
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/SplashActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/SplashActivity.java
old mode 100755
new mode 100644
index 0d79c56..0b56571
--- a/android/playground/app/src/main/java/com/alibaba/weex/SplashActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/SplashActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/Utility.java b/android/playground/app/src/main/java/com/alibaba/weex/Utility.java
new file mode 100644
index 0000000..7c07a45
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/Utility.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.alibaba.weex;
+
+import android.util.Pair;
+
+import java.util.Map;
+
+/**
+ * Created by sospartan on 28/03/2017.
+ */
+
+public class Utility {
+  private static final int[] ID_STUBS = {
+      R.id.weex_id_4999,R.id.weex_id_4998,R.id.weex_id_4997,R.id.weex_id_4996,R.id.weex_id_4995,R.id.weex_id_4994,R.id.weex_id_4993,R.id.weex_id_4992,R.id.weex_id_4991,R.id.weex_id_4990,R.id.weex_id_4989,R.id.weex_id_4988,R.id.weex_id_4987,R.id.weex_id_4986,R.id.weex_id_4985,R.id.weex_id_4984,R.id.weex_id_4983,R.id.weex_id_4982,R.id.weex_id_4981,R.id.weex_id_4980,R.id.weex_id_4979,R.id.weex_id_4978,R.id.weex_id_4977,R.id.weex_id_4976,R.id.weex_id_4975,R.id.weex_id_4974,R.id.weex_id_4973,R.id.weex_id_4972,R.id.weex_id_4971,R.id.weex_id_4970,R.id.weex_id_4969,R.id.weex_id_4968,R.id.weex_id_4967,R.id.weex_id_4966,R.id.weex_id_4965,R.id.weex_id_4964,R.id.weex_id_4963,R.id.weex_id_4962,R.id.weex_id_4961,R.id.weex_id_4960,R.id.weex_id_4959,R.id.weex_id_4958,R.id.weex_id_4957,R.id.weex_id_4956,R.id.weex_id_4955,R.id.weex_id_4954,R.id.weex_id_4953,R.id.weex_id_4952,R.id.weex_id_4951,R.id.weex_id_4950,R.id.weex_id_4949,R.id.weex_id_4948,R.id.weex_id_4947,R.id.weex_id_4946,R.id.weex_id_4945,R.id.weex_id_4944,R.id.weex_id_4943,R.id.weex_id_4942,R.id.weex_id_4941,R.id.weex_id_4940,R.id.weex_id_4939,R.id.weex_id_4938,R.id.weex_id_4937,R.id.weex_id_4936,R.id.weex_id_4935,R.id.weex_id_4934,R.id.weex_id_4933,R.id.weex_id_4932,R.id.weex_id_4931,R.id.weex_id_4930,R.id.weex_id_4929,R.id.weex_id_4928,R.id.weex_id_4927,R.id.weex_id_4926,R.id.weex_id_4925,R.id.weex_id_4924,R.id.weex_id_4923,R.id.weex_id_4922,R.id.weex_id_4921,R.id.weex_id_4920,R.id.weex_id_4919,R.id.weex_id_4918,R.id.weex_id_4917,R.id.weex_id_4916,R.id.weex_id_4915,R.id.weex_id_4914,R.id.weex_id_4913,R.id.weex_id_4912,R.id.weex_id_4911,R.id.weex_id_4910,R.id.weex_id_4909,R.id.weex_id_4908,R.id.weex_id_4907,R.id.weex_id_4906,R.id.weex_id_4905,R.id.weex_id_4904,R.id.weex_id_4903,R.id.weex_id_4902,R.id.weex_id_4901,R.id.weex_id_4900,
+      R.id.weex_id_4899,R.id.weex_id_4898,R.id.weex_id_4897,R.id.weex_id_4896,R.id.weex_id_4895,R.id.weex_id_4894,R.id.weex_id_4893,R.id.weex_id_4892,R.id.weex_id_4891,R.id.weex_id_4890,R.id.weex_id_4889,R.id.weex_id_4888,R.id.weex_id_4887,R.id.weex_id_4886,R.id.weex_id_4885,R.id.weex_id_4884,R.id.weex_id_4883,R.id.weex_id_4882,R.id.weex_id_4881,R.id.weex_id_4880,R.id.weex_id_4879,R.id.weex_id_4878,R.id.weex_id_4877,R.id.weex_id_4876,R.id.weex_id_4875,R.id.weex_id_4874,R.id.weex_id_4873,R.id.weex_id_4872,R.id.weex_id_4871,R.id.weex_id_4870,R.id.weex_id_4869,R.id.weex_id_4868,R.id.weex_id_4867,R.id.weex_id_4866,R.id.weex_id_4865,R.id.weex_id_4864,R.id.weex_id_4863,R.id.weex_id_4862,R.id.weex_id_4861,R.id.weex_id_4860,R.id.weex_id_4859,R.id.weex_id_4858,R.id.weex_id_4857,R.id.weex_id_4856,R.id.weex_id_4855,R.id.weex_id_4854,R.id.weex_id_4853,R.id.weex_id_4852,R.id.weex_id_4851,R.id.weex_id_4850,R.id.weex_id_4849,R.id.weex_id_4848,R.id.weex_id_4847,R.id.weex_id_4846,R.id.weex_id_4845,R.id.weex_id_4844,R.id.weex_id_4843,R.id.weex_id_4842,R.id.weex_id_4841,R.id.weex_id_4840,R.id.weex_id_4839,R.id.weex_id_4838,R.id.weex_id_4837,R.id.weex_id_4836,R.id.weex_id_4835,R.id.weex_id_4834,R.id.weex_id_4833,R.id.weex_id_4832,R.id.weex_id_4831,R.id.weex_id_4830,R.id.weex_id_4829,R.id.weex_id_4828,R.id.weex_id_4827,R.id.weex_id_4826,R.id.weex_id_4825,R.id.weex_id_4824,R.id.weex_id_4823,R.id.weex_id_4822,R.id.weex_id_4821,R.id.weex_id_4820,R.id.weex_id_4819,R.id.weex_id_4818,R.id.weex_id_4817,R.id.weex_id_4816,R.id.weex_id_4815,R.id.weex_id_4814,R.id.weex_id_4813,R.id.weex_id_4812,R.id.weex_id_4811,R.id.weex_id_4810,R.id.weex_id_4809,R.id.weex_id_4808,R.id.weex_id_4807,R.id.weex_id_4806,R.id.weex_id_4805,R.id.weex_id_4804,R.id.weex_id_4803,R.id.weex_id_4802,R.id.weex_id_4801,R.id.weex_id_4800,
+      R.id.weex_id_4799,R.id.weex_id_4798,R.id.weex_id_4797,R.id.weex_id_4796,R.id.weex_id_4795,R.id.weex_id_4794,R.id.weex_id_4793,R.id.weex_id_4792,R.id.weex_id_4791,R.id.weex_id_4790,R.id.weex_id_4789,R.id.weex_id_4788,R.id.weex_id_4787,R.id.weex_id_4786,R.id.weex_id_4785,R.id.weex_id_4784,R.id.weex_id_4783,R.id.weex_id_4782,R.id.weex_id_4781,R.id.weex_id_4780,R.id.weex_id_4779,R.id.weex_id_4778,R.id.weex_id_4777,R.id.weex_id_4776,R.id.weex_id_4775,R.id.weex_id_4774,R.id.weex_id_4773,R.id.weex_id_4772,R.id.weex_id_4771,R.id.weex_id_4770,R.id.weex_id_4769,R.id.weex_id_4768,R.id.weex_id_4767,R.id.weex_id_4766,R.id.weex_id_4765,R.id.weex_id_4764,R.id.weex_id_4763,R.id.weex_id_4762,R.id.weex_id_4761,R.id.weex_id_4760,R.id.weex_id_4759,R.id.weex_id_4758,R.id.weex_id_4757,R.id.weex_id_4756,R.id.weex_id_4755,R.id.weex_id_4754,R.id.weex_id_4753,R.id.weex_id_4752,R.id.weex_id_4751,R.id.weex_id_4750,R.id.weex_id_4749,R.id.weex_id_4748,R.id.weex_id_4747,R.id.weex_id_4746,R.id.weex_id_4745,R.id.weex_id_4744,R.id.weex_id_4743,R.id.weex_id_4742,R.id.weex_id_4741,R.id.weex_id_4740,R.id.weex_id_4739,R.id.weex_id_4738,R.id.weex_id_4737,R.id.weex_id_4736,R.id.weex_id_4735,R.id.weex_id_4734,R.id.weex_id_4733,R.id.weex_id_4732,R.id.weex_id_4731,R.id.weex_id_4730,R.id.weex_id_4729,R.id.weex_id_4728,R.id.weex_id_4727,R.id.weex_id_4726,R.id.weex_id_4725,R.id.weex_id_4724,R.id.weex_id_4723,R.id.weex_id_4722,R.id.weex_id_4721,R.id.weex_id_4720,R.id.weex_id_4719,R.id.weex_id_4718,R.id.weex_id_4717,R.id.weex_id_4716,R.id.weex_id_4715,R.id.weex_id_4714,R.id.weex_id_4713,R.id.weex_id_4712,R.id.weex_id_4711,R.id.weex_id_4710,R.id.weex_id_4709,R.id.weex_id_4708,R.id.weex_id_4707,R.id.weex_id_4706,R.id.weex_id_4705,R.id.weex_id_4704,R.id.weex_id_4703,R.id.weex_id_4702,R.id.weex_id_4701,R.id.weex_id_4700,
+      R.id.weex_id_4699,R.id.weex_id_4698,R.id.weex_id_4697,R.id.weex_id_4696,R.id.weex_id_4695,R.id.weex_id_4694,R.id.weex_id_4693,R.id.weex_id_4692,R.id.weex_id_4691,R.id.weex_id_4690,R.id.weex_id_4689,R.id.weex_id_4688,R.id.weex_id_4687,R.id.weex_id_4686,R.id.weex_id_4685,R.id.weex_id_4684,R.id.weex_id_4683,R.id.weex_id_4682,R.id.weex_id_4681,R.id.weex_id_4680,R.id.weex_id_4679,R.id.weex_id_4678,R.id.weex_id_4677,R.id.weex_id_4676,R.id.weex_id_4675,R.id.weex_id_4674,R.id.weex_id_4673,R.id.weex_id_4672,R.id.weex_id_4671,R.id.weex_id_4670,R.id.weex_id_4669,R.id.weex_id_4668,R.id.weex_id_4667,R.id.weex_id_4666,R.id.weex_id_4665,R.id.weex_id_4664,R.id.weex_id_4663,R.id.weex_id_4662,R.id.weex_id_4661,R.id.weex_id_4660,R.id.weex_id_4659,R.id.weex_id_4658,R.id.weex_id_4657,R.id.weex_id_4656,R.id.weex_id_4655,R.id.weex_id_4654,R.id.weex_id_4653,R.id.weex_id_4652,R.id.weex_id_4651,R.id.weex_id_4650,R.id.weex_id_4649,R.id.weex_id_4648,R.id.weex_id_4647,R.id.weex_id_4646,R.id.weex_id_4645,R.id.weex_id_4644,R.id.weex_id_4643,R.id.weex_id_4642,R.id.weex_id_4641,R.id.weex_id_4640,R.id.weex_id_4639,R.id.weex_id_4638,R.id.weex_id_4637,R.id.weex_id_4636,R.id.weex_id_4635,R.id.weex_id_4634,R.id.weex_id_4633,R.id.weex_id_4632,R.id.weex_id_4631,R.id.weex_id_4630,R.id.weex_id_4629,R.id.weex_id_4628,R.id.weex_id_4627,R.id.weex_id_4626,R.id.weex_id_4625,R.id.weex_id_4624,R.id.weex_id_4623,R.id.weex_id_4622,R.id.weex_id_4621,R.id.weex_id_4620,R.id.weex_id_4619,R.id.weex_id_4618,R.id.weex_id_4617,R.id.weex_id_4616,R.id.weex_id_4615,R.id.weex_id_4614,R.id.weex_id_4613,R.id.weex_id_4612,R.id.weex_id_4611,R.id.weex_id_4610,R.id.weex_id_4609,R.id.weex_id_4608,R.id.weex_id_4607,R.id.weex_id_4606,R.id.weex_id_4605,R.id.weex_id_4604,R.id.weex_id_4603,R.id.weex_id_4602,R.id.weex_id_4601,R.id.weex_id_4600,
+      R.id.weex_id_4599,R.id.weex_id_4598,R.id.weex_id_4597,R.id.weex_id_4596,R.id.weex_id_4595,R.id.weex_id_4594,R.id.weex_id_4593,R.id.weex_id_4592,R.id.weex_id_4591,R.id.weex_id_4590,R.id.weex_id_4589,R.id.weex_id_4588,R.id.weex_id_4587,R.id.weex_id_4586,R.id.weex_id_4585,R.id.weex_id_4584,R.id.weex_id_4583,R.id.weex_id_4582,R.id.weex_id_4581,R.id.weex_id_4580,R.id.weex_id_4579,R.id.weex_id_4578,R.id.weex_id_4577,R.id.weex_id_4576,R.id.weex_id_4575,R.id.weex_id_4574,R.id.weex_id_4573,R.id.weex_id_4572,R.id.weex_id_4571,R.id.weex_id_4570,R.id.weex_id_4569,R.id.weex_id_4568,R.id.weex_id_4567,R.id.weex_id_4566,R.id.weex_id_4565,R.id.weex_id_4564,R.id.weex_id_4563,R.id.weex_id_4562,R.id.weex_id_4561,R.id.weex_id_4560,R.id.weex_id_4559,R.id.weex_id_4558,R.id.weex_id_4557,R.id.weex_id_4556,R.id.weex_id_4555,R.id.weex_id_4554,R.id.weex_id_4553,R.id.weex_id_4552,R.id.weex_id_4551,R.id.weex_id_4550,R.id.weex_id_4549,R.id.weex_id_4548,R.id.weex_id_4547,R.id.weex_id_4546,R.id.weex_id_4545,R.id.weex_id_4544,R.id.weex_id_4543,R.id.weex_id_4542,R.id.weex_id_4541,R.id.weex_id_4540,R.id.weex_id_4539,R.id.weex_id_4538,R.id.weex_id_4537,R.id.weex_id_4536,R.id.weex_id_4535,R.id.weex_id_4534,R.id.weex_id_4533,R.id.weex_id_4532,R.id.weex_id_4531,R.id.weex_id_4530,R.id.weex_id_4529,R.id.weex_id_4528,R.id.weex_id_4527,R.id.weex_id_4526,R.id.weex_id_4525,R.id.weex_id_4524,R.id.weex_id_4523,R.id.weex_id_4522,R.id.weex_id_4521,R.id.weex_id_4520,R.id.weex_id_4519,R.id.weex_id_4518,R.id.weex_id_4517,R.id.weex_id_4516,R.id.weex_id_4515,R.id.weex_id_4514,R.id.weex_id_4513,R.id.weex_id_4512,R.id.weex_id_4511,R.id.weex_id_4510,R.id.weex_id_4509,R.id.weex_id_4508,R.id.weex_id_4507,R.id.weex_id_4506,R.id.weex_id_4505,R.id.weex_id_4504,R.id.weex_id_4503,R.id.weex_id_4502,R.id.weex_id_4501,R.id.weex_id_4500,
+      R.id.weex_id_4499,R.id.weex_id_4498,R.id.weex_id_4497,R.id.weex_id_4496,R.id.weex_id_4495,R.id.weex_id_4494,R.id.weex_id_4493,R.id.weex_id_4492,R.id.weex_id_4491,R.id.weex_id_4490,R.id.weex_id_4489,R.id.weex_id_4488,R.id.weex_id_4487,R.id.weex_id_4486,R.id.weex_id_4485,R.id.weex_id_4484,R.id.weex_id_4483,R.id.weex_id_4482,R.id.weex_id_4481,R.id.weex_id_4480,R.id.weex_id_4479,R.id.weex_id_4478,R.id.weex_id_4477,R.id.weex_id_4476,R.id.weex_id_4475,R.id.weex_id_4474,R.id.weex_id_4473,R.id.weex_id_4472,R.id.weex_id_4471,R.id.weex_id_4470,R.id.weex_id_4469,R.id.weex_id_4468,R.id.weex_id_4467,R.id.weex_id_4466,R.id.weex_id_4465,R.id.weex_id_4464,R.id.weex_id_4463,R.id.weex_id_4462,R.id.weex_id_4461,R.id.weex_id_4460,R.id.weex_id_4459,R.id.weex_id_4458,R.id.weex_id_4457,R.id.weex_id_4456,R.id.weex_id_4455,R.id.weex_id_4454,R.id.weex_id_4453,R.id.weex_id_4452,R.id.weex_id_4451,R.id.weex_id_4450,R.id.weex_id_4449,R.id.weex_id_4448,R.id.weex_id_4447,R.id.weex_id_4446,R.id.weex_id_4445,R.id.weex_id_4444,R.id.weex_id_4443,R.id.weex_id_4442,R.id.weex_id_4441,R.id.weex_id_4440,R.id.weex_id_4439,R.id.weex_id_4438,R.id.weex_id_4437,R.id.weex_id_4436,R.id.weex_id_4435,R.id.weex_id_4434,R.id.weex_id_4433,R.id.weex_id_4432,R.id.weex_id_4431,R.id.weex_id_4430,R.id.weex_id_4429,R.id.weex_id_4428,R.id.weex_id_4427,R.id.weex_id_4426,R.id.weex_id_4425,R.id.weex_id_4424,R.id.weex_id_4423,R.id.weex_id_4422,R.id.weex_id_4421,R.id.weex_id_4420,R.id.weex_id_4419,R.id.weex_id_4418,R.id.weex_id_4417,R.id.weex_id_4416,R.id.weex_id_4415,R.id.weex_id_4414,R.id.weex_id_4413,R.id.weex_id_4412,R.id.weex_id_4411,R.id.weex_id_4410,R.id.weex_id_4409,R.id.weex_id_4408,R.id.weex_id_4407,R.id.weex_id_4406,R.id.weex_id_4405,R.id.weex_id_4404,R.id.weex_id_4403,R.id.weex_id_4402,R.id.weex_id_4401,R.id.weex_id_4400,
+      R.id.weex_id_4399,R.id.weex_id_4398,R.id.weex_id_4397,R.id.weex_id_4396,R.id.weex_id_4395,R.id.weex_id_4394,R.id.weex_id_4393,R.id.weex_id_4392,R.id.weex_id_4391,R.id.weex_id_4390,R.id.weex_id_4389,R.id.weex_id_4388,R.id.weex_id_4387,R.id.weex_id_4386,R.id.weex_id_4385,R.id.weex_id_4384,R.id.weex_id_4383,R.id.weex_id_4382,R.id.weex_id_4381,R.id.weex_id_4380,R.id.weex_id_4379,R.id.weex_id_4378,R.id.weex_id_4377,R.id.weex_id_4376,R.id.weex_id_4375,R.id.weex_id_4374,R.id.weex_id_4373,R.id.weex_id_4372,R.id.weex_id_4371,R.id.weex_id_4370,R.id.weex_id_4369,R.id.weex_id_4368,R.id.weex_id_4367,R.id.weex_id_4366,R.id.weex_id_4365,R.id.weex_id_4364,R.id.weex_id_4363,R.id.weex_id_4362,R.id.weex_id_4361,R.id.weex_id_4360,R.id.weex_id_4359,R.id.weex_id_4358,R.id.weex_id_4357,R.id.weex_id_4356,R.id.weex_id_4355,R.id.weex_id_4354,R.id.weex_id_4353,R.id.weex_id_4352,R.id.weex_id_4351,R.id.weex_id_4350,R.id.weex_id_4349,R.id.weex_id_4348,R.id.weex_id_4347,R.id.weex_id_4346,R.id.weex_id_4345,R.id.weex_id_4344,R.id.weex_id_4343,R.id.weex_id_4342,R.id.weex_id_4341,R.id.weex_id_4340,R.id.weex_id_4339,R.id.weex_id_4338,R.id.weex_id_4337,R.id.weex_id_4336,R.id.weex_id_4335,R.id.weex_id_4334,R.id.weex_id_4333,R.id.weex_id_4332,R.id.weex_id_4331,R.id.weex_id_4330,R.id.weex_id_4329,R.id.weex_id_4328,R.id.weex_id_4327,R.id.weex_id_4326,R.id.weex_id_4325,R.id.weex_id_4324,R.id.weex_id_4323,R.id.weex_id_4322,R.id.weex_id_4321,R.id.weex_id_4320,R.id.weex_id_4319,R.id.weex_id_4318,R.id.weex_id_4317,R.id.weex_id_4316,R.id.weex_id_4315,R.id.weex_id_4314,R.id.weex_id_4313,R.id.weex_id_4312,R.id.weex_id_4311,R.id.weex_id_4310,R.id.weex_id_4309,R.id.weex_id_4308,R.id.weex_id_4307,R.id.weex_id_4306,R.id.weex_id_4305,R.id.weex_id_4304,R.id.weex_id_4303,R.id.weex_id_4302,R.id.weex_id_4301,R.id.weex_id_4300,
+      R.id.weex_id_4299,R.id.weex_id_4298,R.id.weex_id_4297,R.id.weex_id_4296,R.id.weex_id_4295,R.id.weex_id_4294,R.id.weex_id_4293,R.id.weex_id_4292,R.id.weex_id_4291,R.id.weex_id_4290,R.id.weex_id_4289,R.id.weex_id_4288,R.id.weex_id_4287,R.id.weex_id_4286,R.id.weex_id_4285,R.id.weex_id_4284,R.id.weex_id_4283,R.id.weex_id_4282,R.id.weex_id_4281,R.id.weex_id_4280,R.id.weex_id_4279,R.id.weex_id_4278,R.id.weex_id_4277,R.id.weex_id_4276,R.id.weex_id_4275,R.id.weex_id_4274,R.id.weex_id_4273,R.id.weex_id_4272,R.id.weex_id_4271,R.id.weex_id_4270,R.id.weex_id_4269,R.id.weex_id_4268,R.id.weex_id_4267,R.id.weex_id_4266,R.id.weex_id_4265,R.id.weex_id_4264,R.id.weex_id_4263,R.id.weex_id_4262,R.id.weex_id_4261,R.id.weex_id_4260,R.id.weex_id_4259,R.id.weex_id_4258,R.id.weex_id_4257,R.id.weex_id_4256,R.id.weex_id_4255,R.id.weex_id_4254,R.id.weex_id_4253,R.id.weex_id_4252,R.id.weex_id_4251,R.id.weex_id_4250,R.id.weex_id_4249,R.id.weex_id_4248,R.id.weex_id_4247,R.id.weex_id_4246,R.id.weex_id_4245,R.id.weex_id_4244,R.id.weex_id_4243,R.id.weex_id_4242,R.id.weex_id_4241,R.id.weex_id_4240,R.id.weex_id_4239,R.id.weex_id_4238,R.id.weex_id_4237,R.id.weex_id_4236,R.id.weex_id_4235,R.id.weex_id_4234,R.id.weex_id_4233,R.id.weex_id_4232,R.id.weex_id_4231,R.id.weex_id_4230,R.id.weex_id_4229,R.id.weex_id_4228,R.id.weex_id_4227,R.id.weex_id_4226,R.id.weex_id_4225,R.id.weex_id_4224,R.id.weex_id_4223,R.id.weex_id_4222,R.id.weex_id_4221,R.id.weex_id_4220,R.id.weex_id_4219,R.id.weex_id_4218,R.id.weex_id_4217,R.id.weex_id_4216,R.id.weex_id_4215,R.id.weex_id_4214,R.id.weex_id_4213,R.id.weex_id_4212,R.id.weex_id_4211,R.id.weex_id_4210,R.id.weex_id_4209,R.id.weex_id_4208,R.id.weex_id_4207,R.id.weex_id_4206,R.id.weex_id_4205,R.id.weex_id_4204,R.id.weex_id_4203,R.id.weex_id_4202,R.id.weex_id_4201,R.id.weex_id_4200,
+      R.id.weex_id_4199,R.id.weex_id_4198,R.id.weex_id_4197,R.id.weex_id_4196,R.id.weex_id_4195,R.id.weex_id_4194,R.id.weex_id_4193,R.id.weex_id_4192,R.id.weex_id_4191,R.id.weex_id_4190,R.id.weex_id_4189,R.id.weex_id_4188,R.id.weex_id_4187,R.id.weex_id_4186,R.id.weex_id_4185,R.id.weex_id_4184,R.id.weex_id_4183,R.id.weex_id_4182,R.id.weex_id_4181,R.id.weex_id_4180,R.id.weex_id_4179,R.id.weex_id_4178,R.id.weex_id_4177,R.id.weex_id_4176,R.id.weex_id_4175,R.id.weex_id_4174,R.id.weex_id_4173,R.id.weex_id_4172,R.id.weex_id_4171,R.id.weex_id_4170,R.id.weex_id_4169,R.id.weex_id_4168,R.id.weex_id_4167,R.id.weex_id_4166,R.id.weex_id_4165,R.id.weex_id_4164,R.id.weex_id_4163,R.id.weex_id_4162,R.id.weex_id_4161,R.id.weex_id_4160,R.id.weex_id_4159,R.id.weex_id_4158,R.id.weex_id_4157,R.id.weex_id_4156,R.id.weex_id_4155,R.id.weex_id_4154,R.id.weex_id_4153,R.id.weex_id_4152,R.id.weex_id_4151,R.id.weex_id_4150,R.id.weex_id_4149,R.id.weex_id_4148,R.id.weex_id_4147,R.id.weex_id_4146,R.id.weex_id_4145,R.id.weex_id_4144,R.id.weex_id_4143,R.id.weex_id_4142,R.id.weex_id_4141,R.id.weex_id_4140,R.id.weex_id_4139,R.id.weex_id_4138,R.id.weex_id_4137,R.id.weex_id_4136,R.id.weex_id_4135,R.id.weex_id_4134,R.id.weex_id_4133,R.id.weex_id_4132,R.id.weex_id_4131,R.id.weex_id_4130,R.id.weex_id_4129,R.id.weex_id_4128,R.id.weex_id_4127,R.id.weex_id_4126,R.id.weex_id_4125,R.id.weex_id_4124,R.id.weex_id_4123,R.id.weex_id_4122,R.id.weex_id_4121,R.id.weex_id_4120,R.id.weex_id_4119,R.id.weex_id_4118,R.id.weex_id_4117,R.id.weex_id_4116,R.id.weex_id_4115,R.id.weex_id_4114,R.id.weex_id_4113,R.id.weex_id_4112,R.id.weex_id_4111,R.id.weex_id_4110,R.id.weex_id_4109,R.id.weex_id_4108,R.id.weex_id_4107,R.id.weex_id_4106,R.id.weex_id_4105,R.id.weex_id_4104,R.id.weex_id_4103,R.id.weex_id_4102,R.id.weex_id_4101,R.id.weex_id_4100,
+      R.id.weex_id_4099,R.id.weex_id_4098,R.id.weex_id_4097,R.id.weex_id_4096,R.id.weex_id_4095,R.id.weex_id_4094,R.id.weex_id_4093,R.id.weex_id_4092,R.id.weex_id_4091,R.id.weex_id_4090,R.id.weex_id_4089,R.id.weex_id_4088,R.id.weex_id_4087,R.id.weex_id_4086,R.id.weex_id_4085,R.id.weex_id_4084,R.id.weex_id_4083,R.id.weex_id_4082,R.id.weex_id_4081,R.id.weex_id_4080,R.id.weex_id_4079,R.id.weex_id_4078,R.id.weex_id_4077,R.id.weex_id_4076,R.id.weex_id_4075,R.id.weex_id_4074,R.id.weex_id_4073,R.id.weex_id_4072,R.id.weex_id_4071,R.id.weex_id_4070,R.id.weex_id_4069,R.id.weex_id_4068,R.id.weex_id_4067,R.id.weex_id_4066,R.id.weex_id_4065,R.id.weex_id_4064,R.id.weex_id_4063,R.id.weex_id_4062,R.id.weex_id_4061,R.id.weex_id_4060,R.id.weex_id_4059,R.id.weex_id_4058,R.id.weex_id_4057,R.id.weex_id_4056,R.id.weex_id_4055,R.id.weex_id_4054,R.id.weex_id_4053,R.id.weex_id_4052,R.id.weex_id_4051,R.id.weex_id_4050,R.id.weex_id_4049,R.id.weex_id_4048,R.id.weex_id_4047,R.id.weex_id_4046,R.id.weex_id_4045,R.id.weex_id_4044,R.id.weex_id_4043,R.id.weex_id_4042,R.id.weex_id_4041,R.id.weex_id_4040,R.id.weex_id_4039,R.id.weex_id_4038,R.id.weex_id_4037,R.id.weex_id_4036,R.id.weex_id_4035,R.id.weex_id_4034,R.id.weex_id_4033,R.id.weex_id_4032,R.id.weex_id_4031,R.id.weex_id_4030,R.id.weex_id_4029,R.id.weex_id_4028,R.id.weex_id_4027,R.id.weex_id_4026,R.id.weex_id_4025,R.id.weex_id_4024,R.id.weex_id_4023,R.id.weex_id_4022,R.id.weex_id_4021,R.id.weex_id_4020,R.id.weex_id_4019,R.id.weex_id_4018,R.id.weex_id_4017,R.id.weex_id_4016,R.id.weex_id_4015,R.id.weex_id_4014,R.id.weex_id_4013,R.id.weex_id_4012,R.id.weex_id_4011,R.id.weex_id_4010,R.id.weex_id_4009,R.id.weex_id_4008,R.id.weex_id_4007,R.id.weex_id_4006,R.id.weex_id_4005,R.id.weex_id_4004,R.id.weex_id_4003,R.id.weex_id_4002,R.id.weex_id_4001,R.id.weex_id_4000,
+      R.id.weex_id_3999,R.id.weex_id_3998,R.id.weex_id_3997,R.id.weex_id_3996,R.id.weex_id_3995,R.id.weex_id_3994,R.id.weex_id_3993,R.id.weex_id_3992,R.id.weex_id_3991,R.id.weex_id_3990,R.id.weex_id_3989,R.id.weex_id_3988,R.id.weex_id_3987,R.id.weex_id_3986,R.id.weex_id_3985,R.id.weex_id_3984,R.id.weex_id_3983,R.id.weex_id_3982,R.id.weex_id_3981,R.id.weex_id_3980,R.id.weex_id_3979,R.id.weex_id_3978,R.id.weex_id_3977,R.id.weex_id_3976,R.id.weex_id_3975,R.id.weex_id_3974,R.id.weex_id_3973,R.id.weex_id_3972,R.id.weex_id_3971,R.id.weex_id_3970,R.id.weex_id_3969,R.id.weex_id_3968,R.id.weex_id_3967,R.id.weex_id_3966,R.id.weex_id_3965,R.id.weex_id_3964,R.id.weex_id_3963,R.id.weex_id_3962,R.id.weex_id_3961,R.id.weex_id_3960,R.id.weex_id_3959,R.id.weex_id_3958,R.id.weex_id_3957,R.id.weex_id_3956,R.id.weex_id_3955,R.id.weex_id_3954,R.id.weex_id_3953,R.id.weex_id_3952,R.id.weex_id_3951,R.id.weex_id_3950,R.id.weex_id_3949,R.id.weex_id_3948,R.id.weex_id_3947,R.id.weex_id_3946,R.id.weex_id_3945,R.id.weex_id_3944,R.id.weex_id_3943,R.id.weex_id_3942,R.id.weex_id_3941,R.id.weex_id_3940,R.id.weex_id_3939,R.id.weex_id_3938,R.id.weex_id_3937,R.id.weex_id_3936,R.id.weex_id_3935,R.id.weex_id_3934,R.id.weex_id_3933,R.id.weex_id_3932,R.id.weex_id_3931,R.id.weex_id_3930,R.id.weex_id_3929,R.id.weex_id_3928,R.id.weex_id_3927,R.id.weex_id_3926,R.id.weex_id_3925,R.id.weex_id_3924,R.id.weex_id_3923,R.id.weex_id_3922,R.id.weex_id_3921,R.id.weex_id_3920,R.id.weex_id_3919,R.id.weex_id_3918,R.id.weex_id_3917,R.id.weex_id_3916,R.id.weex_id_3915,R.id.weex_id_3914,R.id.weex_id_3913,R.id.weex_id_3912,R.id.weex_id_3911,R.id.weex_id_3910,R.id.weex_id_3909,R.id.weex_id_3908,R.id.weex_id_3907,R.id.weex_id_3906,R.id.weex_id_3905,R.id.weex_id_3904,R.id.weex_id_3903,R.id.weex_id_3902,R.id.weex_id_3901,R.id.weex_id_3900,
+      R.id.weex_id_3899,R.id.weex_id_3898,R.id.weex_id_3897,R.id.weex_id_3896,R.id.weex_id_3895,R.id.weex_id_3894,R.id.weex_id_3893,R.id.weex_id_3892,R.id.weex_id_3891,R.id.weex_id_3890,R.id.weex_id_3889,R.id.weex_id_3888,R.id.weex_id_3887,R.id.weex_id_3886,R.id.weex_id_3885,R.id.weex_id_3884,R.id.weex_id_3883,R.id.weex_id_3882,R.id.weex_id_3881,R.id.weex_id_3880,R.id.weex_id_3879,R.id.weex_id_3878,R.id.weex_id_3877,R.id.weex_id_3876,R.id.weex_id_3875,R.id.weex_id_3874,R.id.weex_id_3873,R.id.weex_id_3872,R.id.weex_id_3871,R.id.weex_id_3870,R.id.weex_id_3869,R.id.weex_id_3868,R.id.weex_id_3867,R.id.weex_id_3866,R.id.weex_id_3865,R.id.weex_id_3864,R.id.weex_id_3863,R.id.weex_id_3862,R.id.weex_id_3861,R.id.weex_id_3860,R.id.weex_id_3859,R.id.weex_id_3858,R.id.weex_id_3857,R.id.weex_id_3856,R.id.weex_id_3855,R.id.weex_id_3854,R.id.weex_id_3853,R.id.weex_id_3852,R.id.weex_id_3851,R.id.weex_id_3850,R.id.weex_id_3849,R.id.weex_id_3848,R.id.weex_id_3847,R.id.weex_id_3846,R.id.weex_id_3845,R.id.weex_id_3844,R.id.weex_id_3843,R.id.weex_id_3842,R.id.weex_id_3841,R.id.weex_id_3840,R.id.weex_id_3839,R.id.weex_id_3838,R.id.weex_id_3837,R.id.weex_id_3836,R.id.weex_id_3835,R.id.weex_id_3834,R.id.weex_id_3833,R.id.weex_id_3832,R.id.weex_id_3831,R.id.weex_id_3830,R.id.weex_id_3829,R.id.weex_id_3828,R.id.weex_id_3827,R.id.weex_id_3826,R.id.weex_id_3825,R.id.weex_id_3824,R.id.weex_id_3823,R.id.weex_id_3822,R.id.weex_id_3821,R.id.weex_id_3820,R.id.weex_id_3819,R.id.weex_id_3818,R.id.weex_id_3817,R.id.weex_id_3816,R.id.weex_id_3815,R.id.weex_id_3814,R.id.weex_id_3813,R.id.weex_id_3812,R.id.weex_id_3811,R.id.weex_id_3810,R.id.weex_id_3809,R.id.weex_id_3808,R.id.weex_id_3807,R.id.weex_id_3806,R.id.weex_id_3805,R.id.weex_id_3804,R.id.weex_id_3803,R.id.weex_id_3802,R.id.weex_id_3801,R.id.weex_id_3800,
+      R.id.weex_id_3799,R.id.weex_id_3798,R.id.weex_id_3797,R.id.weex_id_3796,R.id.weex_id_3795,R.id.weex_id_3794,R.id.weex_id_3793,R.id.weex_id_3792,R.id.weex_id_3791,R.id.weex_id_3790,R.id.weex_id_3789,R.id.weex_id_3788,R.id.weex_id_3787,R.id.weex_id_3786,R.id.weex_id_3785,R.id.weex_id_3784,R.id.weex_id_3783,R.id.weex_id_3782,R.id.weex_id_3781,R.id.weex_id_3780,R.id.weex_id_3779,R.id.weex_id_3778,R.id.weex_id_3777,R.id.weex_id_3776,R.id.weex_id_3775,R.id.weex_id_3774,R.id.weex_id_3773,R.id.weex_id_3772,R.id.weex_id_3771,R.id.weex_id_3770,R.id.weex_id_3769,R.id.weex_id_3768,R.id.weex_id_3767,R.id.weex_id_3766,R.id.weex_id_3765,R.id.weex_id_3764,R.id.weex_id_3763,R.id.weex_id_3762,R.id.weex_id_3761,R.id.weex_id_3760,R.id.weex_id_3759,R.id.weex_id_3758,R.id.weex_id_3757,R.id.weex_id_3756,R.id.weex_id_3755,R.id.weex_id_3754,R.id.weex_id_3753,R.id.weex_id_3752,R.id.weex_id_3751,R.id.weex_id_3750,R.id.weex_id_3749,R.id.weex_id_3748,R.id.weex_id_3747,R.id.weex_id_3746,R.id.weex_id_3745,R.id.weex_id_3744,R.id.weex_id_3743,R.id.weex_id_3742,R.id.weex_id_3741,R.id.weex_id_3740,R.id.weex_id_3739,R.id.weex_id_3738,R.id.weex_id_3737,R.id.weex_id_3736,R.id.weex_id_3735,R.id.weex_id_3734,R.id.weex_id_3733,R.id.weex_id_3732,R.id.weex_id_3731,R.id.weex_id_3730,R.id.weex_id_3729,R.id.weex_id_3728,R.id.weex_id_3727,R.id.weex_id_3726,R.id.weex_id_3725,R.id.weex_id_3724,R.id.weex_id_3723,R.id.weex_id_3722,R.id.weex_id_3721,R.id.weex_id_3720,R.id.weex_id_3719,R.id.weex_id_3718,R.id.weex_id_3717,R.id.weex_id_3716,R.id.weex_id_3715,R.id.weex_id_3714,R.id.weex_id_3713,R.id.weex_id_3712,R.id.weex_id_3711,R.id.weex_id_3710,R.id.weex_id_3709,R.id.weex_id_3708,R.id.weex_id_3707,R.id.weex_id_3706,R.id.weex_id_3705,R.id.weex_id_3704,R.id.weex_id_3703,R.id.weex_id_3702,R.id.weex_id_3701,R.id.weex_id_3700,
+      R.id.weex_id_3699,R.id.weex_id_3698,R.id.weex_id_3697,R.id.weex_id_3696,R.id.weex_id_3695,R.id.weex_id_3694,R.id.weex_id_3693,R.id.weex_id_3692,R.id.weex_id_3691,R.id.weex_id_3690,R.id.weex_id_3689,R.id.weex_id_3688,R.id.weex_id_3687,R.id.weex_id_3686,R.id.weex_id_3685,R.id.weex_id_3684,R.id.weex_id_3683,R.id.weex_id_3682,R.id.weex_id_3681,R.id.weex_id_3680,R.id.weex_id_3679,R.id.weex_id_3678,R.id.weex_id_3677,R.id.weex_id_3676,R.id.weex_id_3675,R.id.weex_id_3674,R.id.weex_id_3673,R.id.weex_id_3672,R.id.weex_id_3671,R.id.weex_id_3670,R.id.weex_id_3669,R.id.weex_id_3668,R.id.weex_id_3667,R.id.weex_id_3666,R.id.weex_id_3665,R.id.weex_id_3664,R.id.weex_id_3663,R.id.weex_id_3662,R.id.weex_id_3661,R.id.weex_id_3660,R.id.weex_id_3659,R.id.weex_id_3658,R.id.weex_id_3657,R.id.weex_id_3656,R.id.weex_id_3655,R.id.weex_id_3654,R.id.weex_id_3653,R.id.weex_id_3652,R.id.weex_id_3651,R.id.weex_id_3650,R.id.weex_id_3649,R.id.weex_id_3648,R.id.weex_id_3647,R.id.weex_id_3646,R.id.weex_id_3645,R.id.weex_id_3644,R.id.weex_id_3643,R.id.weex_id_3642,R.id.weex_id_3641,R.id.weex_id_3640,R.id.weex_id_3639,R.id.weex_id_3638,R.id.weex_id_3637,R.id.weex_id_3636,R.id.weex_id_3635,R.id.weex_id_3634,R.id.weex_id_3633,R.id.weex_id_3632,R.id.weex_id_3631,R.id.weex_id_3630,R.id.weex_id_3629,R.id.weex_id_3628,R.id.weex_id_3627,R.id.weex_id_3626,R.id.weex_id_3625,R.id.weex_id_3624,R.id.weex_id_3623,R.id.weex_id_3622,R.id.weex_id_3621,R.id.weex_id_3620,R.id.weex_id_3619,R.id.weex_id_3618,R.id.weex_id_3617,R.id.weex_id_3616,R.id.weex_id_3615,R.id.weex_id_3614,R.id.weex_id_3613,R.id.weex_id_3612,R.id.weex_id_3611,R.id.weex_id_3610,R.id.weex_id_3609,R.id.weex_id_3608,R.id.weex_id_3607,R.id.weex_id_3606,R.id.weex_id_3605,R.id.weex_id_3604,R.id.weex_id_3603,R.id.weex_id_3602,R.id.weex_id_3601,R.id.weex_id_3600,
+      R.id.weex_id_3599,R.id.weex_id_3598,R.id.weex_id_3597,R.id.weex_id_3596,R.id.weex_id_3595,R.id.weex_id_3594,R.id.weex_id_3593,R.id.weex_id_3592,R.id.weex_id_3591,R.id.weex_id_3590,R.id.weex_id_3589,R.id.weex_id_3588,R.id.weex_id_3587,R.id.weex_id_3586,R.id.weex_id_3585,R.id.weex_id_3584,R.id.weex_id_3583,R.id.weex_id_3582,R.id.weex_id_3581,R.id.weex_id_3580,R.id.weex_id_3579,R.id.weex_id_3578,R.id.weex_id_3577,R.id.weex_id_3576,R.id.weex_id_3575,R.id.weex_id_3574,R.id.weex_id_3573,R.id.weex_id_3572,R.id.weex_id_3571,R.id.weex_id_3570,R.id.weex_id_3569,R.id.weex_id_3568,R.id.weex_id_3567,R.id.weex_id_3566,R.id.weex_id_3565,R.id.weex_id_3564,R.id.weex_id_3563,R.id.weex_id_3562,R.id.weex_id_3561,R.id.weex_id_3560,R.id.weex_id_3559,R.id.weex_id_3558,R.id.weex_id_3557,R.id.weex_id_3556,R.id.weex_id_3555,R.id.weex_id_3554,R.id.weex_id_3553,R.id.weex_id_3552,R.id.weex_id_3551,R.id.weex_id_3550,R.id.weex_id_3549,R.id.weex_id_3548,R.id.weex_id_3547,R.id.weex_id_3546,R.id.weex_id_3545,R.id.weex_id_3544,R.id.weex_id_3543,R.id.weex_id_3542,R.id.weex_id_3541,R.id.weex_id_3540,R.id.weex_id_3539,R.id.weex_id_3538,R.id.weex_id_3537,R.id.weex_id_3536,R.id.weex_id_3535,R.id.weex_id_3534,R.id.weex_id_3533,R.id.weex_id_3532,R.id.weex_id_3531,R.id.weex_id_3530,R.id.weex_id_3529,R.id.weex_id_3528,R.id.weex_id_3527,R.id.weex_id_3526,R.id.weex_id_3525,R.id.weex_id_3524,R.id.weex_id_3523,R.id.weex_id_3522,R.id.weex_id_3521,R.id.weex_id_3520,R.id.weex_id_3519,R.id.weex_id_3518,R.id.weex_id_3517,R.id.weex_id_3516,R.id.weex_id_3515,R.id.weex_id_3514,R.id.weex_id_3513,R.id.weex_id_3512,R.id.weex_id_3511,R.id.weex_id_3510,R.id.weex_id_3509,R.id.weex_id_3508,R.id.weex_id_3507,R.id.weex_id_3506,R.id.weex_id_3505,R.id.weex_id_3504,R.id.weex_id_3503,R.id.weex_id_3502,R.id.weex_id_3501,R.id.weex_id_3500,
+      R.id.weex_id_3499,R.id.weex_id_3498,R.id.weex_id_3497,R.id.weex_id_3496,R.id.weex_id_3495,R.id.weex_id_3494,R.id.weex_id_3493,R.id.weex_id_3492,R.id.weex_id_3491,R.id.weex_id_3490,R.id.weex_id_3489,R.id.weex_id_3488,R.id.weex_id_3487,R.id.weex_id_3486,R.id.weex_id_3485,R.id.weex_id_3484,R.id.weex_id_3483,R.id.weex_id_3482,R.id.weex_id_3481,R.id.weex_id_3480,R.id.weex_id_3479,R.id.weex_id_3478,R.id.weex_id_3477,R.id.weex_id_3476,R.id.weex_id_3475,R.id.weex_id_3474,R.id.weex_id_3473,R.id.weex_id_3472,R.id.weex_id_3471,R.id.weex_id_3470,R.id.weex_id_3469,R.id.weex_id_3468,R.id.weex_id_3467,R.id.weex_id_3466,R.id.weex_id_3465,R.id.weex_id_3464,R.id.weex_id_3463,R.id.weex_id_3462,R.id.weex_id_3461,R.id.weex_id_3460,R.id.weex_id_3459,R.id.weex_id_3458,R.id.weex_id_3457,R.id.weex_id_3456,R.id.weex_id_3455,R.id.weex_id_3454,R.id.weex_id_3453,R.id.weex_id_3452,R.id.weex_id_3451,R.id.weex_id_3450,R.id.weex_id_3449,R.id.weex_id_3448,R.id.weex_id_3447,R.id.weex_id_3446,R.id.weex_id_3445,R.id.weex_id_3444,R.id.weex_id_3443,R.id.weex_id_3442,R.id.weex_id_3441,R.id.weex_id_3440,R.id.weex_id_3439,R.id.weex_id_3438,R.id.weex_id_3437,R.id.weex_id_3436,R.id.weex_id_3435,R.id.weex_id_3434,R.id.weex_id_3433,R.id.weex_id_3432,R.id.weex_id_3431,R.id.weex_id_3430,R.id.weex_id_3429,R.id.weex_id_3428,R.id.weex_id_3427,R.id.weex_id_3426,R.id.weex_id_3425,R.id.weex_id_3424,R.id.weex_id_3423,R.id.weex_id_3422,R.id.weex_id_3421,R.id.weex_id_3420,R.id.weex_id_3419,R.id.weex_id_3418,R.id.weex_id_3417,R.id.weex_id_3416,R.id.weex_id_3415,R.id.weex_id_3414,R.id.weex_id_3413,R.id.weex_id_3412,R.id.weex_id_3411,R.id.weex_id_3410,R.id.weex_id_3409,R.id.weex_id_3408,R.id.weex_id_3407,R.id.weex_id_3406,R.id.weex_id_3405,R.id.weex_id_3404,R.id.weex_id_3403,R.id.weex_id_3402,R.id.weex_id_3401,R.id.weex_id_3400,
+      R.id.weex_id_3399,R.id.weex_id_3398,R.id.weex_id_3397,R.id.weex_id_3396,R.id.weex_id_3395,R.id.weex_id_3394,R.id.weex_id_3393,R.id.weex_id_3392,R.id.weex_id_3391,R.id.weex_id_3390,R.id.weex_id_3389,R.id.weex_id_3388,R.id.weex_id_3387,R.id.weex_id_3386,R.id.weex_id_3385,R.id.weex_id_3384,R.id.weex_id_3383,R.id.weex_id_3382,R.id.weex_id_3381,R.id.weex_id_3380,R.id.weex_id_3379,R.id.weex_id_3378,R.id.weex_id_3377,R.id.weex_id_3376,R.id.weex_id_3375,R.id.weex_id_3374,R.id.weex_id_3373,R.id.weex_id_3372,R.id.weex_id_3371,R.id.weex_id_3370,R.id.weex_id_3369,R.id.weex_id_3368,R.id.weex_id_3367,R.id.weex_id_3366,R.id.weex_id_3365,R.id.weex_id_3364,R.id.weex_id_3363,R.id.weex_id_3362,R.id.weex_id_3361,R.id.weex_id_3360,R.id.weex_id_3359,R.id.weex_id_3358,R.id.weex_id_3357,R.id.weex_id_3356,R.id.weex_id_3355,R.id.weex_id_3354,R.id.weex_id_3353,R.id.weex_id_3352,R.id.weex_id_3351,R.id.weex_id_3350,R.id.weex_id_3349,R.id.weex_id_3348,R.id.weex_id_3347,R.id.weex_id_3346,R.id.weex_id_3345,R.id.weex_id_3344,R.id.weex_id_3343,R.id.weex_id_3342,R.id.weex_id_3341,R.id.weex_id_3340,R.id.weex_id_3339,R.id.weex_id_3338,R.id.weex_id_3337,R.id.weex_id_3336,R.id.weex_id_3335,R.id.weex_id_3334,R.id.weex_id_3333,R.id.weex_id_3332,R.id.weex_id_3331,R.id.weex_id_3330,R.id.weex_id_3329,R.id.weex_id_3328,R.id.weex_id_3327,R.id.weex_id_3326,R.id.weex_id_3325,R.id.weex_id_3324,R.id.weex_id_3323,R.id.weex_id_3322,R.id.weex_id_3321,R.id.weex_id_3320,R.id.weex_id_3319,R.id.weex_id_3318,R.id.weex_id_3317,R.id.weex_id_3316,R.id.weex_id_3315,R.id.weex_id_3314,R.id.weex_id_3313,R.id.weex_id_3312,R.id.weex_id_3311,R.id.weex_id_3310,R.id.weex_id_3309,R.id.weex_id_3308,R.id.weex_id_3307,R.id.weex_id_3306,R.id.weex_id_3305,R.id.weex_id_3304,R.id.weex_id_3303,R.id.weex_id_3302,R.id.weex_id_3301,R.id.weex_id_3300,
+      R.id.weex_id_3299,R.id.weex_id_3298,R.id.weex_id_3297,R.id.weex_id_3296,R.id.weex_id_3295,R.id.weex_id_3294,R.id.weex_id_3293,R.id.weex_id_3292,R.id.weex_id_3291,R.id.weex_id_3290,R.id.weex_id_3289,R.id.weex_id_3288,R.id.weex_id_3287,R.id.weex_id_3286,R.id.weex_id_3285,R.id.weex_id_3284,R.id.weex_id_3283,R.id.weex_id_3282,R.id.weex_id_3281,R.id.weex_id_3280,R.id.weex_id_3279,R.id.weex_id_3278,R.id.weex_id_3277,R.id.weex_id_3276,R.id.weex_id_3275,R.id.weex_id_3274,R.id.weex_id_3273,R.id.weex_id_3272,R.id.weex_id_3271,R.id.weex_id_3270,R.id.weex_id_3269,R.id.weex_id_3268,R.id.weex_id_3267,R.id.weex_id_3266,R.id.weex_id_3265,R.id.weex_id_3264,R.id.weex_id_3263,R.id.weex_id_3262,R.id.weex_id_3261,R.id.weex_id_3260,R.id.weex_id_3259,R.id.weex_id_3258,R.id.weex_id_3257,R.id.weex_id_3256,R.id.weex_id_3255,R.id.weex_id_3254,R.id.weex_id_3253,R.id.weex_id_3252,R.id.weex_id_3251,R.id.weex_id_3250,R.id.weex_id_3249,R.id.weex_id_3248,R.id.weex_id_3247,R.id.weex_id_3246,R.id.weex_id_3245,R.id.weex_id_3244,R.id.weex_id_3243,R.id.weex_id_3242,R.id.weex_id_3241,R.id.weex_id_3240,R.id.weex_id_3239,R.id.weex_id_3238,R.id.weex_id_3237,R.id.weex_id_3236,R.id.weex_id_3235,R.id.weex_id_3234,R.id.weex_id_3233,R.id.weex_id_3232,R.id.weex_id_3231,R.id.weex_id_3230,R.id.weex_id_3229,R.id.weex_id_3228,R.id.weex_id_3227,R.id.weex_id_3226,R.id.weex_id_3225,R.id.weex_id_3224,R.id.weex_id_3223,R.id.weex_id_3222,R.id.weex_id_3221,R.id.weex_id_3220,R.id.weex_id_3219,R.id.weex_id_3218,R.id.weex_id_3217,R.id.weex_id_3216,R.id.weex_id_3215,R.id.weex_id_3214,R.id.weex_id_3213,R.id.weex_id_3212,R.id.weex_id_3211,R.id.weex_id_3210,R.id.weex_id_3209,R.id.weex_id_3208,R.id.weex_id_3207,R.id.weex_id_3206,R.id.weex_id_3205,R.id.weex_id_3204,R.id.weex_id_3203,R.id.weex_id_3202,R.id.weex_id_3201,R.id.weex_id_3200,
+      R.id.weex_id_3199,R.id.weex_id_3198,R.id.weex_id_3197,R.id.weex_id_3196,R.id.weex_id_3195,R.id.weex_id_3194,R.id.weex_id_3193,R.id.weex_id_3192,R.id.weex_id_3191,R.id.weex_id_3190,R.id.weex_id_3189,R.id.weex_id_3188,R.id.weex_id_3187,R.id.weex_id_3186,R.id.weex_id_3185,R.id.weex_id_3184,R.id.weex_id_3183,R.id.weex_id_3182,R.id.weex_id_3181,R.id.weex_id_3180,R.id.weex_id_3179,R.id.weex_id_3178,R.id.weex_id_3177,R.id.weex_id_3176,R.id.weex_id_3175,R.id.weex_id_3174,R.id.weex_id_3173,R.id.weex_id_3172,R.id.weex_id_3171,R.id.weex_id_3170,R.id.weex_id_3169,R.id.weex_id_3168,R.id.weex_id_3167,R.id.weex_id_3166,R.id.weex_id_3165,R.id.weex_id_3164,R.id.weex_id_3163,R.id.weex_id_3162,R.id.weex_id_3161,R.id.weex_id_3160,R.id.weex_id_3159,R.id.weex_id_3158,R.id.weex_id_3157,R.id.weex_id_3156,R.id.weex_id_3155,R.id.weex_id_3154,R.id.weex_id_3153,R.id.weex_id_3152,R.id.weex_id_3151,R.id.weex_id_3150,R.id.weex_id_3149,R.id.weex_id_3148,R.id.weex_id_3147,R.id.weex_id_3146,R.id.weex_id_3145,R.id.weex_id_3144,R.id.weex_id_3143,R.id.weex_id_3142,R.id.weex_id_3141,R.id.weex_id_3140,R.id.weex_id_3139,R.id.weex_id_3138,R.id.weex_id_3137,R.id.weex_id_3136,R.id.weex_id_3135,R.id.weex_id_3134,R.id.weex_id_3133,R.id.weex_id_3132,R.id.weex_id_3131,R.id.weex_id_3130,R.id.weex_id_3129,R.id.weex_id_3128,R.id.weex_id_3127,R.id.weex_id_3126,R.id.weex_id_3125,R.id.weex_id_3124,R.id.weex_id_3123,R.id.weex_id_3122,R.id.weex_id_3121,R.id.weex_id_3120,R.id.weex_id_3119,R.id.weex_id_3118,R.id.weex_id_3117,R.id.weex_id_3116,R.id.weex_id_3115,R.id.weex_id_3114,R.id.weex_id_3113,R.id.weex_id_3112,R.id.weex_id_3111,R.id.weex_id_3110,R.id.weex_id_3109,R.id.weex_id_3108,R.id.weex_id_3107,R.id.weex_id_3106,R.id.weex_id_3105,R.id.weex_id_3104,R.id.weex_id_3103,R.id.weex_id_3102,R.id.weex_id_3101,R.id.weex_id_3100,
+      R.id.weex_id_3099,R.id.weex_id_3098,R.id.weex_id_3097,R.id.weex_id_3096,R.id.weex_id_3095,R.id.weex_id_3094,R.id.weex_id_3093,R.id.weex_id_3092,R.id.weex_id_3091,R.id.weex_id_3090,R.id.weex_id_3089,R.id.weex_id_3088,R.id.weex_id_3087,R.id.weex_id_3086,R.id.weex_id_3085,R.id.weex_id_3084,R.id.weex_id_3083,R.id.weex_id_3082,R.id.weex_id_3081,R.id.weex_id_3080,R.id.weex_id_3079,R.id.weex_id_3078,R.id.weex_id_3077,R.id.weex_id_3076,R.id.weex_id_3075,R.id.weex_id_3074,R.id.weex_id_3073,R.id.weex_id_3072,R.id.weex_id_3071,R.id.weex_id_3070,R.id.weex_id_3069,R.id.weex_id_3068,R.id.weex_id_3067,R.id.weex_id_3066,R.id.weex_id_3065,R.id.weex_id_3064,R.id.weex_id_3063,R.id.weex_id_3062,R.id.weex_id_3061,R.id.weex_id_3060,R.id.weex_id_3059,R.id.weex_id_3058,R.id.weex_id_3057,R.id.weex_id_3056,R.id.weex_id_3055,R.id.weex_id_3054,R.id.weex_id_3053,R.id.weex_id_3052,R.id.weex_id_3051,R.id.weex_id_3050,R.id.weex_id_3049,R.id.weex_id_3048,R.id.weex_id_3047,R.id.weex_id_3046,R.id.weex_id_3045,R.id.weex_id_3044,R.id.weex_id_3043,R.id.weex_id_3042,R.id.weex_id_3041,R.id.weex_id_3040,R.id.weex_id_3039,R.id.weex_id_3038,R.id.weex_id_3037,R.id.weex_id_3036,R.id.weex_id_3035,R.id.weex_id_3034,R.id.weex_id_3033,R.id.weex_id_3032,R.id.weex_id_3031,R.id.weex_id_3030,R.id.weex_id_3029,R.id.weex_id_3028,R.id.weex_id_3027,R.id.weex_id_3026,R.id.weex_id_3025,R.id.weex_id_3024,R.id.weex_id_3023,R.id.weex_id_3022,R.id.weex_id_3021,R.id.weex_id_3020,R.id.weex_id_3019,R.id.weex_id_3018,R.id.weex_id_3017,R.id.weex_id_3016,R.id.weex_id_3015,R.id.weex_id_3014,R.id.weex_id_3013,R.id.weex_id_3012,R.id.weex_id_3011,R.id.weex_id_3010,R.id.weex_id_3009,R.id.weex_id_3008,R.id.weex_id_3007,R.id.weex_id_3006,R.id.weex_id_3005,R.id.weex_id_3004,R.id.weex_id_3003,R.id.weex_id_3002,R.id.weex_id_3001,R.id.weex_id_3000,
+      R.id.weex_id_2999,R.id.weex_id_2998,R.id.weex_id_2997,R.id.weex_id_2996,R.id.weex_id_2995,R.id.weex_id_2994,R.id.weex_id_2993,R.id.weex_id_2992,R.id.weex_id_2991,R.id.weex_id_2990,R.id.weex_id_2989,R.id.weex_id_2988,R.id.weex_id_2987,R.id.weex_id_2986,R.id.weex_id_2985,R.id.weex_id_2984,R.id.weex_id_2983,R.id.weex_id_2982,R.id.weex_id_2981,R.id.weex_id_2980,R.id.weex_id_2979,R.id.weex_id_2978,R.id.weex_id_2977,R.id.weex_id_2976,R.id.weex_id_2975,R.id.weex_id_2974,R.id.weex_id_2973,R.id.weex_id_2972,R.id.weex_id_2971,R.id.weex_id_2970,R.id.weex_id_2969,R.id.weex_id_2968,R.id.weex_id_2967,R.id.weex_id_2966,R.id.weex_id_2965,R.id.weex_id_2964,R.id.weex_id_2963,R.id.weex_id_2962,R.id.weex_id_2961,R.id.weex_id_2960,R.id.weex_id_2959,R.id.weex_id_2958,R.id.weex_id_2957,R.id.weex_id_2956,R.id.weex_id_2955,R.id.weex_id_2954,R.id.weex_id_2953,R.id.weex_id_2952,R.id.weex_id_2951,R.id.weex_id_2950,R.id.weex_id_2949,R.id.weex_id_2948,R.id.weex_id_2947,R.id.weex_id_2946,R.id.weex_id_2945,R.id.weex_id_2944,R.id.weex_id_2943,R.id.weex_id_2942,R.id.weex_id_2941,R.id.weex_id_2940,R.id.weex_id_2939,R.id.weex_id_2938,R.id.weex_id_2937,R.id.weex_id_2936,R.id.weex_id_2935,R.id.weex_id_2934,R.id.weex_id_2933,R.id.weex_id_2932,R.id.weex_id_2931,R.id.weex_id_2930,R.id.weex_id_2929,R.id.weex_id_2928,R.id.weex_id_2927,R.id.weex_id_2926,R.id.weex_id_2925,R.id.weex_id_2924,R.id.weex_id_2923,R.id.weex_id_2922,R.id.weex_id_2921,R.id.weex_id_2920,R.id.weex_id_2919,R.id.weex_id_2918,R.id.weex_id_2917,R.id.weex_id_2916,R.id.weex_id_2915,R.id.weex_id_2914,R.id.weex_id_2913,R.id.weex_id_2912,R.id.weex_id_2911,R.id.weex_id_2910,R.id.weex_id_2909,R.id.weex_id_2908,R.id.weex_id_2907,R.id.weex_id_2906,R.id.weex_id_2905,R.id.weex_id_2904,R.id.weex_id_2903,R.id.weex_id_2902,R.id.weex_id_2901,R.id.weex_id_2900,
+      R.id.weex_id_2899,R.id.weex_id_2898,R.id.weex_id_2897,R.id.weex_id_2896,R.id.weex_id_2895,R.id.weex_id_2894,R.id.weex_id_2893,R.id.weex_id_2892,R.id.weex_id_2891,R.id.weex_id_2890,R.id.weex_id_2889,R.id.weex_id_2888,R.id.weex_id_2887,R.id.weex_id_2886,R.id.weex_id_2885,R.id.weex_id_2884,R.id.weex_id_2883,R.id.weex_id_2882,R.id.weex_id_2881,R.id.weex_id_2880,R.id.weex_id_2879,R.id.weex_id_2878,R.id.weex_id_2877,R.id.weex_id_2876,R.id.weex_id_2875,R.id.weex_id_2874,R.id.weex_id_2873,R.id.weex_id_2872,R.id.weex_id_2871,R.id.weex_id_2870,R.id.weex_id_2869,R.id.weex_id_2868,R.id.weex_id_2867,R.id.weex_id_2866,R.id.weex_id_2865,R.id.weex_id_2864,R.id.weex_id_2863,R.id.weex_id_2862,R.id.weex_id_2861,R.id.weex_id_2860,R.id.weex_id_2859,R.id.weex_id_2858,R.id.weex_id_2857,R.id.weex_id_2856,R.id.weex_id_2855,R.id.weex_id_2854,R.id.weex_id_2853,R.id.weex_id_2852,R.id.weex_id_2851,R.id.weex_id_2850,R.id.weex_id_2849,R.id.weex_id_2848,R.id.weex_id_2847,R.id.weex_id_2846,R.id.weex_id_2845,R.id.weex_id_2844,R.id.weex_id_2843,R.id.weex_id_2842,R.id.weex_id_2841,R.id.weex_id_2840,R.id.weex_id_2839,R.id.weex_id_2838,R.id.weex_id_2837,R.id.weex_id_2836,R.id.weex_id_2835,R.id.weex_id_2834,R.id.weex_id_2833,R.id.weex_id_2832,R.id.weex_id_2831,R.id.weex_id_2830,R.id.weex_id_2829,R.id.weex_id_2828,R.id.weex_id_2827,R.id.weex_id_2826,R.id.weex_id_2825,R.id.weex_id_2824,R.id.weex_id_2823,R.id.weex_id_2822,R.id.weex_id_2821,R.id.weex_id_2820,R.id.weex_id_2819,R.id.weex_id_2818,R.id.weex_id_2817,R.id.weex_id_2816,R.id.weex_id_2815,R.id.weex_id_2814,R.id.weex_id_2813,R.id.weex_id_2812,R.id.weex_id_2811,R.id.weex_id_2810,R.id.weex_id_2809,R.id.weex_id_2808,R.id.weex_id_2807,R.id.weex_id_2806,R.id.weex_id_2805,R.id.weex_id_2804,R.id.weex_id_2803,R.id.weex_id_2802,R.id.weex_id_2801,R.id.weex_id_2800,
+      R.id.weex_id_2799,R.id.weex_id_2798,R.id.weex_id_2797,R.id.weex_id_2796,R.id.weex_id_2795,R.id.weex_id_2794,R.id.weex_id_2793,R.id.weex_id_2792,R.id.weex_id_2791,R.id.weex_id_2790,R.id.weex_id_2789,R.id.weex_id_2788,R.id.weex_id_2787,R.id.weex_id_2786,R.id.weex_id_2785,R.id.weex_id_2784,R.id.weex_id_2783,R.id.weex_id_2782,R.id.weex_id_2781,R.id.weex_id_2780,R.id.weex_id_2779,R.id.weex_id_2778,R.id.weex_id_2777,R.id.weex_id_2776,R.id.weex_id_2775,R.id.weex_id_2774,R.id.weex_id_2773,R.id.weex_id_2772,R.id.weex_id_2771,R.id.weex_id_2770,R.id.weex_id_2769,R.id.weex_id_2768,R.id.weex_id_2767,R.id.weex_id_2766,R.id.weex_id_2765,R.id.weex_id_2764,R.id.weex_id_2763,R.id.weex_id_2762,R.id.weex_id_2761,R.id.weex_id_2760,R.id.weex_id_2759,R.id.weex_id_2758,R.id.weex_id_2757,R.id.weex_id_2756,R.id.weex_id_2755,R.id.weex_id_2754,R.id.weex_id_2753,R.id.weex_id_2752,R.id.weex_id_2751,R.id.weex_id_2750,R.id.weex_id_2749,R.id.weex_id_2748,R.id.weex_id_2747,R.id.weex_id_2746,R.id.weex_id_2745,R.id.weex_id_2744,R.id.weex_id_2743,R.id.weex_id_2742,R.id.weex_id_2741,R.id.weex_id_2740,R.id.weex_id_2739,R.id.weex_id_2738,R.id.weex_id_2737,R.id.weex_id_2736,R.id.weex_id_2735,R.id.weex_id_2734,R.id.weex_id_2733,R.id.weex_id_2732,R.id.weex_id_2731,R.id.weex_id_2730,R.id.weex_id_2729,R.id.weex_id_2728,R.id.weex_id_2727,R.id.weex_id_2726,R.id.weex_id_2725,R.id.weex_id_2724,R.id.weex_id_2723,R.id.weex_id_2722,R.id.weex_id_2721,R.id.weex_id_2720,R.id.weex_id_2719,R.id.weex_id_2718,R.id.weex_id_2717,R.id.weex_id_2716,R.id.weex_id_2715,R.id.weex_id_2714,R.id.weex_id_2713,R.id.weex_id_2712,R.id.weex_id_2711,R.id.weex_id_2710,R.id.weex_id_2709,R.id.weex_id_2708,R.id.weex_id_2707,R.id.weex_id_2706,R.id.weex_id_2705,R.id.weex_id_2704,R.id.weex_id_2703,R.id.weex_id_2702,R.id.weex_id_2701,R.id.weex_id_2700,
+      R.id.weex_id_2699,R.id.weex_id_2698,R.id.weex_id_2697,R.id.weex_id_2696,R.id.weex_id_2695,R.id.weex_id_2694,R.id.weex_id_2693,R.id.weex_id_2692,R.id.weex_id_2691,R.id.weex_id_2690,R.id.weex_id_2689,R.id.weex_id_2688,R.id.weex_id_2687,R.id.weex_id_2686,R.id.weex_id_2685,R.id.weex_id_2684,R.id.weex_id_2683,R.id.weex_id_2682,R.id.weex_id_2681,R.id.weex_id_2680,R.id.weex_id_2679,R.id.weex_id_2678,R.id.weex_id_2677,R.id.weex_id_2676,R.id.weex_id_2675,R.id.weex_id_2674,R.id.weex_id_2673,R.id.weex_id_2672,R.id.weex_id_2671,R.id.weex_id_2670,R.id.weex_id_2669,R.id.weex_id_2668,R.id.weex_id_2667,R.id.weex_id_2666,R.id.weex_id_2665,R.id.weex_id_2664,R.id.weex_id_2663,R.id.weex_id_2662,R.id.weex_id_2661,R.id.weex_id_2660,R.id.weex_id_2659,R.id.weex_id_2658,R.id.weex_id_2657,R.id.weex_id_2656,R.id.weex_id_2655,R.id.weex_id_2654,R.id.weex_id_2653,R.id.weex_id_2652,R.id.weex_id_2651,R.id.weex_id_2650,R.id.weex_id_2649,R.id.weex_id_2648,R.id.weex_id_2647,R.id.weex_id_2646,R.id.weex_id_2645,R.id.weex_id_2644,R.id.weex_id_2643,R.id.weex_id_2642,R.id.weex_id_2641,R.id.weex_id_2640,R.id.weex_id_2639,R.id.weex_id_2638,R.id.weex_id_2637,R.id.weex_id_2636,R.id.weex_id_2635,R.id.weex_id_2634,R.id.weex_id_2633,R.id.weex_id_2632,R.id.weex_id_2631,R.id.weex_id_2630,R.id.weex_id_2629,R.id.weex_id_2628,R.id.weex_id_2627,R.id.weex_id_2626,R.id.weex_id_2625,R.id.weex_id_2624,R.id.weex_id_2623,R.id.weex_id_2622,R.id.weex_id_2621,R.id.weex_id_2620,R.id.weex_id_2619,R.id.weex_id_2618,R.id.weex_id_2617,R.id.weex_id_2616,R.id.weex_id_2615,R.id.weex_id_2614,R.id.weex_id_2613,R.id.weex_id_2612,R.id.weex_id_2611,R.id.weex_id_2610,R.id.weex_id_2609,R.id.weex_id_2608,R.id.weex_id_2607,R.id.weex_id_2606,R.id.weex_id_2605,R.id.weex_id_2604,R.id.weex_id_2603,R.id.weex_id_2602,R.id.weex_id_2601,R.id.weex_id_2600,
+      R.id.weex_id_2599,R.id.weex_id_2598,R.id.weex_id_2597,R.id.weex_id_2596,R.id.weex_id_2595,R.id.weex_id_2594,R.id.weex_id_2593,R.id.weex_id_2592,R.id.weex_id_2591,R.id.weex_id_2590,R.id.weex_id_2589,R.id.weex_id_2588,R.id.weex_id_2587,R.id.weex_id_2586,R.id.weex_id_2585,R.id.weex_id_2584,R.id.weex_id_2583,R.id.weex_id_2582,R.id.weex_id_2581,R.id.weex_id_2580,R.id.weex_id_2579,R.id.weex_id_2578,R.id.weex_id_2577,R.id.weex_id_2576,R.id.weex_id_2575,R.id.weex_id_2574,R.id.weex_id_2573,R.id.weex_id_2572,R.id.weex_id_2571,R.id.weex_id_2570,R.id.weex_id_2569,R.id.weex_id_2568,R.id.weex_id_2567,R.id.weex_id_2566,R.id.weex_id_2565,R.id.weex_id_2564,R.id.weex_id_2563,R.id.weex_id_2562,R.id.weex_id_2561,R.id.weex_id_2560,R.id.weex_id_2559,R.id.weex_id_2558,R.id.weex_id_2557,R.id.weex_id_2556,R.id.weex_id_2555,R.id.weex_id_2554,R.id.weex_id_2553,R.id.weex_id_2552,R.id.weex_id_2551,R.id.weex_id_2550,R.id.weex_id_2549,R.id.weex_id_2548,R.id.weex_id_2547,R.id.weex_id_2546,R.id.weex_id_2545,R.id.weex_id_2544,R.id.weex_id_2543,R.id.weex_id_2542,R.id.weex_id_2541,R.id.weex_id_2540,R.id.weex_id_2539,R.id.weex_id_2538,R.id.weex_id_2537,R.id.weex_id_2536,R.id.weex_id_2535,R.id.weex_id_2534,R.id.weex_id_2533,R.id.weex_id_2532,R.id.weex_id_2531,R.id.weex_id_2530,R.id.weex_id_2529,R.id.weex_id_2528,R.id.weex_id_2527,R.id.weex_id_2526,R.id.weex_id_2525,R.id.weex_id_2524,R.id.weex_id_2523,R.id.weex_id_2522,R.id.weex_id_2521,R.id.weex_id_2520,R.id.weex_id_2519,R.id.weex_id_2518,R.id.weex_id_2517,R.id.weex_id_2516,R.id.weex_id_2515,R.id.weex_id_2514,R.id.weex_id_2513,R.id.weex_id_2512,R.id.weex_id_2511,R.id.weex_id_2510,R.id.weex_id_2509,R.id.weex_id_2508,R.id.weex_id_2507,R.id.weex_id_2506,R.id.weex_id_2505,R.id.weex_id_2504,R.id.weex_id_2503,R.id.weex_id_2502,R.id.weex_id_2501,R.id.weex_id_2500,
+      R.id.weex_id_2499,R.id.weex_id_2498,R.id.weex_id_2497,R.id.weex_id_2496,R.id.weex_id_2495,R.id.weex_id_2494,R.id.weex_id_2493,R.id.weex_id_2492,R.id.weex_id_2491,R.id.weex_id_2490,R.id.weex_id_2489,R.id.weex_id_2488,R.id.weex_id_2487,R.id.weex_id_2486,R.id.weex_id_2485,R.id.weex_id_2484,R.id.weex_id_2483,R.id.weex_id_2482,R.id.weex_id_2481,R.id.weex_id_2480,R.id.weex_id_2479,R.id.weex_id_2478,R.id.weex_id_2477,R.id.weex_id_2476,R.id.weex_id_2475,R.id.weex_id_2474,R.id.weex_id_2473,R.id.weex_id_2472,R.id.weex_id_2471,R.id.weex_id_2470,R.id.weex_id_2469,R.id.weex_id_2468,R.id.weex_id_2467,R.id.weex_id_2466,R.id.weex_id_2465,R.id.weex_id_2464,R.id.weex_id_2463,R.id.weex_id_2462,R.id.weex_id_2461,R.id.weex_id_2460,R.id.weex_id_2459,R.id.weex_id_2458,R.id.weex_id_2457,R.id.weex_id_2456,R.id.weex_id_2455,R.id.weex_id_2454,R.id.weex_id_2453,R.id.weex_id_2452,R.id.weex_id_2451,R.id.weex_id_2450,R.id.weex_id_2449,R.id.weex_id_2448,R.id.weex_id_2447,R.id.weex_id_2446,R.id.weex_id_2445,R.id.weex_id_2444,R.id.weex_id_2443,R.id.weex_id_2442,R.id.weex_id_2441,R.id.weex_id_2440,R.id.weex_id_2439,R.id.weex_id_2438,R.id.weex_id_2437,R.id.weex_id_2436,R.id.weex_id_2435,R.id.weex_id_2434,R.id.weex_id_2433,R.id.weex_id_2432,R.id.weex_id_2431,R.id.weex_id_2430,R.id.weex_id_2429,R.id.weex_id_2428,R.id.weex_id_2427,R.id.weex_id_2426,R.id.weex_id_2425,R.id.weex_id_2424,R.id.weex_id_2423,R.id.weex_id_2422,R.id.weex_id_2421,R.id.weex_id_2420,R.id.weex_id_2419,R.id.weex_id_2418,R.id.weex_id_2417,R.id.weex_id_2416,R.id.weex_id_2415,R.id.weex_id_2414,R.id.weex_id_2413,R.id.weex_id_2412,R.id.weex_id_2411,R.id.weex_id_2410,R.id.weex_id_2409,R.id.weex_id_2408,R.id.weex_id_2407,R.id.weex_id_2406,R.id.weex_id_2405,R.id.weex_id_2404,R.id.weex_id_2403,R.id.weex_id_2402,R.id.weex_id_2401,R.id.weex_id_2400,
+      R.id.weex_id_2399,R.id.weex_id_2398,R.id.weex_id_2397,R.id.weex_id_2396,R.id.weex_id_2395,R.id.weex_id_2394,R.id.weex_id_2393,R.id.weex_id_2392,R.id.weex_id_2391,R.id.weex_id_2390,R.id.weex_id_2389,R.id.weex_id_2388,R.id.weex_id_2387,R.id.weex_id_2386,R.id.weex_id_2385,R.id.weex_id_2384,R.id.weex_id_2383,R.id.weex_id_2382,R.id.weex_id_2381,R.id.weex_id_2380,R.id.weex_id_2379,R.id.weex_id_2378,R.id.weex_id_2377,R.id.weex_id_2376,R.id.weex_id_2375,R.id.weex_id_2374,R.id.weex_id_2373,R.id.weex_id_2372,R.id.weex_id_2371,R.id.weex_id_2370,R.id.weex_id_2369,R.id.weex_id_2368,R.id.weex_id_2367,R.id.weex_id_2366,R.id.weex_id_2365,R.id.weex_id_2364,R.id.weex_id_2363,R.id.weex_id_2362,R.id.weex_id_2361,R.id.weex_id_2360,R.id.weex_id_2359,R.id.weex_id_2358,R.id.weex_id_2357,R.id.weex_id_2356,R.id.weex_id_2355,R.id.weex_id_2354,R.id.weex_id_2353,R.id.weex_id_2352,R.id.weex_id_2351,R.id.weex_id_2350,R.id.weex_id_2349,R.id.weex_id_2348,R.id.weex_id_2347,R.id.weex_id_2346,R.id.weex_id_2345,R.id.weex_id_2344,R.id.weex_id_2343,R.id.weex_id_2342,R.id.weex_id_2341,R.id.weex_id_2340,R.id.weex_id_2339,R.id.weex_id_2338,R.id.weex_id_2337,R.id.weex_id_2336,R.id.weex_id_2335,R.id.weex_id_2334,R.id.weex_id_2333,R.id.weex_id_2332,R.id.weex_id_2331,R.id.weex_id_2330,R.id.weex_id_2329,R.id.weex_id_2328,R.id.weex_id_2327,R.id.weex_id_2326,R.id.weex_id_2325,R.id.weex_id_2324,R.id.weex_id_2323,R.id.weex_id_2322,R.id.weex_id_2321,R.id.weex_id_2320,R.id.weex_id_2319,R.id.weex_id_2318,R.id.weex_id_2317,R.id.weex_id_2316,R.id.weex_id_2315,R.id.weex_id_2314,R.id.weex_id_2313,R.id.weex_id_2312,R.id.weex_id_2311,R.id.weex_id_2310,R.id.weex_id_2309,R.id.weex_id_2308,R.id.weex_id_2307,R.id.weex_id_2306,R.id.weex_id_2305,R.id.weex_id_2304,R.id.weex_id_2303,R.id.weex_id_2302,R.id.weex_id_2301,R.id.weex_id_2300,
+      R.id.weex_id_2299,R.id.weex_id_2298,R.id.weex_id_2297,R.id.weex_id_2296,R.id.weex_id_2295,R.id.weex_id_2294,R.id.weex_id_2293,R.id.weex_id_2292,R.id.weex_id_2291,R.id.weex_id_2290,R.id.weex_id_2289,R.id.weex_id_2288,R.id.weex_id_2287,R.id.weex_id_2286,R.id.weex_id_2285,R.id.weex_id_2284,R.id.weex_id_2283,R.id.weex_id_2282,R.id.weex_id_2281,R.id.weex_id_2280,R.id.weex_id_2279,R.id.weex_id_2278,R.id.weex_id_2277,R.id.weex_id_2276,R.id.weex_id_2275,R.id.weex_id_2274,R.id.weex_id_2273,R.id.weex_id_2272,R.id.weex_id_2271,R.id.weex_id_2270,R.id.weex_id_2269,R.id.weex_id_2268,R.id.weex_id_2267,R.id.weex_id_2266,R.id.weex_id_2265,R.id.weex_id_2264,R.id.weex_id_2263,R.id.weex_id_2262,R.id.weex_id_2261,R.id.weex_id_2260,R.id.weex_id_2259,R.id.weex_id_2258,R.id.weex_id_2257,R.id.weex_id_2256,R.id.weex_id_2255,R.id.weex_id_2254,R.id.weex_id_2253,R.id.weex_id_2252,R.id.weex_id_2251,R.id.weex_id_2250,R.id.weex_id_2249,R.id.weex_id_2248,R.id.weex_id_2247,R.id.weex_id_2246,R.id.weex_id_2245,R.id.weex_id_2244,R.id.weex_id_2243,R.id.weex_id_2242,R.id.weex_id_2241,R.id.weex_id_2240,R.id.weex_id_2239,R.id.weex_id_2238,R.id.weex_id_2237,R.id.weex_id_2236,R.id.weex_id_2235,R.id.weex_id_2234,R.id.weex_id_2233,R.id.weex_id_2232,R.id.weex_id_2231,R.id.weex_id_2230,R.id.weex_id_2229,R.id.weex_id_2228,R.id.weex_id_2227,R.id.weex_id_2226,R.id.weex_id_2225,R.id.weex_id_2224,R.id.weex_id_2223,R.id.weex_id_2222,R.id.weex_id_2221,R.id.weex_id_2220,R.id.weex_id_2219,R.id.weex_id_2218,R.id.weex_id_2217,R.id.weex_id_2216,R.id.weex_id_2215,R.id.weex_id_2214,R.id.weex_id_2213,R.id.weex_id_2212,R.id.weex_id_2211,R.id.weex_id_2210,R.id.weex_id_2209,R.id.weex_id_2208,R.id.weex_id_2207,R.id.weex_id_2206,R.id.weex_id_2205,R.id.weex_id_2204,R.id.weex_id_2203,R.id.weex_id_2202,R.id.weex_id_2201,R.id.weex_id_2200,
+      R.id.weex_id_2199,R.id.weex_id_2198,R.id.weex_id_2197,R.id.weex_id_2196,R.id.weex_id_2195,R.id.weex_id_2194,R.id.weex_id_2193,R.id.weex_id_2192,R.id.weex_id_2191,R.id.weex_id_2190,R.id.weex_id_2189,R.id.weex_id_2188,R.id.weex_id_2187,R.id.weex_id_2186,R.id.weex_id_2185,R.id.weex_id_2184,R.id.weex_id_2183,R.id.weex_id_2182,R.id.weex_id_2181,R.id.weex_id_2180,R.id.weex_id_2179,R.id.weex_id_2178,R.id.weex_id_2177,R.id.weex_id_2176,R.id.weex_id_2175,R.id.weex_id_2174,R.id.weex_id_2173,R.id.weex_id_2172,R.id.weex_id_2171,R.id.weex_id_2170,R.id.weex_id_2169,R.id.weex_id_2168,R.id.weex_id_2167,R.id.weex_id_2166,R.id.weex_id_2165,R.id.weex_id_2164,R.id.weex_id_2163,R.id.weex_id_2162,R.id.weex_id_2161,R.id.weex_id_2160,R.id.weex_id_2159,R.id.weex_id_2158,R.id.weex_id_2157,R.id.weex_id_2156,R.id.weex_id_2155,R.id.weex_id_2154,R.id.weex_id_2153,R.id.weex_id_2152,R.id.weex_id_2151,R.id.weex_id_2150,R.id.weex_id_2149,R.id.weex_id_2148,R.id.weex_id_2147,R.id.weex_id_2146,R.id.weex_id_2145,R.id.weex_id_2144,R.id.weex_id_2143,R.id.weex_id_2142,R.id.weex_id_2141,R.id.weex_id_2140,R.id.weex_id_2139,R.id.weex_id_2138,R.id.weex_id_2137,R.id.weex_id_2136,R.id.weex_id_2135,R.id.weex_id_2134,R.id.weex_id_2133,R.id.weex_id_2132,R.id.weex_id_2131,R.id.weex_id_2130,R.id.weex_id_2129,R.id.weex_id_2128,R.id.weex_id_2127,R.id.weex_id_2126,R.id.weex_id_2125,R.id.weex_id_2124,R.id.weex_id_2123,R.id.weex_id_2122,R.id.weex_id_2121,R.id.weex_id_2120,R.id.weex_id_2119,R.id.weex_id_2118,R.id.weex_id_2117,R.id.weex_id_2116,R.id.weex_id_2115,R.id.weex_id_2114,R.id.weex_id_2113,R.id.weex_id_2112,R.id.weex_id_2111,R.id.weex_id_2110,R.id.weex_id_2109,R.id.weex_id_2108,R.id.weex_id_2107,R.id.weex_id_2106,R.id.weex_id_2105,R.id.weex_id_2104,R.id.weex_id_2103,R.id.weex_id_2102,R.id.weex_id_2101,R.id.weex_id_2100,
+      R.id.weex_id_2099,R.id.weex_id_2098,R.id.weex_id_2097,R.id.weex_id_2096,R.id.weex_id_2095,R.id.weex_id_2094,R.id.weex_id_2093,R.id.weex_id_2092,R.id.weex_id_2091,R.id.weex_id_2090,R.id.weex_id_2089,R.id.weex_id_2088,R.id.weex_id_2087,R.id.weex_id_2086,R.id.weex_id_2085,R.id.weex_id_2084,R.id.weex_id_2083,R.id.weex_id_2082,R.id.weex_id_2081,R.id.weex_id_2080,R.id.weex_id_2079,R.id.weex_id_2078,R.id.weex_id_2077,R.id.weex_id_2076,R.id.weex_id_2075,R.id.weex_id_2074,R.id.weex_id_2073,R.id.weex_id_2072,R.id.weex_id_2071,R.id.weex_id_2070,R.id.weex_id_2069,R.id.weex_id_2068,R.id.weex_id_2067,R.id.weex_id_2066,R.id.weex_id_2065,R.id.weex_id_2064,R.id.weex_id_2063,R.id.weex_id_2062,R.id.weex_id_2061,R.id.weex_id_2060,R.id.weex_id_2059,R.id.weex_id_2058,R.id.weex_id_2057,R.id.weex_id_2056,R.id.weex_id_2055,R.id.weex_id_2054,R.id.weex_id_2053,R.id.weex_id_2052,R.id.weex_id_2051,R.id.weex_id_2050,R.id.weex_id_2049,R.id.weex_id_2048,R.id.weex_id_2047,R.id.weex_id_2046,R.id.weex_id_2045,R.id.weex_id_2044,R.id.weex_id_2043,R.id.weex_id_2042,R.id.weex_id_2041,R.id.weex_id_2040,R.id.weex_id_2039,R.id.weex_id_2038,R.id.weex_id_2037,R.id.weex_id_2036,R.id.weex_id_2035,R.id.weex_id_2034,R.id.weex_id_2033,R.id.weex_id_2032,R.id.weex_id_2031,R.id.weex_id_2030,R.id.weex_id_2029,R.id.weex_id_2028,R.id.weex_id_2027,R.id.weex_id_2026,R.id.weex_id_2025,R.id.weex_id_2024,R.id.weex_id_2023,R.id.weex_id_2022,R.id.weex_id_2021,R.id.weex_id_2020,R.id.weex_id_2019,R.id.weex_id_2018,R.id.weex_id_2017,R.id.weex_id_2016,R.id.weex_id_2015,R.id.weex_id_2014,R.id.weex_id_2013,R.id.weex_id_2012,R.id.weex_id_2011,R.id.weex_id_2010,R.id.weex_id_2009,R.id.weex_id_2008,R.id.weex_id_2007,R.id.weex_id_2006,R.id.weex_id_2005,R.id.weex_id_2004,R.id.weex_id_2003,R.id.weex_id_2002,R.id.weex_id_2001,R.id.weex_id_2000,
+      R.id.weex_id_1999,R.id.weex_id_1998,R.id.weex_id_1997,R.id.weex_id_1996,R.id.weex_id_1995,R.id.weex_id_1994,R.id.weex_id_1993,R.id.weex_id_1992,R.id.weex_id_1991,R.id.weex_id_1990,R.id.weex_id_1989,R.id.weex_id_1988,R.id.weex_id_1987,R.id.weex_id_1986,R.id.weex_id_1985,R.id.weex_id_1984,R.id.weex_id_1983,R.id.weex_id_1982,R.id.weex_id_1981,R.id.weex_id_1980,R.id.weex_id_1979,R.id.weex_id_1978,R.id.weex_id_1977,R.id.weex_id_1976,R.id.weex_id_1975,R.id.weex_id_1974,R.id.weex_id_1973,R.id.weex_id_1972,R.id.weex_id_1971,R.id.weex_id_1970,R.id.weex_id_1969,R.id.weex_id_1968,R.id.weex_id_1967,R.id.weex_id_1966,R.id.weex_id_1965,R.id.weex_id_1964,R.id.weex_id_1963,R.id.weex_id_1962,R.id.weex_id_1961,R.id.weex_id_1960,R.id.weex_id_1959,R.id.weex_id_1958,R.id.weex_id_1957,R.id.weex_id_1956,R.id.weex_id_1955,R.id.weex_id_1954,R.id.weex_id_1953,R.id.weex_id_1952,R.id.weex_id_1951,R.id.weex_id_1950,R.id.weex_id_1949,R.id.weex_id_1948,R.id.weex_id_1947,R.id.weex_id_1946,R.id.weex_id_1945,R.id.weex_id_1944,R.id.weex_id_1943,R.id.weex_id_1942,R.id.weex_id_1941,R.id.weex_id_1940,R.id.weex_id_1939,R.id.weex_id_1938,R.id.weex_id_1937,R.id.weex_id_1936,R.id.weex_id_1935,R.id.weex_id_1934,R.id.weex_id_1933,R.id.weex_id_1932,R.id.weex_id_1931,R.id.weex_id_1930,R.id.weex_id_1929,R.id.weex_id_1928,R.id.weex_id_1927,R.id.weex_id_1926,R.id.weex_id_1925,R.id.weex_id_1924,R.id.weex_id_1923,R.id.weex_id_1922,R.id.weex_id_1921,R.id.weex_id_1920,R.id.weex_id_1919,R.id.weex_id_1918,R.id.weex_id_1917,R.id.weex_id_1916,R.id.weex_id_1915,R.id.weex_id_1914,R.id.weex_id_1913,R.id.weex_id_1912,R.id.weex_id_1911,R.id.weex_id_1910,R.id.weex_id_1909,R.id.weex_id_1908,R.id.weex_id_1907,R.id.weex_id_1906,R.id.weex_id_1905,R.id.weex_id_1904,R.id.weex_id_1903,R.id.weex_id_1902,R.id.weex_id_1901,R.id.weex_id_1900,
+      R.id.weex_id_1899,R.id.weex_id_1898,R.id.weex_id_1897,R.id.weex_id_1896,R.id.weex_id_1895,R.id.weex_id_1894,R.id.weex_id_1893,R.id.weex_id_1892,R.id.weex_id_1891,R.id.weex_id_1890,R.id.weex_id_1889,R.id.weex_id_1888,R.id.weex_id_1887,R.id.weex_id_1886,R.id.weex_id_1885,R.id.weex_id_1884,R.id.weex_id_1883,R.id.weex_id_1882,R.id.weex_id_1881,R.id.weex_id_1880,R.id.weex_id_1879,R.id.weex_id_1878,R.id.weex_id_1877,R.id.weex_id_1876,R.id.weex_id_1875,R.id.weex_id_1874,R.id.weex_id_1873,R.id.weex_id_1872,R.id.weex_id_1871,R.id.weex_id_1870,R.id.weex_id_1869,R.id.weex_id_1868,R.id.weex_id_1867,R.id.weex_id_1866,R.id.weex_id_1865,R.id.weex_id_1864,R.id.weex_id_1863,R.id.weex_id_1862,R.id.weex_id_1861,R.id.weex_id_1860,R.id.weex_id_1859,R.id.weex_id_1858,R.id.weex_id_1857,R.id.weex_id_1856,R.id.weex_id_1855,R.id.weex_id_1854,R.id.weex_id_1853,R.id.weex_id_1852,R.id.weex_id_1851,R.id.weex_id_1850,R.id.weex_id_1849,R.id.weex_id_1848,R.id.weex_id_1847,R.id.weex_id_1846,R.id.weex_id_1845,R.id.weex_id_1844,R.id.weex_id_1843,R.id.weex_id_1842,R.id.weex_id_1841,R.id.weex_id_1840,R.id.weex_id_1839,R.id.weex_id_1838,R.id.weex_id_1837,R.id.weex_id_1836,R.id.weex_id_1835,R.id.weex_id_1834,R.id.weex_id_1833,R.id.weex_id_1832,R.id.weex_id_1831,R.id.weex_id_1830,R.id.weex_id_1829,R.id.weex_id_1828,R.id.weex_id_1827,R.id.weex_id_1826,R.id.weex_id_1825,R.id.weex_id_1824,R.id.weex_id_1823,R.id.weex_id_1822,R.id.weex_id_1821,R.id.weex_id_1820,R.id.weex_id_1819,R.id.weex_id_1818,R.id.weex_id_1817,R.id.weex_id_1816,R.id.weex_id_1815,R.id.weex_id_1814,R.id.weex_id_1813,R.id.weex_id_1812,R.id.weex_id_1811,R.id.weex_id_1810,R.id.weex_id_1809,R.id.weex_id_1808,R.id.weex_id_1807,R.id.weex_id_1806,R.id.weex_id_1805,R.id.weex_id_1804,R.id.weex_id_1803,R.id.weex_id_1802,R.id.weex_id_1801,R.id.weex_id_1800,
+      R.id.weex_id_1799,R.id.weex_id_1798,R.id.weex_id_1797,R.id.weex_id_1796,R.id.weex_id_1795,R.id.weex_id_1794,R.id.weex_id_1793,R.id.weex_id_1792,R.id.weex_id_1791,R.id.weex_id_1790,R.id.weex_id_1789,R.id.weex_id_1788,R.id.weex_id_1787,R.id.weex_id_1786,R.id.weex_id_1785,R.id.weex_id_1784,R.id.weex_id_1783,R.id.weex_id_1782,R.id.weex_id_1781,R.id.weex_id_1780,R.id.weex_id_1779,R.id.weex_id_1778,R.id.weex_id_1777,R.id.weex_id_1776,R.id.weex_id_1775,R.id.weex_id_1774,R.id.weex_id_1773,R.id.weex_id_1772,R.id.weex_id_1771,R.id.weex_id_1770,R.id.weex_id_1769,R.id.weex_id_1768,R.id.weex_id_1767,R.id.weex_id_1766,R.id.weex_id_1765,R.id.weex_id_1764,R.id.weex_id_1763,R.id.weex_id_1762,R.id.weex_id_1761,R.id.weex_id_1760,R.id.weex_id_1759,R.id.weex_id_1758,R.id.weex_id_1757,R.id.weex_id_1756,R.id.weex_id_1755,R.id.weex_id_1754,R.id.weex_id_1753,R.id.weex_id_1752,R.id.weex_id_1751,R.id.weex_id_1750,R.id.weex_id_1749,R.id.weex_id_1748,R.id.weex_id_1747,R.id.weex_id_1746,R.id.weex_id_1745,R.id.weex_id_1744,R.id.weex_id_1743,R.id.weex_id_1742,R.id.weex_id_1741,R.id.weex_id_1740,R.id.weex_id_1739,R.id.weex_id_1738,R.id.weex_id_1737,R.id.weex_id_1736,R.id.weex_id_1735,R.id.weex_id_1734,R.id.weex_id_1733,R.id.weex_id_1732,R.id.weex_id_1731,R.id.weex_id_1730,R.id.weex_id_1729,R.id.weex_id_1728,R.id.weex_id_1727,R.id.weex_id_1726,R.id.weex_id_1725,R.id.weex_id_1724,R.id.weex_id_1723,R.id.weex_id_1722,R.id.weex_id_1721,R.id.weex_id_1720,R.id.weex_id_1719,R.id.weex_id_1718,R.id.weex_id_1717,R.id.weex_id_1716,R.id.weex_id_1715,R.id.weex_id_1714,R.id.weex_id_1713,R.id.weex_id_1712,R.id.weex_id_1711,R.id.weex_id_1710,R.id.weex_id_1709,R.id.weex_id_1708,R.id.weex_id_1707,R.id.weex_id_1706,R.id.weex_id_1705,R.id.weex_id_1704,R.id.weex_id_1703,R.id.weex_id_1702,R.id.weex_id_1701,R.id.weex_id_1700,
+      R.id.weex_id_1699,R.id.weex_id_1698,R.id.weex_id_1697,R.id.weex_id_1696,R.id.weex_id_1695,R.id.weex_id_1694,R.id.weex_id_1693,R.id.weex_id_1692,R.id.weex_id_1691,R.id.weex_id_1690,R.id.weex_id_1689,R.id.weex_id_1688,R.id.weex_id_1687,R.id.weex_id_1686,R.id.weex_id_1685,R.id.weex_id_1684,R.id.weex_id_1683,R.id.weex_id_1682,R.id.weex_id_1681,R.id.weex_id_1680,R.id.weex_id_1679,R.id.weex_id_1678,R.id.weex_id_1677,R.id.weex_id_1676,R.id.weex_id_1675,R.id.weex_id_1674,R.id.weex_id_1673,R.id.weex_id_1672,R.id.weex_id_1671,R.id.weex_id_1670,R.id.weex_id_1669,R.id.weex_id_1668,R.id.weex_id_1667,R.id.weex_id_1666,R.id.weex_id_1665,R.id.weex_id_1664,R.id.weex_id_1663,R.id.weex_id_1662,R.id.weex_id_1661,R.id.weex_id_1660,R.id.weex_id_1659,R.id.weex_id_1658,R.id.weex_id_1657,R.id.weex_id_1656,R.id.weex_id_1655,R.id.weex_id_1654,R.id.weex_id_1653,R.id.weex_id_1652,R.id.weex_id_1651,R.id.weex_id_1650,R.id.weex_id_1649,R.id.weex_id_1648,R.id.weex_id_1647,R.id.weex_id_1646,R.id.weex_id_1645,R.id.weex_id_1644,R.id.weex_id_1643,R.id.weex_id_1642,R.id.weex_id_1641,R.id.weex_id_1640,R.id.weex_id_1639,R.id.weex_id_1638,R.id.weex_id_1637,R.id.weex_id_1636,R.id.weex_id_1635,R.id.weex_id_1634,R.id.weex_id_1633,R.id.weex_id_1632,R.id.weex_id_1631,R.id.weex_id_1630,R.id.weex_id_1629,R.id.weex_id_1628,R.id.weex_id_1627,R.id.weex_id_1626,R.id.weex_id_1625,R.id.weex_id_1624,R.id.weex_id_1623,R.id.weex_id_1622,R.id.weex_id_1621,R.id.weex_id_1620,R.id.weex_id_1619,R.id.weex_id_1618,R.id.weex_id_1617,R.id.weex_id_1616,R.id.weex_id_1615,R.id.weex_id_1614,R.id.weex_id_1613,R.id.weex_id_1612,R.id.weex_id_1611,R.id.weex_id_1610,R.id.weex_id_1609,R.id.weex_id_1608,R.id.weex_id_1607,R.id.weex_id_1606,R.id.weex_id_1605,R.id.weex_id_1604,R.id.weex_id_1603,R.id.weex_id_1602,R.id.weex_id_1601,R.id.weex_id_1600,
+      R.id.weex_id_1599,R.id.weex_id_1598,R.id.weex_id_1597,R.id.weex_id_1596,R.id.weex_id_1595,R.id.weex_id_1594,R.id.weex_id_1593,R.id.weex_id_1592,R.id.weex_id_1591,R.id.weex_id_1590,R.id.weex_id_1589,R.id.weex_id_1588,R.id.weex_id_1587,R.id.weex_id_1586,R.id.weex_id_1585,R.id.weex_id_1584,R.id.weex_id_1583,R.id.weex_id_1582,R.id.weex_id_1581,R.id.weex_id_1580,R.id.weex_id_1579,R.id.weex_id_1578,R.id.weex_id_1577,R.id.weex_id_1576,R.id.weex_id_1575,R.id.weex_id_1574,R.id.weex_id_1573,R.id.weex_id_1572,R.id.weex_id_1571,R.id.weex_id_1570,R.id.weex_id_1569,R.id.weex_id_1568,R.id.weex_id_1567,R.id.weex_id_1566,R.id.weex_id_1565,R.id.weex_id_1564,R.id.weex_id_1563,R.id.weex_id_1562,R.id.weex_id_1561,R.id.weex_id_1560,R.id.weex_id_1559,R.id.weex_id_1558,R.id.weex_id_1557,R.id.weex_id_1556,R.id.weex_id_1555,R.id.weex_id_1554,R.id.weex_id_1553,R.id.weex_id_1552,R.id.weex_id_1551,R.id.weex_id_1550,R.id.weex_id_1549,R.id.weex_id_1548,R.id.weex_id_1547,R.id.weex_id_1546,R.id.weex_id_1545,R.id.weex_id_1544,R.id.weex_id_1543,R.id.weex_id_1542,R.id.weex_id_1541,R.id.weex_id_1540,R.id.weex_id_1539,R.id.weex_id_1538,R.id.weex_id_1537,R.id.weex_id_1536,R.id.weex_id_1535,R.id.weex_id_1534,R.id.weex_id_1533,R.id.weex_id_1532,R.id.weex_id_1531,R.id.weex_id_1530,R.id.weex_id_1529,R.id.weex_id_1528,R.id.weex_id_1527,R.id.weex_id_1526,R.id.weex_id_1525,R.id.weex_id_1524,R.id.weex_id_1523,R.id.weex_id_1522,R.id.weex_id_1521,R.id.weex_id_1520,R.id.weex_id_1519,R.id.weex_id_1518,R.id.weex_id_1517,R.id.weex_id_1516,R.id.weex_id_1515,R.id.weex_id_1514,R.id.weex_id_1513,R.id.weex_id_1512,R.id.weex_id_1511,R.id.weex_id_1510,R.id.weex_id_1509,R.id.weex_id_1508,R.id.weex_id_1507,R.id.weex_id_1506,R.id.weex_id_1505,R.id.weex_id_1504,R.id.weex_id_1503,R.id.weex_id_1502,R.id.weex_id_1501,R.id.weex_id_1500,
+      R.id.weex_id_1499,R.id.weex_id_1498,R.id.weex_id_1497,R.id.weex_id_1496,R.id.weex_id_1495,R.id.weex_id_1494,R.id.weex_id_1493,R.id.weex_id_1492,R.id.weex_id_1491,R.id.weex_id_1490,R.id.weex_id_1489,R.id.weex_id_1488,R.id.weex_id_1487,R.id.weex_id_1486,R.id.weex_id_1485,R.id.weex_id_1484,R.id.weex_id_1483,R.id.weex_id_1482,R.id.weex_id_1481,R.id.weex_id_1480,R.id.weex_id_1479,R.id.weex_id_1478,R.id.weex_id_1477,R.id.weex_id_1476,R.id.weex_id_1475,R.id.weex_id_1474,R.id.weex_id_1473,R.id.weex_id_1472,R.id.weex_id_1471,R.id.weex_id_1470,R.id.weex_id_1469,R.id.weex_id_1468,R.id.weex_id_1467,R.id.weex_id_1466,R.id.weex_id_1465,R.id.weex_id_1464,R.id.weex_id_1463,R.id.weex_id_1462,R.id.weex_id_1461,R.id.weex_id_1460,R.id.weex_id_1459,R.id.weex_id_1458,R.id.weex_id_1457,R.id.weex_id_1456,R.id.weex_id_1455,R.id.weex_id_1454,R.id.weex_id_1453,R.id.weex_id_1452,R.id.weex_id_1451,R.id.weex_id_1450,R.id.weex_id_1449,R.id.weex_id_1448,R.id.weex_id_1447,R.id.weex_id_1446,R.id.weex_id_1445,R.id.weex_id_1444,R.id.weex_id_1443,R.id.weex_id_1442,R.id.weex_id_1441,R.id.weex_id_1440,R.id.weex_id_1439,R.id.weex_id_1438,R.id.weex_id_1437,R.id.weex_id_1436,R.id.weex_id_1435,R.id.weex_id_1434,R.id.weex_id_1433,R.id.weex_id_1432,R.id.weex_id_1431,R.id.weex_id_1430,R.id.weex_id_1429,R.id.weex_id_1428,R.id.weex_id_1427,R.id.weex_id_1426,R.id.weex_id_1425,R.id.weex_id_1424,R.id.weex_id_1423,R.id.weex_id_1422,R.id.weex_id_1421,R.id.weex_id_1420,R.id.weex_id_1419,R.id.weex_id_1418,R.id.weex_id_1417,R.id.weex_id_1416,R.id.weex_id_1415,R.id.weex_id_1414,R.id.weex_id_1413,R.id.weex_id_1412,R.id.weex_id_1411,R.id.weex_id_1410,R.id.weex_id_1409,R.id.weex_id_1408,R.id.weex_id_1407,R.id.weex_id_1406,R.id.weex_id_1405,R.id.weex_id_1404,R.id.weex_id_1403,R.id.weex_id_1402,R.id.weex_id_1401,R.id.weex_id_1400,
+      R.id.weex_id_1399,R.id.weex_id_1398,R.id.weex_id_1397,R.id.weex_id_1396,R.id.weex_id_1395,R.id.weex_id_1394,R.id.weex_id_1393,R.id.weex_id_1392,R.id.weex_id_1391,R.id.weex_id_1390,R.id.weex_id_1389,R.id.weex_id_1388,R.id.weex_id_1387,R.id.weex_id_1386,R.id.weex_id_1385,R.id.weex_id_1384,R.id.weex_id_1383,R.id.weex_id_1382,R.id.weex_id_1381,R.id.weex_id_1380,R.id.weex_id_1379,R.id.weex_id_1378,R.id.weex_id_1377,R.id.weex_id_1376,R.id.weex_id_1375,R.id.weex_id_1374,R.id.weex_id_1373,R.id.weex_id_1372,R.id.weex_id_1371,R.id.weex_id_1370,R.id.weex_id_1369,R.id.weex_id_1368,R.id.weex_id_1367,R.id.weex_id_1366,R.id.weex_id_1365,R.id.weex_id_1364,R.id.weex_id_1363,R.id.weex_id_1362,R.id.weex_id_1361,R.id.weex_id_1360,R.id.weex_id_1359,R.id.weex_id_1358,R.id.weex_id_1357,R.id.weex_id_1356,R.id.weex_id_1355,R.id.weex_id_1354,R.id.weex_id_1353,R.id.weex_id_1352,R.id.weex_id_1351,R.id.weex_id_1350,R.id.weex_id_1349,R.id.weex_id_1348,R.id.weex_id_1347,R.id.weex_id_1346,R.id.weex_id_1345,R.id.weex_id_1344,R.id.weex_id_1343,R.id.weex_id_1342,R.id.weex_id_1341,R.id.weex_id_1340,R.id.weex_id_1339,R.id.weex_id_1338,R.id.weex_id_1337,R.id.weex_id_1336,R.id.weex_id_1335,R.id.weex_id_1334,R.id.weex_id_1333,R.id.weex_id_1332,R.id.weex_id_1331,R.id.weex_id_1330,R.id.weex_id_1329,R.id.weex_id_1328,R.id.weex_id_1327,R.id.weex_id_1326,R.id.weex_id_1325,R.id.weex_id_1324,R.id.weex_id_1323,R.id.weex_id_1322,R.id.weex_id_1321,R.id.weex_id_1320,R.id.weex_id_1319,R.id.weex_id_1318,R.id.weex_id_1317,R.id.weex_id_1316,R.id.weex_id_1315,R.id.weex_id_1314,R.id.weex_id_1313,R.id.weex_id_1312,R.id.weex_id_1311,R.id.weex_id_1310,R.id.weex_id_1309,R.id.weex_id_1308,R.id.weex_id_1307,R.id.weex_id_1306,R.id.weex_id_1305,R.id.weex_id_1304,R.id.weex_id_1303,R.id.weex_id_1302,R.id.weex_id_1301,R.id.weex_id_1300,
+      R.id.weex_id_1299,R.id.weex_id_1298,R.id.weex_id_1297,R.id.weex_id_1296,R.id.weex_id_1295,R.id.weex_id_1294,R.id.weex_id_1293,R.id.weex_id_1292,R.id.weex_id_1291,R.id.weex_id_1290,R.id.weex_id_1289,R.id.weex_id_1288,R.id.weex_id_1287,R.id.weex_id_1286,R.id.weex_id_1285,R.id.weex_id_1284,R.id.weex_id_1283,R.id.weex_id_1282,R.id.weex_id_1281,R.id.weex_id_1280,R.id.weex_id_1279,R.id.weex_id_1278,R.id.weex_id_1277,R.id.weex_id_1276,R.id.weex_id_1275,R.id.weex_id_1274,R.id.weex_id_1273,R.id.weex_id_1272,R.id.weex_id_1271,R.id.weex_id_1270,R.id.weex_id_1269,R.id.weex_id_1268,R.id.weex_id_1267,R.id.weex_id_1266,R.id.weex_id_1265,R.id.weex_id_1264,R.id.weex_id_1263,R.id.weex_id_1262,R.id.weex_id_1261,R.id.weex_id_1260,R.id.weex_id_1259,R.id.weex_id_1258,R.id.weex_id_1257,R.id.weex_id_1256,R.id.weex_id_1255,R.id.weex_id_1254,R.id.weex_id_1253,R.id.weex_id_1252,R.id.weex_id_1251,R.id.weex_id_1250,R.id.weex_id_1249,R.id.weex_id_1248,R.id.weex_id_1247,R.id.weex_id_1246,R.id.weex_id_1245,R.id.weex_id_1244,R.id.weex_id_1243,R.id.weex_id_1242,R.id.weex_id_1241,R.id.weex_id_1240,R.id.weex_id_1239,R.id.weex_id_1238,R.id.weex_id_1237,R.id.weex_id_1236,R.id.weex_id_1235,R.id.weex_id_1234,R.id.weex_id_1233,R.id.weex_id_1232,R.id.weex_id_1231,R.id.weex_id_1230,R.id.weex_id_1229,R.id.weex_id_1228,R.id.weex_id_1227,R.id.weex_id_1226,R.id.weex_id_1225,R.id.weex_id_1224,R.id.weex_id_1223,R.id.weex_id_1222,R.id.weex_id_1221,R.id.weex_id_1220,R.id.weex_id_1219,R.id.weex_id_1218,R.id.weex_id_1217,R.id.weex_id_1216,R.id.weex_id_1215,R.id.weex_id_1214,R.id.weex_id_1213,R.id.weex_id_1212,R.id.weex_id_1211,R.id.weex_id_1210,R.id.weex_id_1209,R.id.weex_id_1208,R.id.weex_id_1207,R.id.weex_id_1206,R.id.weex_id_1205,R.id.weex_id_1204,R.id.weex_id_1203,R.id.weex_id_1202,R.id.weex_id_1201,R.id.weex_id_1200,
+      R.id.weex_id_1199,R.id.weex_id_1198,R.id.weex_id_1197,R.id.weex_id_1196,R.id.weex_id_1195,R.id.weex_id_1194,R.id.weex_id_1193,R.id.weex_id_1192,R.id.weex_id_1191,R.id.weex_id_1190,R.id.weex_id_1189,R.id.weex_id_1188,R.id.weex_id_1187,R.id.weex_id_1186,R.id.weex_id_1185,R.id.weex_id_1184,R.id.weex_id_1183,R.id.weex_id_1182,R.id.weex_id_1181,R.id.weex_id_1180,R.id.weex_id_1179,R.id.weex_id_1178,R.id.weex_id_1177,R.id.weex_id_1176,R.id.weex_id_1175,R.id.weex_id_1174,R.id.weex_id_1173,R.id.weex_id_1172,R.id.weex_id_1171,R.id.weex_id_1170,R.id.weex_id_1169,R.id.weex_id_1168,R.id.weex_id_1167,R.id.weex_id_1166,R.id.weex_id_1165,R.id.weex_id_1164,R.id.weex_id_1163,R.id.weex_id_1162,R.id.weex_id_1161,R.id.weex_id_1160,R.id.weex_id_1159,R.id.weex_id_1158,R.id.weex_id_1157,R.id.weex_id_1156,R.id.weex_id_1155,R.id.weex_id_1154,R.id.weex_id_1153,R.id.weex_id_1152,R.id.weex_id_1151,R.id.weex_id_1150,R.id.weex_id_1149,R.id.weex_id_1148,R.id.weex_id_1147,R.id.weex_id_1146,R.id.weex_id_1145,R.id.weex_id_1144,R.id.weex_id_1143,R.id.weex_id_1142,R.id.weex_id_1141,R.id.weex_id_1140,R.id.weex_id_1139,R.id.weex_id_1138,R.id.weex_id_1137,R.id.weex_id_1136,R.id.weex_id_1135,R.id.weex_id_1134,R.id.weex_id_1133,R.id.weex_id_1132,R.id.weex_id_1131,R.id.weex_id_1130,R.id.weex_id_1129,R.id.weex_id_1128,R.id.weex_id_1127,R.id.weex_id_1126,R.id.weex_id_1125,R.id.weex_id_1124,R.id.weex_id_1123,R.id.weex_id_1122,R.id.weex_id_1121,R.id.weex_id_1120,R.id.weex_id_1119,R.id.weex_id_1118,R.id.weex_id_1117,R.id.weex_id_1116,R.id.weex_id_1115,R.id.weex_id_1114,R.id.weex_id_1113,R.id.weex_id_1112,R.id.weex_id_1111,R.id.weex_id_1110,R.id.weex_id_1109,R.id.weex_id_1108,R.id.weex_id_1107,R.id.weex_id_1106,R.id.weex_id_1105,R.id.weex_id_1104,R.id.weex_id_1103,R.id.weex_id_1102,R.id.weex_id_1101,R.id.weex_id_1100,
+      R.id.weex_id_1099,R.id.weex_id_1098,R.id.weex_id_1097,R.id.weex_id_1096,R.id.weex_id_1095,R.id.weex_id_1094,R.id.weex_id_1093,R.id.weex_id_1092,R.id.weex_id_1091,R.id.weex_id_1090,R.id.weex_id_1089,R.id.weex_id_1088,R.id.weex_id_1087,R.id.weex_id_1086,R.id.weex_id_1085,R.id.weex_id_1084,R.id.weex_id_1083,R.id.weex_id_1082,R.id.weex_id_1081,R.id.weex_id_1080,R.id.weex_id_1079,R.id.weex_id_1078,R.id.weex_id_1077,R.id.weex_id_1076,R.id.weex_id_1075,R.id.weex_id_1074,R.id.weex_id_1073,R.id.weex_id_1072,R.id.weex_id_1071,R.id.weex_id_1070,R.id.weex_id_1069,R.id.weex_id_1068,R.id.weex_id_1067,R.id.weex_id_1066,R.id.weex_id_1065,R.id.weex_id_1064,R.id.weex_id_1063,R.id.weex_id_1062,R.id.weex_id_1061,R.id.weex_id_1060,R.id.weex_id_1059,R.id.weex_id_1058,R.id.weex_id_1057,R.id.weex_id_1056,R.id.weex_id_1055,R.id.weex_id_1054,R.id.weex_id_1053,R.id.weex_id_1052,R.id.weex_id_1051,R.id.weex_id_1050,R.id.weex_id_1049,R.id.weex_id_1048,R.id.weex_id_1047,R.id.weex_id_1046,R.id.weex_id_1045,R.id.weex_id_1044,R.id.weex_id_1043,R.id.weex_id_1042,R.id.weex_id_1041,R.id.weex_id_1040,R.id.weex_id_1039,R.id.weex_id_1038,R.id.weex_id_1037,R.id.weex_id_1036,R.id.weex_id_1035,R.id.weex_id_1034,R.id.weex_id_1033,R.id.weex_id_1032,R.id.weex_id_1031,R.id.weex_id_1030,R.id.weex_id_1029,R.id.weex_id_1028,R.id.weex_id_1027,R.id.weex_id_1026,R.id.weex_id_1025,R.id.weex_id_1024,R.id.weex_id_1023,R.id.weex_id_1022,R.id.weex_id_1021,R.id.weex_id_1020,R.id.weex_id_1019,R.id.weex_id_1018,R.id.weex_id_1017,R.id.weex_id_1016,R.id.weex_id_1015,R.id.weex_id_1014,R.id.weex_id_1013,R.id.weex_id_1012,R.id.weex_id_1011,R.id.weex_id_1010,R.id.weex_id_1009,R.id.weex_id_1008,R.id.weex_id_1007,R.id.weex_id_1006,R.id.weex_id_1005,R.id.weex_id_1004,R.id.weex_id_1003,R.id.weex_id_1002,R.id.weex_id_1001,R.id.weex_id_1000,
+      R.id.weex_id_999,R.id.weex_id_998,R.id.weex_id_997,R.id.weex_id_996,R.id.weex_id_995,R.id.weex_id_994,R.id.weex_id_993,R.id.weex_id_992,R.id.weex_id_991,R.id.weex_id_990,R.id.weex_id_989,R.id.weex_id_988,R.id.weex_id_987,R.id.weex_id_986,R.id.weex_id_985,R.id.weex_id_984,R.id.weex_id_983,R.id.weex_id_982,R.id.weex_id_981,R.id.weex_id_980,R.id.weex_id_979,R.id.weex_id_978,R.id.weex_id_977,R.id.weex_id_976,R.id.weex_id_975,R.id.weex_id_974,R.id.weex_id_973,R.id.weex_id_972,R.id.weex_id_971,R.id.weex_id_970,R.id.weex_id_969,R.id.weex_id_968,R.id.weex_id_967,R.id.weex_id_966,R.id.weex_id_965,R.id.weex_id_964,R.id.weex_id_963,R.id.weex_id_962,R.id.weex_id_961,R.id.weex_id_960,R.id.weex_id_959,R.id.weex_id_958,R.id.weex_id_957,R.id.weex_id_956,R.id.weex_id_955,R.id.weex_id_954,R.id.weex_id_953,R.id.weex_id_952,R.id.weex_id_951,R.id.weex_id_950,R.id.weex_id_949,R.id.weex_id_948,R.id.weex_id_947,R.id.weex_id_946,R.id.weex_id_945,R.id.weex_id_944,R.id.weex_id_943,R.id.weex_id_942,R.id.weex_id_941,R.id.weex_id_940,R.id.weex_id_939,R.id.weex_id_938,R.id.weex_id_937,R.id.weex_id_936,R.id.weex_id_935,R.id.weex_id_934,R.id.weex_id_933,R.id.weex_id_932,R.id.weex_id_931,R.id.weex_id_930,R.id.weex_id_929,R.id.weex_id_928,R.id.weex_id_927,R.id.weex_id_926,R.id.weex_id_925,R.id.weex_id_924,R.id.weex_id_923,R.id.weex_id_922,R.id.weex_id_921,R.id.weex_id_920,R.id.weex_id_919,R.id.weex_id_918,R.id.weex_id_917,R.id.weex_id_916,R.id.weex_id_915,R.id.weex_id_914,R.id.weex_id_913,R.id.weex_id_912,R.id.weex_id_911,R.id.weex_id_910,R.id.weex_id_909,R.id.weex_id_908,R.id.weex_id_907,R.id.weex_id_906,R.id.weex_id_905,R.id.weex_id_904,R.id.weex_id_903,R.id.weex_id_902,R.id.weex_id_901,R.id.weex_id_900,
+      R.id.weex_id_899,R.id.weex_id_898,R.id.weex_id_897,R.id.weex_id_896,R.id.weex_id_895,R.id.weex_id_894,R.id.weex_id_893,R.id.weex_id_892,R.id.weex_id_891,R.id.weex_id_890,R.id.weex_id_889,R.id.weex_id_888,R.id.weex_id_887,R.id.weex_id_886,R.id.weex_id_885,R.id.weex_id_884,R.id.weex_id_883,R.id.weex_id_882,R.id.weex_id_881,R.id.weex_id_880,R.id.weex_id_879,R.id.weex_id_878,R.id.weex_id_877,R.id.weex_id_876,R.id.weex_id_875,R.id.weex_id_874,R.id.weex_id_873,R.id.weex_id_872,R.id.weex_id_871,R.id.weex_id_870,R.id.weex_id_869,R.id.weex_id_868,R.id.weex_id_867,R.id.weex_id_866,R.id.weex_id_865,R.id.weex_id_864,R.id.weex_id_863,R.id.weex_id_862,R.id.weex_id_861,R.id.weex_id_860,R.id.weex_id_859,R.id.weex_id_858,R.id.weex_id_857,R.id.weex_id_856,R.id.weex_id_855,R.id.weex_id_854,R.id.weex_id_853,R.id.weex_id_852,R.id.weex_id_851,R.id.weex_id_850,R.id.weex_id_849,R.id.weex_id_848,R.id.weex_id_847,R.id.weex_id_846,R.id.weex_id_845,R.id.weex_id_844,R.id.weex_id_843,R.id.weex_id_842,R.id.weex_id_841,R.id.weex_id_840,R.id.weex_id_839,R.id.weex_id_838,R.id.weex_id_837,R.id.weex_id_836,R.id.weex_id_835,R.id.weex_id_834,R.id.weex_id_833,R.id.weex_id_832,R.id.weex_id_831,R.id.weex_id_830,R.id.weex_id_829,R.id.weex_id_828,R.id.weex_id_827,R.id.weex_id_826,R.id.weex_id_825,R.id.weex_id_824,R.id.weex_id_823,R.id.weex_id_822,R.id.weex_id_821,R.id.weex_id_820,R.id.weex_id_819,R.id.weex_id_818,R.id.weex_id_817,R.id.weex_id_816,R.id.weex_id_815,R.id.weex_id_814,R.id.weex_id_813,R.id.weex_id_812,R.id.weex_id_811,R.id.weex_id_810,R.id.weex_id_809,R.id.weex_id_808,R.id.weex_id_807,R.id.weex_id_806,R.id.weex_id_805,R.id.weex_id_804,R.id.weex_id_803,R.id.weex_id_802,R.id.weex_id_801,R.id.weex_id_800,
+      R.id.weex_id_799,R.id.weex_id_798,R.id.weex_id_797,R.id.weex_id_796,R.id.weex_id_795,R.id.weex_id_794,R.id.weex_id_793,R.id.weex_id_792,R.id.weex_id_791,R.id.weex_id_790,R.id.weex_id_789,R.id.weex_id_788,R.id.weex_id_787,R.id.weex_id_786,R.id.weex_id_785,R.id.weex_id_784,R.id.weex_id_783,R.id.weex_id_782,R.id.weex_id_781,R.id.weex_id_780,R.id.weex_id_779,R.id.weex_id_778,R.id.weex_id_777,R.id.weex_id_776,R.id.weex_id_775,R.id.weex_id_774,R.id.weex_id_773,R.id.weex_id_772,R.id.weex_id_771,R.id.weex_id_770,R.id.weex_id_769,R.id.weex_id_768,R.id.weex_id_767,R.id.weex_id_766,R.id.weex_id_765,R.id.weex_id_764,R.id.weex_id_763,R.id.weex_id_762,R.id.weex_id_761,R.id.weex_id_760,R.id.weex_id_759,R.id.weex_id_758,R.id.weex_id_757,R.id.weex_id_756,R.id.weex_id_755,R.id.weex_id_754,R.id.weex_id_753,R.id.weex_id_752,R.id.weex_id_751,R.id.weex_id_750,R.id.weex_id_749,R.id.weex_id_748,R.id.weex_id_747,R.id.weex_id_746,R.id.weex_id_745,R.id.weex_id_744,R.id.weex_id_743,R.id.weex_id_742,R.id.weex_id_741,R.id.weex_id_740,R.id.weex_id_739,R.id.weex_id_738,R.id.weex_id_737,R.id.weex_id_736,R.id.weex_id_735,R.id.weex_id_734,R.id.weex_id_733,R.id.weex_id_732,R.id.weex_id_731,R.id.weex_id_730,R.id.weex_id_729,R.id.weex_id_728,R.id.weex_id_727,R.id.weex_id_726,R.id.weex_id_725,R.id.weex_id_724,R.id.weex_id_723,R.id.weex_id_722,R.id.weex_id_721,R.id.weex_id_720,R.id.weex_id_719,R.id.weex_id_718,R.id.weex_id_717,R.id.weex_id_716,R.id.weex_id_715,R.id.weex_id_714,R.id.weex_id_713,R.id.weex_id_712,R.id.weex_id_711,R.id.weex_id_710,R.id.weex_id_709,R.id.weex_id_708,R.id.weex_id_707,R.id.weex_id_706,R.id.weex_id_705,R.id.weex_id_704,R.id.weex_id_703,R.id.weex_id_702,R.id.weex_id_701,R.id.weex_id_700,
+      R.id.weex_id_699,R.id.weex_id_698,R.id.weex_id_697,R.id.weex_id_696,R.id.weex_id_695,R.id.weex_id_694,R.id.weex_id_693,R.id.weex_id_692,R.id.weex_id_691,R.id.weex_id_690,R.id.weex_id_689,R.id.weex_id_688,R.id.weex_id_687,R.id.weex_id_686,R.id.weex_id_685,R.id.weex_id_684,R.id.weex_id_683,R.id.weex_id_682,R.id.weex_id_681,R.id.weex_id_680,R.id.weex_id_679,R.id.weex_id_678,R.id.weex_id_677,R.id.weex_id_676,R.id.weex_id_675,R.id.weex_id_674,R.id.weex_id_673,R.id.weex_id_672,R.id.weex_id_671,R.id.weex_id_670,R.id.weex_id_669,R.id.weex_id_668,R.id.weex_id_667,R.id.weex_id_666,R.id.weex_id_665,R.id.weex_id_664,R.id.weex_id_663,R.id.weex_id_662,R.id.weex_id_661,R.id.weex_id_660,R.id.weex_id_659,R.id.weex_id_658,R.id.weex_id_657,R.id.weex_id_656,R.id.weex_id_655,R.id.weex_id_654,R.id.weex_id_653,R.id.weex_id_652,R.id.weex_id_651,R.id.weex_id_650,R.id.weex_id_649,R.id.weex_id_648,R.id.weex_id_647,R.id.weex_id_646,R.id.weex_id_645,R.id.weex_id_644,R.id.weex_id_643,R.id.weex_id_642,R.id.weex_id_641,R.id.weex_id_640,R.id.weex_id_639,R.id.weex_id_638,R.id.weex_id_637,R.id.weex_id_636,R.id.weex_id_635,R.id.weex_id_634,R.id.weex_id_633,R.id.weex_id_632,R.id.weex_id_631,R.id.weex_id_630,R.id.weex_id_629,R.id.weex_id_628,R.id.weex_id_627,R.id.weex_id_626,R.id.weex_id_625,R.id.weex_id_624,R.id.weex_id_623,R.id.weex_id_622,R.id.weex_id_621,R.id.weex_id_620,R.id.weex_id_619,R.id.weex_id_618,R.id.weex_id_617,R.id.weex_id_616,R.id.weex_id_615,R.id.weex_id_614,R.id.weex_id_613,R.id.weex_id_612,R.id.weex_id_611,R.id.weex_id_610,R.id.weex_id_609,R.id.weex_id_608,R.id.weex_id_607,R.id.weex_id_606,R.id.weex_id_605,R.id.weex_id_604,R.id.weex_id_603,R.id.weex_id_602,R.id.weex_id_601,R.id.weex_id_600,
+      R.id.weex_id_599,R.id.weex_id_598,R.id.weex_id_597,R.id.weex_id_596,R.id.weex_id_595,R.id.weex_id_594,R.id.weex_id_593,R.id.weex_id_592,R.id.weex_id_591,R.id.weex_id_590,R.id.weex_id_589,R.id.weex_id_588,R.id.weex_id_587,R.id.weex_id_586,R.id.weex_id_585,R.id.weex_id_584,R.id.weex_id_583,R.id.weex_id_582,R.id.weex_id_581,R.id.weex_id_580,R.id.weex_id_579,R.id.weex_id_578,R.id.weex_id_577,R.id.weex_id_576,R.id.weex_id_575,R.id.weex_id_574,R.id.weex_id_573,R.id.weex_id_572,R.id.weex_id_571,R.id.weex_id_570,R.id.weex_id_569,R.id.weex_id_568,R.id.weex_id_567,R.id.weex_id_566,R.id.weex_id_565,R.id.weex_id_564,R.id.weex_id_563,R.id.weex_id_562,R.id.weex_id_561,R.id.weex_id_560,R.id.weex_id_559,R.id.weex_id_558,R.id.weex_id_557,R.id.weex_id_556,R.id.weex_id_555,R.id.weex_id_554,R.id.weex_id_553,R.id.weex_id_552,R.id.weex_id_551,R.id.weex_id_550,R.id.weex_id_549,R.id.weex_id_548,R.id.weex_id_547,R.id.weex_id_546,R.id.weex_id_545,R.id.weex_id_544,R.id.weex_id_543,R.id.weex_id_542,R.id.weex_id_541,R.id.weex_id_540,R.id.weex_id_539,R.id.weex_id_538,R.id.weex_id_537,R.id.weex_id_536,R.id.weex_id_535,R.id.weex_id_534,R.id.weex_id_533,R.id.weex_id_532,R.id.weex_id_531,R.id.weex_id_530,R.id.weex_id_529,R.id.weex_id_528,R.id.weex_id_527,R.id.weex_id_526,R.id.weex_id_525,R.id.weex_id_524,R.id.weex_id_523,R.id.weex_id_522,R.id.weex_id_521,R.id.weex_id_520,R.id.weex_id_519,R.id.weex_id_518,R.id.weex_id_517,R.id.weex_id_516,R.id.weex_id_515,R.id.weex_id_514,R.id.weex_id_513,R.id.weex_id_512,R.id.weex_id_511,R.id.weex_id_510,R.id.weex_id_509,R.id.weex_id_508,R.id.weex_id_507,R.id.weex_id_506,R.id.weex_id_505,R.id.weex_id_504,R.id.weex_id_503,R.id.weex_id_502,R.id.weex_id_501,R.id.weex_id_500,
+      R.id.weex_id_499,R.id.weex_id_498,R.id.weex_id_497,R.id.weex_id_496,R.id.weex_id_495,R.id.weex_id_494,R.id.weex_id_493,R.id.weex_id_492,R.id.weex_id_491,R.id.weex_id_490,R.id.weex_id_489,R.id.weex_id_488,R.id.weex_id_487,R.id.weex_id_486,R.id.weex_id_485,R.id.weex_id_484,R.id.weex_id_483,R.id.weex_id_482,R.id.weex_id_481,R.id.weex_id_480,R.id.weex_id_479,R.id.weex_id_478,R.id.weex_id_477,R.id.weex_id_476,R.id.weex_id_475,R.id.weex_id_474,R.id.weex_id_473,R.id.weex_id_472,R.id.weex_id_471,R.id.weex_id_470,R.id.weex_id_469,R.id.weex_id_468,R.id.weex_id_467,R.id.weex_id_466,R.id.weex_id_465,R.id.weex_id_464,R.id.weex_id_463,R.id.weex_id_462,R.id.weex_id_461,R.id.weex_id_460,R.id.weex_id_459,R.id.weex_id_458,R.id.weex_id_457,R.id.weex_id_456,R.id.weex_id_455,R.id.weex_id_454,R.id.weex_id_453,R.id.weex_id_452,R.id.weex_id_451,R.id.weex_id_450,R.id.weex_id_449,R.id.weex_id_448,R.id.weex_id_447,R.id.weex_id_446,R.id.weex_id_445,R.id.weex_id_444,R.id.weex_id_443,R.id.weex_id_442,R.id.weex_id_441,R.id.weex_id_440,R.id.weex_id_439,R.id.weex_id_438,R.id.weex_id_437,R.id.weex_id_436,R.id.weex_id_435,R.id.weex_id_434,R.id.weex_id_433,R.id.weex_id_432,R.id.weex_id_431,R.id.weex_id_430,R.id.weex_id_429,R.id.weex_id_428,R.id.weex_id_427,R.id.weex_id_426,R.id.weex_id_425,R.id.weex_id_424,R.id.weex_id_423,R.id.weex_id_422,R.id.weex_id_421,R.id.weex_id_420,R.id.weex_id_419,R.id.weex_id_418,R.id.weex_id_417,R.id.weex_id_416,R.id.weex_id_415,R.id.weex_id_414,R.id.weex_id_413,R.id.weex_id_412,R.id.weex_id_411,R.id.weex_id_410,R.id.weex_id_409,R.id.weex_id_408,R.id.weex_id_407,R.id.weex_id_406,R.id.weex_id_405,R.id.weex_id_404,R.id.weex_id_403,R.id.weex_id_402,R.id.weex_id_401,R.id.weex_id_400,
+      R.id.weex_id_399,R.id.weex_id_398,R.id.weex_id_397,R.id.weex_id_396,R.id.weex_id_395,R.id.weex_id_394,R.id.weex_id_393,R.id.weex_id_392,R.id.weex_id_391,R.id.weex_id_390,R.id.weex_id_389,R.id.weex_id_388,R.id.weex_id_387,R.id.weex_id_386,R.id.weex_id_385,R.id.weex_id_384,R.id.weex_id_383,R.id.weex_id_382,R.id.weex_id_381,R.id.weex_id_380,R.id.weex_id_379,R.id.weex_id_378,R.id.weex_id_377,R.id.weex_id_376,R.id.weex_id_375,R.id.weex_id_374,R.id.weex_id_373,R.id.weex_id_372,R.id.weex_id_371,R.id.weex_id_370,R.id.weex_id_369,R.id.weex_id_368,R.id.weex_id_367,R.id.weex_id_366,R.id.weex_id_365,R.id.weex_id_364,R.id.weex_id_363,R.id.weex_id_362,R.id.weex_id_361,R.id.weex_id_360,R.id.weex_id_359,R.id.weex_id_358,R.id.weex_id_357,R.id.weex_id_356,R.id.weex_id_355,R.id.weex_id_354,R.id.weex_id_353,R.id.weex_id_352,R.id.weex_id_351,R.id.weex_id_350,R.id.weex_id_349,R.id.weex_id_348,R.id.weex_id_347,R.id.weex_id_346,R.id.weex_id_345,R.id.weex_id_344,R.id.weex_id_343,R.id.weex_id_342,R.id.weex_id_341,R.id.weex_id_340,R.id.weex_id_339,R.id.weex_id_338,R.id.weex_id_337,R.id.weex_id_336,R.id.weex_id_335,R.id.weex_id_334,R.id.weex_id_333,R.id.weex_id_332,R.id.weex_id_331,R.id.weex_id_330,R.id.weex_id_329,R.id.weex_id_328,R.id.weex_id_327,R.id.weex_id_326,R.id.weex_id_325,R.id.weex_id_324,R.id.weex_id_323,R.id.weex_id_322,R.id.weex_id_321,R.id.weex_id_320,R.id.weex_id_319,R.id.weex_id_318,R.id.weex_id_317,R.id.weex_id_316,R.id.weex_id_315,R.id.weex_id_314,R.id.weex_id_313,R.id.weex_id_312,R.id.weex_id_311,R.id.weex_id_310,R.id.weex_id_309,R.id.weex_id_308,R.id.weex_id_307,R.id.weex_id_306,R.id.weex_id_305,R.id.weex_id_304,R.id.weex_id_303,R.id.weex_id_302,R.id.weex_id_301,R.id.weex_id_300,
+      R.id.weex_id_299,R.id.weex_id_298,R.id.weex_id_297,R.id.weex_id_296,R.id.weex_id_295,R.id.weex_id_294,R.id.weex_id_293,R.id.weex_id_292,R.id.weex_id_291,R.id.weex_id_290,R.id.weex_id_289,R.id.weex_id_288,R.id.weex_id_287,R.id.weex_id_286,R.id.weex_id_285,R.id.weex_id_284,R.id.weex_id_283,R.id.weex_id_282,R.id.weex_id_281,R.id.weex_id_280,R.id.weex_id_279,R.id.weex_id_278,R.id.weex_id_277,R.id.weex_id_276,R.id.weex_id_275,R.id.weex_id_274,R.id.weex_id_273,R.id.weex_id_272,R.id.weex_id_271,R.id.weex_id_270,R.id.weex_id_269,R.id.weex_id_268,R.id.weex_id_267,R.id.weex_id_266,R.id.weex_id_265,R.id.weex_id_264,R.id.weex_id_263,R.id.weex_id_262,R.id.weex_id_261,R.id.weex_id_260,R.id.weex_id_259,R.id.weex_id_258,R.id.weex_id_257,R.id.weex_id_256,R.id.weex_id_255,R.id.weex_id_254,R.id.weex_id_253,R.id.weex_id_252,R.id.weex_id_251,R.id.weex_id_250,R.id.weex_id_249,R.id.weex_id_248,R.id.weex_id_247,R.id.weex_id_246,R.id.weex_id_245,R.id.weex_id_244,R.id.weex_id_243,R.id.weex_id_242,R.id.weex_id_241,R.id.weex_id_240,R.id.weex_id_239,R.id.weex_id_238,R.id.weex_id_237,R.id.weex_id_236,R.id.weex_id_235,R.id.weex_id_234,R.id.weex_id_233,R.id.weex_id_232,R.id.weex_id_231,R.id.weex_id_230,R.id.weex_id_229,R.id.weex_id_228,R.id.weex_id_227,R.id.weex_id_226,R.id.weex_id_225,R.id.weex_id_224,R.id.weex_id_223,R.id.weex_id_222,R.id.weex_id_221,R.id.weex_id_220,R.id.weex_id_219,R.id.weex_id_218,R.id.weex_id_217,R.id.weex_id_216,R.id.weex_id_215,R.id.weex_id_214,R.id.weex_id_213,R.id.weex_id_212,R.id.weex_id_211,R.id.weex_id_210,R.id.weex_id_209,R.id.weex_id_208,R.id.weex_id_207,R.id.weex_id_206,R.id.weex_id_205,R.id.weex_id_204,R.id.weex_id_203,R.id.weex_id_202,R.id.weex_id_201,R.id.weex_id_200,
+      R.id.weex_id_199,R.id.weex_id_198,R.id.weex_id_197,R.id.weex_id_196,R.id.weex_id_195,R.id.weex_id_194,R.id.weex_id_193,R.id.weex_id_192,R.id.weex_id_191,R.id.weex_id_190,R.id.weex_id_189,R.id.weex_id_188,R.id.weex_id_187,R.id.weex_id_186,R.id.weex_id_185,R.id.weex_id_184,R.id.weex_id_183,R.id.weex_id_182,R.id.weex_id_181,R.id.weex_id_180,R.id.weex_id_179,R.id.weex_id_178,R.id.weex_id_177,R.id.weex_id_176,R.id.weex_id_175,R.id.weex_id_174,R.id.weex_id_173,R.id.weex_id_172,R.id.weex_id_171,R.id.weex_id_170,R.id.weex_id_169,R.id.weex_id_168,R.id.weex_id_167,R.id.weex_id_166,R.id.weex_id_165,R.id.weex_id_164,R.id.weex_id_163,R.id.weex_id_162,R.id.weex_id_161,R.id.weex_id_160,R.id.weex_id_159,R.id.weex_id_158,R.id.weex_id_157,R.id.weex_id_156,R.id.weex_id_155,R.id.weex_id_154,R.id.weex_id_153,R.id.weex_id_152,R.id.weex_id_151,R.id.weex_id_150,R.id.weex_id_149,R.id.weex_id_148,R.id.weex_id_147,R.id.weex_id_146,R.id.weex_id_145,R.id.weex_id_144,R.id.weex_id_143,R.id.weex_id_142,R.id.weex_id_141,R.id.weex_id_140,R.id.weex_id_139,R.id.weex_id_138,R.id.weex_id_137,R.id.weex_id_136,R.id.weex_id_135,R.id.weex_id_134,R.id.weex_id_133,R.id.weex_id_132,R.id.weex_id_131,R.id.weex_id_130,R.id.weex_id_129,R.id.weex_id_128,R.id.weex_id_127,R.id.weex_id_126,R.id.weex_id_125,R.id.weex_id_124,R.id.weex_id_123,R.id.weex_id_122,R.id.weex_id_121,R.id.weex_id_120,R.id.weex_id_119,R.id.weex_id_118,R.id.weex_id_117,R.id.weex_id_116,R.id.weex_id_115,R.id.weex_id_114,R.id.weex_id_113,R.id.weex_id_112,R.id.weex_id_111,R.id.weex_id_110,R.id.weex_id_109,R.id.weex_id_108,R.id.weex_id_107,R.id.weex_id_106,R.id.weex_id_105,R.id.weex_id_104,R.id.weex_id_103,R.id.weex_id_102,R.id.weex_id_101,R.id.weex_id_100,
+      R.id.weex_id_99,R.id.weex_id_98,R.id.weex_id_97,R.id.weex_id_96,R.id.weex_id_95,R.id.weex_id_94,R.id.weex_id_93,R.id.weex_id_92,R.id.weex_id_91,R.id.weex_id_90,R.id.weex_id_89,R.id.weex_id_88,R.id.weex_id_87,R.id.weex_id_86,R.id.weex_id_85,R.id.weex_id_84,R.id.weex_id_83,R.id.weex_id_82,R.id.weex_id_81,R.id.weex_id_80,R.id.weex_id_79,R.id.weex_id_78,R.id.weex_id_77,R.id.weex_id_76,R.id.weex_id_75,R.id.weex_id_74,R.id.weex_id_73,R.id.weex_id_72,R.id.weex_id_71,R.id.weex_id_70,R.id.weex_id_69,R.id.weex_id_68,R.id.weex_id_67,R.id.weex_id_66,R.id.weex_id_65,R.id.weex_id_64,R.id.weex_id_63,R.id.weex_id_62,R.id.weex_id_61,R.id.weex_id_60,R.id.weex_id_59,R.id.weex_id_58,R.id.weex_id_57,R.id.weex_id_56,R.id.weex_id_55,R.id.weex_id_54,R.id.weex_id_53,R.id.weex_id_52,R.id.weex_id_51,R.id.weex_id_50,R.id.weex_id_49,R.id.weex_id_48,R.id.weex_id_47,R.id.weex_id_46,R.id.weex_id_45,R.id.weex_id_44,R.id.weex_id_43,R.id.weex_id_42,R.id.weex_id_41,R.id.weex_id_40,R.id.weex_id_39,R.id.weex_id_38,R.id.weex_id_37,R.id.weex_id_36,R.id.weex_id_35,R.id.weex_id_34,R.id.weex_id_33,R.id.weex_id_32,R.id.weex_id_31,R.id.weex_id_30,R.id.weex_id_29,R.id.weex_id_28,R.id.weex_id_27,R.id.weex_id_26,R.id.weex_id_25,R.id.weex_id_24,R.id.weex_id_23,R.id.weex_id_22,R.id.weex_id_21,R.id.weex_id_20,R.id.weex_id_19,R.id.weex_id_18,R.id.weex_id_17,R.id.weex_id_16,R.id.weex_id_15,R.id.weex_id_14,R.id.weex_id_13,R.id.weex_id_12,R.id.weex_id_11,R.id.weex_id_10,R.id.weex_id_9,R.id.weex_id_8,R.id.weex_id_7,R.id.weex_id_6,R.id.weex_id_5,R.id.weex_id_4,R.id.weex_id_3,R.id.weex_id_2,R.id.weex_id_1,R.id.weex_id_0
+  };
+
+  private static final int COUNT = ID_STUBS.length;
+  private static int sCurrentIDIndex = 0;
+
+  public static Pair<String,Integer> nextID(){
+    Pair<String,Integer> result = new Pair<>("weex_id_"+(COUNT-1-sCurrentIDIndex),ID_STUBS[sCurrentIDIndex]);
+    sCurrentIDIndex = (sCurrentIDIndex+1)%COUNT;
+    return result;
+  }
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
old mode 100755
new mode 100644
index 39c6384..170b404
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXApplication.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
@@ -214,6 +28,8 @@
 import com.alibaba.weex.extend.PlayDebugAdapter;
 import com.alibaba.weex.extend.component.RichText;
 import com.alibaba.weex.extend.component.WXComponentSyncTest;
+import com.alibaba.weex.extend.component.WXMask;
+import com.alibaba.weex.extend.component.dom.WXMaskDomObject;
 import com.alibaba.weex.extend.module.GeolocationModule;
 import com.alibaba.weex.extend.module.MyModule;
 import com.alibaba.weex.extend.module.RenderModule;
@@ -263,6 +79,9 @@
       WXSDKEngine.registerModule("event", WXEventModule.class);
       WXSDKEngine.registerModule("syncTest", SyncTestModule.class);
 
+      WXSDKEngine.registerComponent("mask",WXMask.class);
+      WXSDKEngine.registerDomObject("mask", WXMaskDomObject.class);
+
       WXSDKEngine.registerModule("myModule", MyModule.class);
       WXSDKEngine.registerModule("geolocation", GeolocationModule.class);
       /**
@@ -313,6 +132,10 @@
           // We assume that the application is on an idle time.
           WXSDKManager.getInstance().notifyTrimMemory();
         }
+        // The demo code of calling 'notifySerializeCodeCache()'
+        if (false) {
+          WXSDKManager.getInstance().notifySerializeCodeCache();
+        }
       }
     });
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXBaseActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/WXBaseActivity.java
old mode 100755
new mode 100644
index a39302b..c973756
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXBaseActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXBaseActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXDebugActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/WXDebugActivity.java
index c9d5de9..20b604d 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXDebugActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXDebugActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
old mode 100755
new mode 100644
index af74bd7..3f6e3b7
--- a/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/WXPageActivity.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex;
 
@@ -217,10 +31,12 @@
 import android.os.Handler;
 import android.os.Message;
 import android.support.annotation.NonNull;
+import android.support.v4.util.ArrayMap;
 import android.support.v7.app.ActionBar;
 import android.support.v7.widget.Toolbar;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.Pair;
 import android.view.KeyEvent;
 import android.view.Menu;
 import android.view.MenuItem;
@@ -229,6 +45,7 @@
 import android.widget.ProgressBar;
 import android.widget.Toast;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.weex.commons.WXAnalyzerDelegate;
 import com.alibaba.weex.commons.util.ScreenUtil;
 import com.alibaba.weex.constants.Constants;
@@ -243,7 +60,10 @@
 import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
 import com.taobao.weex.common.IWXDebugProxy;
 import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.ui.component.NestedContainer;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXLogUtils;
 
@@ -252,6 +72,7 @@
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.HashMap;
+import java.util.Map;
 
 
 public class WXPageActivity extends WXBaseActivity implements IWXRenderListener, Handler.Callback, WXSDKInstance.NestedInstanceInterceptor {
@@ -279,6 +100,8 @@
     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_wxpage);
     setCurrentWxPageActivity(this);
+
+
     WXSDKEngine.setActivityNavBarSetter(new NavigatorAdapter());
     getWindow().setFormat(PixelFormat.TRANSLUCENT);
     mUri = getIntent().getData();
@@ -313,6 +136,8 @@
       mUri = mUri.buildUpon().scheme("http").build();
       loadWXfromService(mUri.toString());
       startHotRefresh();
+      mWXHandler.removeCallbacks(mCollectIDMap);
+      mWXHandler.postDelayed(mCollectIDMap,2000);
     }else if (TextUtils.equals("http", mUri.getScheme()) || TextUtils.equals("https", mUri.getScheme())) {
       // if url has key "_wx_tpl" then get weex bundle js
       String weexTpl = mUri.getQueryParameter(Constants.WEEX_TPL_KEY);
@@ -358,7 +183,7 @@
         Rect outRect = new Rect();
         ctx.getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect);
         mConfigMap.put("bundleUrl", mUri.toString());
-        String path = mUri.getScheme().equals("file") ? assembleFilePath(mUri) : mUri.toString();
+        String path = "file".equals(mUri.getScheme()) ? assembleFilePath(mUri) : mUri.toString();
         mInstance.render(TAG, WXFileUtils.loadAsset(path, WXPageActivity.this),
             mConfigMap, null,
             WXRenderStrategy.APPEND_ASYNC);
@@ -449,6 +274,47 @@
 
   }
 
+  private Map<String,String> mIDMap = new ArrayMap<>();
+  private final Runnable mCollectIDMap = new Runnable() {
+    @Override
+    public void run() {
+      View container = findViewById(R.id.container);
+
+      collectId(mInstance.getRootComponent(),mIDMap);
+      container.setContentDescription(JSON.toJSONString(mIDMap));
+
+      mWXHandler.removeCallbacks(this);
+      mWXHandler.postDelayed(this,2000);
+    }
+  };
+
+  /**
+   *
+   * @param map <weexid,viewId>
+   */
+  private static void collectId(WXComponent comp, Map<String,String> map){
+    if(comp == null){
+      return;
+    }
+    ImmutableDomObject dom;
+    String id;
+    View view;
+    if((view = comp.getHostView())!=null &&
+        (dom = comp.getDomObject()) != null &&
+        (id = (String) dom.getAttrs().get("testId"))!=null &&
+        !map.containsKey(id)){
+      Pair<String,Integer> pair = Utility.nextID();
+      view.setId(pair.second);
+      map.put(id,pair.first);
+    }
+    if(comp instanceof WXVContainer){
+      WXVContainer container = (WXVContainer) comp;
+      for(int i = container.getChildCount()-1;i>=0;i--){
+        collectId(container.getChild(i),map);
+      }
+    }
+  }
+
   @Override
   protected void onDestroy() {
     super.onDestroy();
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/constants/Constants.java b/android/playground/app/src/main/java/com/alibaba/weex/constants/Constants.java
old mode 100755
new mode 100644
index ad8a8c3..abb0282
--- a/android/playground/app/src/main/java/com/alibaba/weex/constants/Constants.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/constants/Constants.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.constants;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/PlayDebugAdapter.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/PlayDebugAdapter.java
index 6751f41..d93d38f 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/PlayDebugAdapter.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/PlayDebugAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java
new file mode 100644
index 0000000..05b6de1
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/WXInstanceStatisticsListener.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.alibaba.weex.extend;
+
+import com.taobao.weex.IWXStatisticsListener;
+
+import com.taobao.weex.utils.Trace;
+
+public class WXInstanceStatisticsListener implements IWXStatisticsListener {
+  /**
+   * Called when weex sdk engine begin to initialize.
+   */
+  @Override
+  public void onSDKEngineInitialize() {}
+
+  /**
+   * Called when begin to load js framework.
+   */
+  @Override
+  public void onJsFrameworkStart() {}
+
+  /**
+   * Called when finish loading js framework.
+   */
+  @Override
+  public void onJsFrameworkReady() {}
+
+  /**
+   * Called when the render view phase of first view reached.
+   */
+  @Override
+  public void onFirstView() {}
+
+  /**
+   * Called when the render view phase of first screen reached.
+   */
+  @Override
+  public void onFirstScreen() {
+    Trace.beginSection("onFirstScreen done");
+    Trace.endSection();
+  }
+
+  /**
+   * Called when to start a http request.
+   */
+  @Override
+  public void onHttpStart() {}
+
+  /**
+   * Called when received a http response header data.
+   */
+  @Override
+  public void onHeadersReceived() {}
+
+  /**
+   * Called when to finish a http request.
+   */
+  @Override
+  public void onHttpFinish() {}
+
+  /**
+   * Called when an exception occured.
+   */
+  @Override
+  public void onException(String instanceid, String errCode, String msg) {}
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
index 19e3296..0fa6067 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/adapter/InterceptWXHttpAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.adapter;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/RichText.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/RichText.java
index 66f1314..a42f9ac 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/RichText.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/RichText.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.component;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXComponentSyncTest.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXComponentSyncTest.java
index 00f6d54..d41fd3f 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXComponentSyncTest.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXComponentSyncTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.component;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java
new file mode 100644
index 0000000..1021041
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/WXMask.java
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.alibaba.weex.extend.component;
+
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.support.annotation.NonNull;
+import android.view.Gravity;
+import android.view.View;
+import android.view.WindowManager;
+import android.widget.PopupWindow;
+
+import com.alibaba.weex.extend.view.WXMaskView;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXVContainer;
+
+/**
+ * Created by lixinke on 2016/12/26.
+ */
+
+public class WXMask extends WXVContainer {
+
+  private PopupWindow mPopupWindow;
+  private WXMaskView mContainerView;
+
+  public WXMask(WXSDKInstance instance, WXDomObject dom, WXVContainer parent) {
+    super(instance, dom, parent);
+  }
+
+  @Override
+  protected View initComponentHostView(@NonNull Context context) {
+
+    mContainerView = new WXMaskView(context);
+    mPopupWindow = new PopupWindow(context);
+    mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
+    mPopupWindow.setClippingEnabled(false);
+    mPopupWindow.setContentView(mContainerView);
+    mPopupWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
+    mPopupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
+    mPopupWindow.showAtLocation(((Activity) context).getWindow().getDecorView(), Gravity.TOP, (int) getDomObject().getLayoutX(), (int) getDomObject().getLayoutY());
+
+    return mContainerView;
+  }
+
+  @Override
+  public boolean isVirtualComponent() {
+    return true;
+  }
+
+  @Override
+  public void removeVirtualComponent() {
+    if (mPopupWindow.isShowing()) {
+      mPopupWindow.dismiss();
+    }
+  }
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java
new file mode 100644
index 0000000..d476302
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/component/dom/WXMaskDomObject.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.alibaba.weex.extend.component.dom;
+
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by lixinke on 2016/12/28.
+ */
+
+public class WXMaskDomObject extends WXDomObject {
+
+  @Override
+  protected Map<String, String> getDefaultStyle() {
+    Map<String,String> styles=new HashMap<>();
+    styles.put(Constants.Name.POSITION, "absolute");
+    int width=WXViewUtils.getScreenWidth(getDomContext().getUIContext());
+    styles.put(Constants.Name.WIDTH, String.valueOf(WXViewUtils.getWebPxByWidth(width, getViewPortWidth())));
+    int height=WXViewUtils.getScreenHeight(getDomContext().getUIContext());
+    styles.put(Constants.Name.HEIGHT, String.valueOf(WXViewUtils.getWebPxByWidth(height,getViewPortWidth())));
+    styles.put(Constants.Name.TOP, "0");
+    return styles;
+  }
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/GeolocationModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/GeolocationModule.java
index 8699879..98f0c92 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/GeolocationModule.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/GeolocationModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/MyModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/MyModule.java
index e516a7d..c2b0214 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/MyModule.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/MyModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/RenderModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/RenderModule.java
old mode 100755
new mode 100644
index 549be9e..1ad0da7
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/RenderModule.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/RenderModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/SyncTestModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/SyncTestModule.java
index 6398e59..74ad1d9 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/SyncTestModule.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/SyncTestModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java
old mode 100755
new mode 100644
index 46d2313..098681d
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/WXEventModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/DefaultLocation.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/DefaultLocation.java
index 807d0fc..a2df53d 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/DefaultLocation.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/DefaultLocation.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module.location;
 
@@ -219,12 +33,12 @@
 import android.support.v4.app.ActivityCompat;
 import android.text.TextUtils;
 
-import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.bridge.SimpleJSCallback;
 import com.taobao.weex.utils.WXLogUtils;
 
 import org.json.JSONException;
+import org.json.JSONObject;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -233,9 +47,6 @@
 import java.util.Map;
 import java.util.UUID;
 
-/**
- * Created by lixinke on 16/9/10.
- */
 public class DefaultLocation implements ILocatable {
 
   private static final String TAG = "DefaultLocation";
@@ -261,12 +72,10 @@
 
   @Override
   public void getCurrentPosition(final String successCallback, final String errorCallback, final String params) {
-    if(WXEnvironment.isApkDebugable()) {
-      WXLogUtils.d(TAG, "into--[getCurrentPosition] successCallback:" + successCallback + " \nerrorCallback:" + errorCallback + " \nparams:" + params);
-    }
+    WXLogUtils.d(TAG, "into--[getCurrentPosition] successCallback:" + successCallback + " \nerrorCallback:" + errorCallback + " \nparams:" + params);
     if (!TextUtils.isEmpty(params)) {
       try {
-        org.json.JSONObject jsObj = new org.json.JSONObject(params);
+        JSONObject jsObj = new JSONObject(params);
         boolean enableHighAccuracy = jsObj.optBoolean("enableHighAccuracy");
         boolean enableAddress = jsObj.optBoolean("address");
         WXLocationListener listener = findLocation(null, successCallback, errorCallback, enableHighAccuracy, enableAddress);
@@ -281,11 +90,13 @@
     Map<String, Object> options = new HashMap<>();
     options.put(ERROR_CODE, ErrorCode.PARAMS_ERROR);
     options.put(ERROR_MSG, ErrorMsg.PARAMS_ERROR);
-    WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), errorCallback, options);
+    if (mWXSDKInstance != null) {
+      new SimpleJSCallback(mWXSDKInstance.getInstanceId(), errorCallback).invoke(options);
+    }
   }
 
   private WXLocationListener findLocation(String watchId, String sucCallback, String errorCallback, boolean enableHighAccuracy, boolean enableAddress) {
-//    WXLogUtils.d(TAG, "into--[findLocation] mWatchId:" + watchId + "\nsuccessCallback:" + sucCallback + "\nerrorCallback:" + errorCallback + "\nenableHighAccuracy:" + enableHighAccuracy + "\nmEnableAddress:" + enableAddress);
+    WXLogUtils.d(TAG, "into--[findLocation] mWatchId:" + watchId + "\nsuccessCallback:" + sucCallback + "\nerrorCallback:" + errorCallback + "\nenableHighAccuracy:" + enableHighAccuracy + "\nmEnableAddress:" + enableAddress);
 
     if (mLocationManager == null) {
       mLocationManager = (LocationManager) mWXSDKInstance.getContext().getSystemService(Context.LOCATION_SERVICE);
@@ -297,14 +108,20 @@
     //String provider = locationManager.getBestProvider(criteria, false);
     if (ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
       WXLocationListener WXLocationListener = new WXLocationListener(mLocationManager, mWXSDKInstance, watchId, sucCallback, errorCallback, enableAddress);
-      mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, WXLocationListener);
-      mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, WXLocationListener);
+      if (mLocationManager.getAllProviders().contains(LocationManager.GPS_PROVIDER)) {
+        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME, MIN_DISTANCE, WXLocationListener);
+      }
+      if (mLocationManager.getAllProviders().contains(LocationManager.NETWORK_PROVIDER)) {
+        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME, MIN_DISTANCE, WXLocationListener);
+      }
       return WXLocationListener;
     } else {
       Map<String, Object> options = new HashMap<>();
       options.put(ERROR_CODE, ErrorCode.NO_PERMISSION_ERROR);
       options.put(ERROR_MSG, ErrorMsg.NO_PERMISSION_ERROR);
-      WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), errorCallback, options);
+      if (mWXSDKInstance != null) {
+        new SimpleJSCallback(mWXSDKInstance.getInstanceId(), errorCallback).invoke(options);
+      }
     }
     return null;
   }
@@ -314,7 +131,7 @@
     WXLogUtils.d("into--[watchPosition] successCallback:" + successCallback + " errorCallback:" + errorCallback + "\nparams:" + params);
     if (!TextUtils.isEmpty(params)) {
       try {
-        org.json.JSONObject jsObj = new org.json.JSONObject(params);
+        JSONObject jsObj = new JSONObject(params);
         boolean enableHighAccuracy = jsObj.optBoolean("enableHighAccuracy");
         boolean enableAddress = jsObj.optBoolean("address");
 
@@ -331,7 +148,9 @@
     Map<String, Object> options = new HashMap<>();
     options.put(ERROR_CODE, ErrorCode.PARAMS_ERROR);
     options.put(ERROR_MSG, ErrorMsg.PARAMS_ERROR);
-    WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), errorCallback, options);
+    if (mWXSDKInstance != null) {
+      new SimpleJSCallback(mWXSDKInstance.getInstanceId(), errorCallback).invoke(options);
+    }
   }
 
   @Override
@@ -383,39 +202,31 @@
 
   static class WXLocationListener implements LocationListener, Handler.Callback {
 
-    private WXSDKInstance mWXSDKInstance;
+    private Context mContext = null;
     private String mWatchId;
-    private String mSucCallback;
-    private String mErrorCallback;
+    private SimpleJSCallback mSucCallback = null;
+    private SimpleJSCallback mErrorCallback = null;
     private boolean mEnableAddress;
     private Handler mHandler;
     private LocationManager mLocationManager;
 
     private WXLocationListener(LocationManager locationManager, WXSDKInstance instance, String watchId, String sucCallback, String errorCallback, boolean enableAddress) {
-      mWXSDKInstance = instance;
       this.mWatchId = watchId;
-      this.mSucCallback = sucCallback;
-      this.mErrorCallback = errorCallback;
+      if (instance != null) {
+        this.mSucCallback = new SimpleJSCallback(instance.getInstanceId(), sucCallback);
+        this.mErrorCallback = new SimpleJSCallback(instance.getInstanceId(), errorCallback);
+        mContext = instance.getContext();
+      }
       this.mEnableAddress = enableAddress;
       mHandler = new Handler(this);
       mLocationManager = locationManager;
-//      WVThreadPool.getInstance().execute(new Runnable() {
-//        public void run() {
-          mHandler.sendEmptyMessageDelayed(TIME_OUT_WHAT, GPS_TIMEOUT);
-//        }
-//      });
+      mHandler.sendEmptyMessageDelayed(TIME_OUT_WHAT, GPS_TIMEOUT);
     }
 
     @Override
     public void onLocationChanged(Location location) {
       mHandler.removeMessages(TIME_OUT_WHAT);
-      if(WXEnvironment.isApkDebugable()) {
-        WXLogUtils.d(TAG, "into--[onLocationChanged] location:" + location == null ? "Location is NULL!" : location.toString());
-      }
-
-      if (mWXSDKInstance == null || mWXSDKInstance.isDestroy()) {
-        return;
-      }
+      WXLogUtils.d(TAG, "into--[onLocationChanged] location:" + location == null ? "Location is NULL!" : location.toString());
 
       if (location != null) {
         Map<String, Object> result = new HashMap<>();
@@ -457,7 +268,15 @@
         if (!TextUtils.isEmpty(mWatchId)) {
           result.put(WATCH_ID, mWatchId);
         }
-        WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), mSucCallback, result, TextUtils.isEmpty(mWatchId) ? false : true);
+
+        if (mSucCallback != null) {
+          boolean isKeepAlive = TextUtils.isEmpty(mWatchId) ? false : true;
+          if (isKeepAlive) {
+            mSucCallback.invokeAndKeepAlive(result);
+          } else {
+            mSucCallback.invoke(result);
+          }
+        }
       } else {
         Map<String, Object> options = new HashMap<>();
         options.put(ERROR_CODE, ErrorCode.LOCATION_ERROR);
@@ -465,10 +284,17 @@
         if (!TextUtils.isEmpty(mWatchId)) {
           options.put(WATCH_ID, mWatchId);
         }
-        WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), mErrorCallback, options, TextUtils.isEmpty(mWatchId) ? false : true);
+        if (mErrorCallback != null) {
+          boolean isKeepAlive = TextUtils.isEmpty(mWatchId) ? false : true;
+          if (isKeepAlive) {
+            mErrorCallback.invokeAndKeepAlive(options);
+          } else {
+            mErrorCallback.invoke(options);
+          }
+        }
       }
-      if (TextUtils.isEmpty(mWatchId)) {
-        if (mLocationManager != null && ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+      if (TextUtils.isEmpty(mWatchId) && mContext != null) {
+        if (mLocationManager != null && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
           destroy();
           mLocationManager.removeUpdates(this);
         }
@@ -493,13 +319,11 @@
     @Override
     public boolean handleMessage(Message msg) {
       if (msg.what == TIME_OUT_WHAT) {
-        if(WXEnvironment.isApkDebugable()) {
-          WXLogUtils.d(TAG, "into--[handleMessage] Location Time Out!");
-        }
-        if (mWXSDKInstance == null || mWXSDKInstance.isDestroy() || mLocationManager == null) {
+        WXLogUtils.d(TAG, "into--[handleMessage] Location Time Out!");
+        if (mContext == null || mLocationManager == null) {
           return false;
         }
-        if (ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mWXSDKInstance.getContext(), Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
+        if (ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
           mLocationManager.removeUpdates(this);
         }
         Map<String, Object> options = new HashMap<>();
@@ -508,7 +332,9 @@
         if (!TextUtils.isEmpty(mWatchId)) {
           options.put(WATCH_ID, mWatchId);
         }
-        WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(), mErrorCallback, options);
+        if (mErrorCallback != null) {
+          mErrorCallback.invoke(options);
+        }
         return true;
       }
       return false;
@@ -518,14 +344,12 @@
      * get address info
      */
     private Address getAddress(double latitude, double longitude) {
-      if(WXEnvironment.isApkDebugable()) {
-        WXLogUtils.d(TAG, "into--[getAddress] latitude:" + latitude + " longitude:" + longitude);
-      }
+      WXLogUtils.d(TAG, "into--[getAddress] latitude:" + latitude + " longitude:" + longitude);
       try {
-        if (mWXSDKInstance == null || mWXSDKInstance.isDestroy()) {
+        if (mContext == null) {
           return null;
         }
-        Geocoder gc = new Geocoder(mWXSDKInstance.getContext());
+        Geocoder gc = new Geocoder(mContext);
         List<Address> list = gc.getFromLocation(latitude, longitude, 1);
         if (list != null && list.size() > 0) {
           return list.get(0);
@@ -539,8 +363,8 @@
     public void destroy() {
       if (mHandler != null) {
         mHandler.removeMessages(TIME_OUT_WHAT);
-        mWXSDKInstance=null;
+        mContext = null;
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/ILocatable.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/ILocatable.java
index 59223ba..09034e8 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/ILocatable.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/ILocatable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module.location;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/LocationFactory.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/LocationFactory.java
index 63e55f8..055dfc9 100644
--- a/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/LocationFactory.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/module/location/LocationFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.extend.module.location;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java b/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java
new file mode 100644
index 0000000..5ea766c
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/extend/view/WXMaskView.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.alibaba.weex.extend.view;
+
+import android.content.Context;
+
+import com.taobao.weex.ui.view.WXFrameLayout;
+
+/**
+ * Created by lixinke on 2016/12/26.
+ */
+
+public class WXMaskView extends WXFrameLayout {
+
+  public WXMaskView(Context context) {
+    super(context);
+  }
+}
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/HotRefreshManager.java b/android/playground/app/src/main/java/com/alibaba/weex/https/HotRefreshManager.java
old mode 100755
new mode 100644
index e9c7e01..c220d9c
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/HotRefreshManager.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/HotRefreshManager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpManager.java b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpManager.java
old mode 100755
new mode 100644
index e0db8b0..a47bbb0
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpManager.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpManager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpResponse.java b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpResponse.java
old mode 100755
new mode 100644
index 533f184..bcced31
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpResponse.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpResponse.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpTask.java b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpTask.java
old mode 100755
new mode 100644
index 96a5c34..c1e0559
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpTask.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/WXHttpTask.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/WXOkHttpDispatcher.java b/android/playground/app/src/main/java/com/alibaba/weex/https/WXOkHttpDispatcher.java
old mode 100755
new mode 100644
index af9e67b..515a63b
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/WXOkHttpDispatcher.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/WXOkHttpDispatcher.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/https/WXRequestListener.java b/android/playground/app/src/main/java/com/alibaba/weex/https/WXRequestListener.java
old mode 100755
new mode 100644
index d45c1e8..933eb11
--- a/android/playground/app/src/main/java/com/alibaba/weex/https/WXRequestListener.java
+++ b/android/playground/app/src/main/java/com/alibaba/weex/https/WXRequestListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.alibaba.weex.https;
 
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_camera.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_camera.xml
index 7d1c583..344860a 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_camera.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_camera.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_gallery.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_gallery.xml
index 2f2ca2a..788b59b 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_gallery.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_gallery.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_manage.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_manage.xml
index 065d9fa..1bb2478 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_manage.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_manage.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_send.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_send.xml
index a554657..9094dfa 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_send.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_send.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_share.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_share.xml
index 8151b38..c198eb0 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_share.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_share.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable-v21/ic_menu_slideshow.xml b/android/playground/app/src/main/res/drawable-v21/ic_menu_slideshow.xml
index e750991..bc8c64c 100755
--- a/android/playground/app/src/main/res/drawable-v21/ic_menu_slideshow.xml
+++ b/android/playground/app/src/main/res/drawable-v21/ic_menu_slideshow.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
diff --git a/android/playground/app/src/main/res/drawable/side_nav_bar.xml b/android/playground/app/src/main/res/drawable/side_nav_bar.xml
index c1dff26..41946f9 100755
--- a/android/playground/app/src/main/res/drawable/side_nav_bar.xml
+++ b/android/playground/app/src/main/res/drawable/side_nav_bar.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
     <gradient
diff --git a/android/playground/app/src/main/res/layout/activity_dynamic.xml b/android/playground/app/src/main/res/layout/activity_dynamic.xml
index 4099744..bd7c8e3 100644
--- a/android/playground/app/src/main/res/layout/activity_dynamic.xml
+++ b/android/playground/app/src/main/res/layout/activity_dynamic.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <android.support.design.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/android/playground/app/src/main/res/layout/activity_index.xml b/android/playground/app/src/main/res/layout/activity_index.xml
index a798d56..6d2ee7f 100755
--- a/android/playground/app/src/main/res/layout/activity_index.xml
+++ b/android/playground/app/src/main/res/layout/activity_index.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <android.support.design.widget.CoordinatorLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/android/playground/app/src/main/res/layout/activity_splash.xml b/android/playground/app/src/main/res/layout/activity_splash.xml
index 1f9a831..d67473a 100755
--- a/android/playground/app/src/main/res/layout/activity_splash.xml
+++ b/android/playground/app/src/main/res/layout/activity_splash.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              android:layout_width="match_parent"
diff --git a/android/playground/app/src/main/res/layout/activity_wxpage.xml b/android/playground/app/src/main/res/layout/activity_wxpage.xml
index 01adcbb..892f405 100755
--- a/android/playground/app/src/main/res/layout/activity_wxpage.xml
+++ b/android/playground/app/src/main/res/layout/activity_wxpage.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/android/playground/app/src/main/res/layout/app_bar_main.xml b/android/playground/app/src/main/res/layout/app_bar_main.xml
index b1f7e61..fcefedf 100755
--- a/android/playground/app/src/main/res/layout/app_bar_main.xml
+++ b/android/playground/app/src/main/res/layout/app_bar_main.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/android/playground/app/src/main/res/layout/camera.xml b/android/playground/app/src/main/res/layout/camera.xml
index 50a76e2..a016c53 100755
--- a/android/playground/app/src/main/res/layout/camera.xml
+++ b/android/playground/app/src/main/res/layout/camera.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
diff --git a/android/playground/app/src/main/res/layout/catalog_item.xml b/android/playground/app/src/main/res/layout/catalog_item.xml
index f59930c..56278ec 100755
--- a/android/playground/app/src/main/res/layout/catalog_item.xml
+++ b/android/playground/app/src/main/res/layout/catalog_item.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/android/playground/app/src/main/res/layout/content_dynamic.xml b/android/playground/app/src/main/res/layout/content_dynamic.xml
index bb727cb..b93d2db 100644
--- a/android/playground/app/src/main/res/layout/content_dynamic.xml
+++ b/android/playground/app/src/main/res/layout/content_dynamic.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@+id/wx_brief_wv_container"
                 android:orientation="vertical"
diff --git a/android/playground/app/src/main/res/layout/content_main.xml b/android/playground/app/src/main/res/layout/content_main.xml
index 4a304ee..b92e971 100755
--- a/android/playground/app/src/main/res/layout/content_main.xml
+++ b/android/playground/app/src/main/res/layout/content_main.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <FrameLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
diff --git a/android/playground/app/src/main/res/layout/content_wx_main.xml b/android/playground/app/src/main/res/layout/content_wx_main.xml
index ddf79a8..e5fffdb 100755
--- a/android/playground/app/src/main/res/layout/content_wx_main.xml
+++ b/android/playground/app/src/main/res/layout/content_wx_main.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 xmlns:app="http://schemas.android.com/apk/res-auto"
                 app:layout_behavior="@string/appbar_scrolling_view_behavior"
diff --git a/android/playground/app/src/main/res/layout/hello_weex.xml b/android/playground/app/src/main/res/layout/hello_weex.xml
index cd05460..2a60664 100644
--- a/android/playground/app/src/main/res/layout/hello_weex.xml
+++ b/android/playground/app/src/main/res/layout/hello_weex.xml
@@ -1,208 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!--
-  ~
-  ~                                  Apache License
-  ~                            Version 2.0, January 2004
-  ~                         http://www.apache.org/licenses/
-  ~
-  ~    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-  ~
-  ~    1. Definitions.
-  ~
-  ~       "License" shall mean the terms and conditions for use, reproduction,
-  ~       and distribution as defined by Sections 1 through 9 of this document.
-  ~
-  ~       "Licensor" shall mean the copyright owner or entity authorized by
-  ~       the copyright owner that is granting the License.
-  ~
-  ~       "Legal Entity" shall mean the union of the acting entity and all
-  ~       other entities that control, are controlled by, or are under common
-  ~       control with that entity. For the purposes of this definition,
-  ~       "control" means (i) the power, direct or indirect, to cause the
-  ~       direction or management of such entity, whether by contract or
-  ~       otherwise, or (ii) ownership of fifty percent (50%) or more of the
-  ~       outstanding shares, or (iii) beneficial ownership of such entity.
-  ~
-  ~       "You" (or "Your") shall mean an individual or Legal Entity
-  ~       exercising permissions granted by this License.
-  ~
-  ~       "Source" form shall mean the preferred form for making modifications,
-  ~       including but not limited to software source code, documentation
-  ~       source, and configuration files.
-  ~
-  ~       "Object" form shall mean any form resulting from mechanical
-  ~       transformation or translation of a Source form, including but
-  ~       not limited to compiled object code, generated documentation,
-  ~       and conversions to other media types.
-  ~
-  ~       "Work" shall mean the work of authorship, whether in Source or
-  ~       Object form, made available under the License, as indicated by a
-  ~       copyright notice that is included in or attached to the work
-  ~       (an example is provided in the Appendix below).
-  ~
-  ~       "Derivative Works" shall mean any work, whether in Source or Object
-  ~       form, that is based on (or derived from) the Work and for which the
-  ~       editorial revisions, annotations, elaborations, or other modifications
-  ~       represent, as a whole, an original work of authorship. For the purposes
-  ~       of this License, Derivative Works shall not include works that remain
-  ~       separable from, or merely link (or bind by name) to the interfaces of,
-  ~       the Work and Derivative Works thereof.
-  ~
-  ~       "Contribution" shall mean any work of authorship, including
-  ~       the original version of the Work and any modifications or additions
-  ~       to that Work or Derivative Works thereof, that is intentionally
-  ~       submitted to Licensor for inclusion in the Work by the copyright owner
-  ~       or by an individual or Legal Entity authorized to submit on behalf of
-  ~       the copyright owner. For the purposes of this definition, "submitted"
-  ~       means any form of electronic, verbal, or written communication sent
-  ~       to the Licensor or its representatives, including but not limited to
-  ~       communication on electronic mailing lists, source code control systems,
-  ~       and issue tracking systems that are managed by, or on behalf of, the
-  ~       Licensor for the purpose of discussing and improving the Work, but
-  ~       excluding communication that is conspicuously marked or otherwise
-  ~       designated in writing by the copyright owner as "Not a Contribution."
-  ~
-  ~       "Contributor" shall mean Licensor and any individual or Legal Entity
-  ~       on behalf of whom a Contribution has been received by Licensor and
-  ~       subsequently incorporated within the Work.
-  ~
-  ~    2. Grant of Copyright License. Subject to the terms and conditions of
-  ~       this License, each Contributor hereby grants to You a perpetual,
-  ~       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-  ~       copyright license to reproduce, prepare Derivative Works of,
-  ~       publicly display, publicly perform, sublicense, and distribute the
-  ~       Work and such Derivative Works in Source or Object form.
-  ~
-  ~    3. Grant of Patent License. Subject to the terms and conditions of
-  ~       this License, each Contributor hereby grants to You a perpetual,
-  ~       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-  ~       (except as stated in this section) patent license to make, have made,
-  ~       use, offer to sell, sell, import, and otherwise transfer the Work,
-  ~       where such license applies only to those patent claims licensable
-  ~       by such Contributor that are necessarily infringed by their
-  ~       Contribution(s) alone or by combination of their Contribution(s)
-  ~       with the Work to which such Contribution(s) was submitted. If You
-  ~       institute patent litigation against any entity (including a
-  ~       cross-claim or counterclaim in a lawsuit) alleging that the Work
-  ~       or a Contribution incorporated within the Work constitutes direct
-  ~       or contributory patent infringement, then any patent licenses
-  ~       granted to You under this License for that Work shall terminate
-  ~       as of the date such litigation is filed.
-  ~
-  ~    4. Redistribution. You may reproduce and distribute copies of the
-  ~       Work or Derivative Works thereof in any medium, with or without
-  ~       modifications, and in Source or Object form, provided that You
-  ~       meet the following conditions:
-  ~
-  ~       (a) You must give any other recipients of the Work or
-  ~           Derivative Works a copy of this License; and
-  ~
-  ~       (b) You must cause any modified files to carry prominent notices
-  ~           stating that You changed the files; and
-  ~
-  ~       (c) You must retain, in the Source form of any Derivative Works
-  ~           that You distribute, all copyright, patent, trademark, and
-  ~           attribution notices from the Source form of the Work,
-  ~           excluding those notices that do not pertain to any part of
-  ~           the Derivative Works; and
-  ~
-  ~       (d) If the Work includes a "NOTICE" text file as part of its
-  ~           distribution, then any Derivative Works that You distribute must
-  ~           include a readable copy of the attribution notices contained
-  ~           within such NOTICE file, excluding those notices that do not
-  ~           pertain to any part of the Derivative Works, in at least one
-  ~           of the following places: within a NOTICE text file distributed
-  ~           as part of the Derivative Works; within the Source form or
-  ~           documentation, if provided along with the Derivative Works; or,
-  ~           within a display generated by the Derivative Works, if and
-  ~           wherever such third-party notices normally appear. The contents
-  ~           of the NOTICE file are for informational purposes only and
-  ~           do not modify the License. You may add Your own attribution
-  ~           notices within Derivative Works that You distribute, alongside
-  ~           or as an addendum to the NOTICE text from the Work, provided
-  ~           that such additional attribution notices cannot be construed
-  ~           as modifying the License.
-  ~
-  ~       You may add Your own copyright statement to Your modifications and
-  ~       may provide additional or different license terms and conditions
-  ~       for use, reproduction, or distribution of Your modifications, or
-  ~       for any such Derivative Works as a whole, provided Your use,
-  ~       reproduction, and distribution of the Work otherwise complies with
-  ~       the conditions stated in this License.
-  ~
-  ~    5. Submission of Contributions. Unless You explicitly state otherwise,
-  ~       any Contribution intentionally submitted for inclusion in the Work
-  ~       by You to the Licensor shall be under the terms and conditions of
-  ~       this License, without any additional terms or conditions.
-  ~       Notwithstanding the above, nothing herein shall supersede or modify
-  ~       the terms of any separate license agreement you may have executed
-  ~       with Licensor regarding such Contributions.
-  ~
-  ~    6. Trademarks. This License does not grant permission to use the trade
-  ~       names, trademarks, service marks, or product names of the Licensor,
-  ~       except as required for reasonable and customary use in describing the
-  ~       origin of the Work and reproducing the content of the NOTICE file.
-  ~
-  ~    7. Disclaimer of Warranty. Unless required by applicable law or
-  ~       agreed to in writing, Licensor provides the Work (and each
-  ~       Contributor provides its Contributions) on an "AS IS" BASIS,
-  ~       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-  ~       implied, including, without limitation, any warranties or conditions
-  ~       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-  ~       PARTICULAR PURPOSE. You are solely responsible for determining the
-  ~       appropriateness of using or redistributing the Work and assume any
-  ~       risks associated with Your exercise of permissions under this License.
-  ~
-  ~    8. Limitation of Liability. In no event and under no legal theory,
-  ~       whether in tort (including negligence), contract, or otherwise,
-  ~       unless required by applicable law (such as deliberate and grossly
-  ~       negligent acts) or agreed to in writing, shall any Contributor be
-  ~       liable to You for damages, including any direct, indirect, special,
-  ~       incidental, or consequential damages of any character arising as a
-  ~       result of this License or out of the use or inability to use the
-  ~       Work (including but not limited to damages for loss of goodwill,
-  ~       work stoppage, computer failure or malfunction, or any and all
-  ~       other commercial damages or losses), even if such Contributor
-  ~       has been advised of the possibility of such damages.
-  ~
-  ~    9. Accepting Warranty or Additional Liability. While redistributing
-  ~       the Work or Derivative Works thereof, You may choose to offer,
-  ~       and charge a fee for, acceptance of support, warranty, indemnity,
-  ~       or other liability obligations and/or rights consistent with this
-  ~       License. However, in accepting such obligations, You may act only
-  ~       on Your own behalf and on Your sole responsibility, not on behalf
-  ~       of any other Contributor, and only if You agree to indemnify,
-  ~       defend, and hold each Contributor harmless for any liability
-  ~       incurred by, or claims asserted against, such Contributor by reason
-  ~       of your accepting any such warranty or additional liability.
-  ~
-  ~    END OF TERMS AND CONDITIONS
-  ~
-  ~    APPENDIX: How to apply the Apache License to your work.
-  ~
-  ~       To apply the Apache License to your work, attach the following
-  ~       boilerplate notice, with the fields enclosed by brackets "[]"
-  ~       replaced with your own identifying information. (Don't include
-  ~       the brackets!)  The text should be enclosed in the appropriate
-  ~       comment syntax for the file format. We also recommend that a
-  ~       file or class name and description of purpose be included on the
-  ~       same "printed page" as the copyright notice for easier
-  ~       identification within third-party archives.
-  ~
-  ~    Copyright 2016 Alibaba Group
-  ~
-  ~    Licensed under the Apache License, Version 2.0 (the "License");
-  ~    you may not use this file except in compliance with the License.
-  ~    You may obtain a copy of the License at
-  ~
-  ~        http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~    Unless required by applicable law or agreed to in writing, software
-  ~    distributed under the License is distributed on an "AS IS" BASIS,
-  ~    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~    See the License for the specific language governing permissions and
-  ~    limitations under the License.
-  -->
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 
 <FrameLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
diff --git a/android/playground/app/src/main/res/layout/id_stub.xml b/android/playground/app/src/main/res/layout/id_stub.xml
new file mode 100644
index 0000000..fe829cf
--- /dev/null
+++ b/android/playground/app/src/main/res/layout/id_stub.xml
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:orientation="vertical"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent">
+    <!-- Do not manual edit this file, it's gen by script-->
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4999"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4998"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4997"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4996"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4995"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4994"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4993"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4992"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4991"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4990"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4989"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4988"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4987"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4986"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4985"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4984"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4983"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4982"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4981"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4980"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4979"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4978"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4977"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4976"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4975"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4974"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4973"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4972"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4971"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4970"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4969"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4968"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4967"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4966"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4965"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4964"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4963"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4962"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4961"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4960"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4959"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4958"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4957"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4956"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4955"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4954"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4953"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4952"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4951"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4950"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4949"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4948"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4947"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4946"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4945"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4944"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4943"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4942"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4941"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4940"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4939"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4938"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4937"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4936"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4935"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4934"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4933"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4932"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4931"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4930"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4929"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4928"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4927"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4926"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4925"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4924"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4923"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4922"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4921"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4920"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4919"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4918"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4917"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4916"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4915"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4914"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4913"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4912"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4911"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4910"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4909"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4908"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4907"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4906"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4905"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4904"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4903"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4902"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4901"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4900"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4899"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4898"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4897"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4896"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4895"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4894"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4893"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4892"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4891"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4890"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4889"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4888"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4887"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4886"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4885"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4884"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4883"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4882"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4881"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4880"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4879"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4878"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4877"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4876"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4875"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4874"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4873"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4872"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4871"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4870"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4869"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4868"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4867"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4866"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4865"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4864"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4863"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4862"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4861"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4860"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4859"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4858"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4857"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4856"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4855"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4854"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4853"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4852"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4851"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4850"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4849"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4848"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4847"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4846"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4845"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4844"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4843"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4842"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4841"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4840"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4839"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4838"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4837"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4836"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4835"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4834"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4833"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4832"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4831"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4830"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4829"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4828"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4827"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4826"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4825"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4824"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4823"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4822"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4821"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4820"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4819"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4818"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4817"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4816"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4815"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4814"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4813"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4812"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4811"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4810"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4809"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4808"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4807"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4806"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4805"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4804"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4803"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4802"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4801"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4800"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4799"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4798"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4797"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4796"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4795"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4794"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4793"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4792"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4791"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4790"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4789"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4788"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4787"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4786"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4785"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4784"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4783"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4782"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4781"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4780"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4779"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4778"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4777"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4776"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4775"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4774"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4773"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4772"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4771"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4770"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4769"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4768"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4767"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4766"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4765"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4764"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4763"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4762"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4761"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4760"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4759"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4758"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4757"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4756"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4755"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4754"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4753"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4752"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4751"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4750"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4749"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4748"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4747"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4746"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4745"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4744"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4743"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4742"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4741"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4740"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4739"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4738"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4737"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4736"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4735"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4734"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4733"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4732"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4731"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4730"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4729"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4728"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4727"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4726"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4725"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4724"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4723"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4722"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4721"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4720"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4719"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4718"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4717"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4716"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4715"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4714"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4713"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4712"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4711"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4710"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4709"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4708"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4707"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4706"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4705"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4704"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4703"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4702"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4701"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4700"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4699"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4698"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4697"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4696"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4695"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4694"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4693"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4692"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4691"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4690"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4689"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4688"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4687"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4686"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4685"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4684"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4683"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4682"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4681"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4680"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4679"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4678"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4677"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4676"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4675"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4674"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4673"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4672"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4671"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4670"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4669"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4668"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4667"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4666"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4665"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4664"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4663"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4662"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4661"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4660"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4659"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4658"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4657"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4656"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4655"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4654"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4653"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4652"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4651"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4650"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4649"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4648"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4647"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4646"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4645"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4644"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4643"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4642"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4641"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4640"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4639"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4638"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4637"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4636"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4635"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4634"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4633"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4632"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4631"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4630"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4629"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4628"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4627"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4626"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4625"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4624"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4623"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4622"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4621"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4620"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4619"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4618"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4617"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4616"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4615"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4614"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4613"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4612"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4611"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4610"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4609"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4608"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4607"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4606"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4605"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4604"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4603"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4602"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4601"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4600"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4599"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4598"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4597"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4596"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4595"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4594"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4593"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4592"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4591"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4590"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4589"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4588"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4587"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4586"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4585"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4584"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4583"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4582"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4581"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4580"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4579"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4578"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4577"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4576"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4575"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4574"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4573"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4572"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4571"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4570"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4569"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4568"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4567"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4566"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4565"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4564"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4563"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4562"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4561"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4560"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4559"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4558"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4557"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4556"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4555"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4554"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4553"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4552"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4551"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4550"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4549"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4548"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4547"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4546"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4545"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4544"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4543"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4542"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4541"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4540"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4539"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4538"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4537"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4536"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4535"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4534"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4533"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4532"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4531"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4530"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4529"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4528"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4527"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4526"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4525"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4524"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4523"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4522"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4521"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4520"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4519"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4518"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4517"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4516"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4515"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4514"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4513"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4512"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4511"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4510"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4509"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4508"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4507"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4506"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4505"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4504"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4503"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4502"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4501"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4500"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4499"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4498"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4497"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4496"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4495"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4494"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4493"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4492"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4491"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4490"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4489"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4488"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4487"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4486"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4485"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4484"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4483"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4482"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4481"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4480"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4479"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4478"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4477"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4476"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4475"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4474"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4473"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4472"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4471"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4470"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4469"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4468"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4467"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4466"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4465"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4464"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4463"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4462"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4461"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4460"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4459"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4458"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4457"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4456"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4455"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4454"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4453"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4452"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4451"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4450"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4449"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4448"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4447"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4446"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4445"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4444"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4443"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4442"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4441"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4440"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4439"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4438"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4437"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4436"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4435"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4434"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4433"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4432"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4431"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4430"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4429"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4428"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4427"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4426"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4425"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4424"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4423"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4422"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4421"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4420"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4419"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4418"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4417"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4416"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4415"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4414"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4413"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4412"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4411"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4410"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4409"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4408"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4407"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4406"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4405"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4404"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4403"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4402"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4401"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4400"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4399"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4398"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4397"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4396"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4395"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4394"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4393"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4392"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4391"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4390"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4389"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4388"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4387"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4386"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4385"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4384"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4383"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4382"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4381"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4380"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4379"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4378"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4377"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4376"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4375"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4374"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4373"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4372"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4371"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4370"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4369"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4368"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4367"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4366"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4365"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4364"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4363"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4362"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4361"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4360"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4359"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4358"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4357"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4356"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4355"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4354"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4353"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4352"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4351"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4350"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4349"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4348"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4347"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4346"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4345"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4344"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4343"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4342"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4341"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4340"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4339"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4338"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4337"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4336"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4335"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4334"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4333"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4332"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4331"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4330"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4329"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4328"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4327"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4326"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4325"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4324"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4323"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4322"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4321"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4320"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4319"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4318"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4317"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4316"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4315"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4314"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4313"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4312"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4311"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4310"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4309"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4308"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4307"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4306"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4305"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4304"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4303"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4302"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4301"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4300"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4299"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4298"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4297"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4296"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4295"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4294"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4293"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4292"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4291"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4290"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4289"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4288"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4287"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4286"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4285"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4284"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4283"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4282"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4281"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4280"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4279"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4278"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4277"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4276"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4275"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4274"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4273"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4272"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4271"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4270"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4269"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4268"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4267"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4266"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4265"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4264"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4263"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4262"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4261"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4260"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4259"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4258"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4257"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4256"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4255"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4254"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4253"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4252"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4251"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4250"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4249"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4248"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4247"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4246"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4245"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4244"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4243"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4242"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4241"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4240"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4239"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4238"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4237"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4236"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4235"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4234"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4233"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4232"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4231"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4230"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4229"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4228"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4227"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4226"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4225"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4224"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4223"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4222"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4221"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4220"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4219"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4218"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4217"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4216"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4215"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4214"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4213"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4212"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4211"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4210"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4209"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4208"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4207"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4206"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4205"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4204"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4203"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4202"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4201"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4200"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4199"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4198"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4197"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4196"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4195"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4194"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4193"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4192"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4191"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4190"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4189"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4188"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4187"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4186"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4185"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4184"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4183"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4182"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4181"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4180"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4179"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4178"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4177"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4176"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4175"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4174"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4173"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4172"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4171"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4170"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4169"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4168"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4167"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4166"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4165"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4164"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4163"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4162"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4161"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4160"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4159"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4158"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4157"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4156"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4155"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4154"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4153"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4152"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4151"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4150"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4149"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4148"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4147"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4146"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4145"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4144"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4143"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4142"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4141"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4140"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4139"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4138"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4137"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4136"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4135"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4134"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4133"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4132"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4131"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4130"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4129"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4128"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4127"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4126"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4125"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4124"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4123"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4122"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4121"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4120"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4119"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4118"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4117"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4116"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4115"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4114"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4113"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4112"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4111"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4110"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4109"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4108"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4107"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4106"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4105"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4104"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4103"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4102"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4101"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4100"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4099"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4098"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4097"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4096"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4095"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4094"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4093"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4092"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4091"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4090"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4089"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4088"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4087"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4086"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4085"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4084"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4083"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4082"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4081"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4080"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4079"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4078"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4077"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4076"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4075"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4074"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4073"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4072"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4071"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4070"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4069"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4068"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4067"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4066"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4065"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4064"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4063"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4062"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4061"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4060"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4059"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4058"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4057"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4056"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4055"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4054"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4053"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4052"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4051"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4050"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4049"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4048"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4047"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4046"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4045"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4044"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4043"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4042"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4041"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4040"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4039"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4038"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4037"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4036"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4035"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4034"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4033"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4032"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4031"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4030"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4029"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4028"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4027"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4026"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4025"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4024"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4023"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4022"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4021"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4020"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4019"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4018"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4017"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4016"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4015"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4014"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4013"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4012"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4011"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4010"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4009"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4008"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4007"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4006"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4005"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4004"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4003"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4002"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4001"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4000"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3999"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3998"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3997"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3996"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3995"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3994"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3993"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3992"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3991"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3990"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3989"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3988"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3987"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3986"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3985"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3984"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3983"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3982"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3981"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3980"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3979"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3978"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3977"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3976"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3975"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3974"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3973"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3972"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3971"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3970"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3969"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3968"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3967"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3966"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3965"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3964"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3963"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3962"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3961"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3960"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3959"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3958"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3957"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3956"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3955"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3954"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3953"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3952"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3951"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3950"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3949"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3948"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3947"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3946"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3945"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3944"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3943"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3942"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3941"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3940"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3939"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3938"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3937"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3936"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3935"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3934"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3933"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3932"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3931"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3930"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3929"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3928"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3927"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3926"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3925"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3924"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3923"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3922"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3921"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3920"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3919"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3918"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3917"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3916"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3915"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3914"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3913"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3912"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3911"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3910"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3909"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3908"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3907"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3906"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3905"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3904"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3903"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3902"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3901"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3900"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3899"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3898"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3897"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3896"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3895"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3894"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3893"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3892"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3891"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3890"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3889"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3888"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3887"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3886"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3885"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3884"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3883"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3882"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3881"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3880"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3879"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3878"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3877"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3876"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3875"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3874"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3873"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3872"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3871"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3870"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3869"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3868"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3867"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3866"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3865"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3864"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3863"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3862"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3861"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3860"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3859"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3858"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3857"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3856"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3855"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3854"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3853"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3852"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3851"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3850"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3849"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3848"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3847"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3846"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3845"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3844"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3843"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3842"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3841"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3840"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3839"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3838"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3837"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3836"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3835"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3834"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3833"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3832"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3831"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3830"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3829"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3828"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3827"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3826"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3825"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3824"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3823"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3822"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3821"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3820"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3819"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3818"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3817"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3816"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3815"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3814"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3813"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3812"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3811"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3810"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3809"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3808"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3807"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3806"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3805"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3804"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3803"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3802"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3801"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3800"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3799"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3798"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3797"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3796"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3795"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3794"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3793"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3792"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3791"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3790"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3789"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3788"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3787"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3786"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3785"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3784"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3783"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3782"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3781"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3780"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3779"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3778"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3777"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3776"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3775"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3774"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3773"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3772"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3771"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3770"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3769"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3768"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3767"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3766"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3765"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3764"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3763"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3762"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3761"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3760"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3759"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3758"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3757"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3756"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3755"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3754"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3753"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3752"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3751"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3750"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3749"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3748"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3747"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3746"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3745"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3744"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3743"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3742"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3741"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3740"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3739"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3738"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3737"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3736"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3735"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3734"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3733"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3732"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3731"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3730"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3729"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3728"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3727"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3726"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3725"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3724"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3723"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3722"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3721"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3720"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3719"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3718"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3717"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3716"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3715"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3714"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3713"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3712"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3711"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3710"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3709"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3708"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3707"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3706"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3705"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3704"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3703"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3702"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3701"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3700"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3699"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3698"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3697"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3696"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3695"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3694"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3693"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3692"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3691"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3690"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3689"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3688"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3687"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3686"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3685"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3684"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3683"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3682"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3681"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3680"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3679"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3678"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3677"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3676"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3675"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3674"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3673"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3672"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3671"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3670"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3669"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3668"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3667"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3666"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3665"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3664"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3663"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3662"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3661"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3660"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3659"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3658"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3657"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3656"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3655"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3654"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3653"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3652"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3651"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3650"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3649"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3648"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3647"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3646"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3645"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3644"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3643"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3642"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3641"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3640"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3639"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3638"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3637"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3636"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3635"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3634"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3633"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3632"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3631"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3630"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3629"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3628"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3627"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3626"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3625"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3624"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3623"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3622"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3621"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3620"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3619"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3618"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3617"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3616"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3615"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3614"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3613"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3612"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3611"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3610"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3609"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3608"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3607"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3606"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3605"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3604"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3603"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3602"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3601"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3600"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3599"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3598"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3597"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3596"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3595"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3594"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3593"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3592"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3591"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3590"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3589"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3588"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3587"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3586"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3585"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3584"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3583"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3582"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3581"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3580"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3579"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3578"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3577"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3576"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3575"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3574"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3573"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3572"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3571"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3570"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3569"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3568"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3567"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3566"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3565"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3564"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3563"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3562"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3561"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3560"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3559"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3558"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3557"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3556"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3555"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3554"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3553"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3552"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3551"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3550"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3549"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3548"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3547"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3546"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3545"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3544"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3543"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3542"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3541"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3540"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3539"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3538"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3537"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3536"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3535"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3534"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3533"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3532"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3531"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3530"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3529"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3528"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3527"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3526"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3525"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3524"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3523"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3522"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3521"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3520"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3519"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3518"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3517"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3516"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3515"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3514"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3513"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3512"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3511"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3510"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3509"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3508"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3507"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3506"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3505"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3504"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3503"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3502"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3501"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3500"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3499"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3498"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3497"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3496"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3495"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3494"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3493"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3492"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3491"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3490"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3489"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3488"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3487"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3486"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3485"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3484"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3483"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3482"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3481"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3480"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3479"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3478"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3477"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3476"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3475"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3474"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3473"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3472"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3471"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3470"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3469"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3468"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3467"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3466"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3465"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3464"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3463"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3462"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3461"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3460"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3459"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3458"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3457"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3456"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3455"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3454"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3453"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3452"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3451"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3450"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3449"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3448"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3447"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3446"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3445"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3444"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3443"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3442"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3441"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3440"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3439"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3438"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3437"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3436"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3435"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3434"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3433"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3432"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3431"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3430"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3429"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3428"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3427"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3426"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3425"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3424"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3423"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3422"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3421"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3420"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3419"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3418"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3417"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3416"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3415"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3414"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3413"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3412"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3411"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3410"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3409"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3408"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3407"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3406"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3405"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3404"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3403"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3402"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3401"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3400"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3399"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3398"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3397"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3396"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3395"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3394"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3393"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3392"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3391"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3390"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3389"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3388"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3387"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3386"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3385"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3384"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3383"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3382"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3381"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3380"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3379"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3378"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3377"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3376"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3375"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3374"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3373"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3372"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3371"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3370"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3369"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3368"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3367"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3366"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3365"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3364"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3363"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3362"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3361"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3360"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3359"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3358"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3357"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3356"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3355"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3354"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3353"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3352"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3351"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3350"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3349"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3348"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3347"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3346"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3345"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3344"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3343"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3342"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3341"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3340"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3339"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3338"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3337"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3336"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3335"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3334"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3333"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3332"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3331"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3330"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3329"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3328"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3327"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3326"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3325"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3324"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3323"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3322"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3321"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3320"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3319"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3318"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3317"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3316"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3315"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3314"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3313"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3312"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3311"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3310"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3309"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3308"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3307"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3306"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3305"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3304"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3303"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3302"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3301"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3300"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3299"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3298"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3297"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3296"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3295"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3294"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3293"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3292"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3291"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3290"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3289"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3288"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3287"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3286"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3285"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3284"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3283"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3282"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3281"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3280"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3279"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3278"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3277"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3276"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3275"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3274"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3273"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3272"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3271"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3270"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3269"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3268"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3267"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3266"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3265"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3264"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3263"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3262"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3261"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3260"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3259"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3258"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3257"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3256"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3255"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3254"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3253"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3252"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3251"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3250"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3249"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3248"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3247"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3246"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3245"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3244"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3243"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3242"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3241"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3240"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3239"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3238"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3237"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3236"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3235"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3234"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3233"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3232"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3231"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3230"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3229"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3228"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3227"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3226"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3225"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3224"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3223"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3222"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3221"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3220"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3219"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3218"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3217"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3216"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3215"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3214"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3213"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3212"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3211"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3210"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3209"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3208"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3207"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3206"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3205"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3204"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3203"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3202"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3201"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3200"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3199"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3198"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3197"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3196"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3195"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3194"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3193"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3192"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3191"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3190"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3189"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3188"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3187"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3186"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3185"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3184"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3183"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3182"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3181"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3180"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3179"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3178"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3177"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3176"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3175"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3174"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3173"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3172"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3171"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3170"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3169"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3168"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3167"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3166"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3165"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3164"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3163"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3162"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3161"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3160"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3159"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3158"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3157"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3156"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3155"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3154"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3153"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3152"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3151"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3150"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3149"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3148"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3147"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3146"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3145"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3144"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3143"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3142"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3141"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3140"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3139"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3138"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3137"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3136"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3135"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3134"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3133"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3132"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3131"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3130"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3129"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3128"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3127"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3126"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3125"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3124"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3123"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3122"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3121"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3120"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3119"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3118"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3117"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3116"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3115"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3114"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3113"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3112"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3111"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3110"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3109"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3108"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3107"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3106"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3105"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3104"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3103"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3102"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3101"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3100"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3099"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3098"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3097"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3096"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3095"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3094"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3093"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3092"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3091"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3090"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3089"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3088"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3087"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3086"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3085"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3084"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3083"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3082"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3081"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3080"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3079"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3078"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3077"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3076"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3075"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3074"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3073"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3072"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3071"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3070"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3069"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3068"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3067"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3066"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3065"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3064"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3063"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3062"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3061"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3060"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3059"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3058"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3057"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3056"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3055"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3054"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3053"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3052"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3051"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3050"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3049"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3048"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3047"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3046"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3045"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3044"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3043"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3042"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3041"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3040"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3039"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3038"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3037"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3036"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3035"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3034"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3033"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3032"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3031"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3030"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3029"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3028"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3027"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3026"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3025"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3024"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3023"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3022"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3021"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3020"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3019"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3018"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3017"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3016"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3015"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3014"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3013"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3012"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3011"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3010"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3009"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3008"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3007"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3006"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3005"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3004"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3003"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3002"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3001"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3000"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2999"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2998"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2997"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2996"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2995"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2994"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2993"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2992"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2991"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2990"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2989"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2988"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2987"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2986"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2985"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2984"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2983"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2982"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2981"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2980"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2979"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2978"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2977"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2976"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2975"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2974"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2973"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2972"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2971"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2970"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2969"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2968"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2967"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2966"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2965"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2964"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2963"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2962"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2961"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2960"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2959"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2958"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2957"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2956"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2955"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2954"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2953"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2952"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2951"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2950"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2949"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2948"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2947"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2946"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2945"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2944"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2943"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2942"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2941"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2940"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2939"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2938"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2937"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2936"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2935"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2934"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2933"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2932"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2931"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2930"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2929"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2928"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2927"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2926"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2925"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2924"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2923"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2922"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2921"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2920"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2919"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2918"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2917"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2916"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2915"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2914"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2913"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2912"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2911"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2910"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2909"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2908"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2907"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2906"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2905"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2904"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2903"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2902"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2901"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2900"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2899"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2898"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2897"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2896"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2895"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2894"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2893"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2892"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2891"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2890"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2889"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2888"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2887"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2886"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2885"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2884"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2883"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2882"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2881"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2880"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2879"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2878"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2877"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2876"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2875"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2874"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2873"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2872"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2871"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2870"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2869"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2868"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2867"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2866"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2865"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2864"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2863"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2862"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2861"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2860"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2859"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2858"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2857"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2856"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2855"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2854"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2853"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2852"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2851"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2850"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2849"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2848"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2847"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2846"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2845"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2844"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2843"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2842"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2841"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2840"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2839"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2838"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2837"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2836"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2835"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2834"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2833"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2832"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2831"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2830"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2829"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2828"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2827"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2826"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2825"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2824"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2823"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2822"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2821"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2820"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2819"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2818"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2817"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2816"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2815"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2814"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2813"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2812"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2811"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2810"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2809"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2808"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2807"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2806"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2805"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2804"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2803"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2802"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2801"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2800"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2799"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2798"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2797"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2796"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2795"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2794"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2793"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2792"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2791"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2790"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2789"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2788"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2787"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2786"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2785"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2784"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2783"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2782"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2781"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2780"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2779"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2778"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2777"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2776"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2775"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2774"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2773"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2772"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2771"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2770"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2769"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2768"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2767"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2766"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2765"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2764"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2763"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2762"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2761"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2760"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2759"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2758"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2757"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2756"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2755"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2754"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2753"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2752"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2751"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2750"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2749"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2748"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2747"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2746"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2745"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2744"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2743"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2742"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2741"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2740"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2739"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2738"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2737"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2736"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2735"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2734"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2733"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2732"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2731"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2730"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2729"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2728"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2727"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2726"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2725"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2724"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2723"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2722"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2721"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2720"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2719"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2718"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2717"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2716"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2715"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2714"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2713"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2712"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2711"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2710"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2709"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2708"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2707"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2706"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2705"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2704"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2703"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2702"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2701"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2700"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2699"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2698"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2697"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2696"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2695"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2694"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2693"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2692"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2691"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2690"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2689"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2688"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2687"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2686"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2685"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2684"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2683"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2682"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2681"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2680"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2679"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2678"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2677"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2676"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2675"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2674"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2673"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2672"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2671"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2670"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2669"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2668"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2667"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2666"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2665"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2664"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2663"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2662"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2661"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2660"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2659"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2658"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2657"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2656"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2655"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2654"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2653"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2652"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2651"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2650"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2649"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2648"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2647"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2646"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2645"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2644"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2643"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2642"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2641"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2640"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2639"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2638"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2637"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2636"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2635"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2634"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2633"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2632"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2631"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2630"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2629"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2628"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2627"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2626"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2625"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2624"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2623"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2622"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2621"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2620"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2619"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2618"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2617"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2616"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2615"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2614"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2613"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2612"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2611"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2610"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2609"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2608"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2607"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2606"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2605"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2604"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2603"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2602"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2601"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2600"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2599"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2598"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2597"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2596"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2595"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2594"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2593"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2592"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2591"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2590"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2589"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2588"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2587"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2586"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2585"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2584"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2583"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2582"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2581"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2580"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2579"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2578"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2577"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2576"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2575"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2574"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2573"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2572"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2571"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2570"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2569"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2568"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2567"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2566"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2565"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2564"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2563"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2562"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2561"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2560"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2559"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2558"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2557"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2556"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2555"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2554"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2553"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2552"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2551"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2550"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2549"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2548"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2547"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2546"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2545"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2544"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2543"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2542"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2541"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2540"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2539"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2538"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2537"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2536"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2535"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2534"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2533"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2532"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2531"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2530"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2529"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2528"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2527"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2526"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2525"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2524"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2523"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2522"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2521"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2520"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2519"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2518"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2517"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2516"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2515"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2514"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2513"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2512"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2511"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2510"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2509"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2508"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2507"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2506"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2505"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2504"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2503"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2502"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2501"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2500"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2499"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2498"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2497"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2496"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2495"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2494"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2493"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2492"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2491"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2490"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2489"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2488"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2487"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2486"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2485"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2484"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2483"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2482"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2481"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2480"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2479"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2478"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2477"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2476"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2475"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2474"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2473"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2472"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2471"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2470"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2469"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2468"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2467"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2466"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2465"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2464"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2463"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2462"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2461"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2460"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2459"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2458"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2457"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2456"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2455"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2454"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2453"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2452"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2451"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2450"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2449"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2448"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2447"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2446"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2445"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2444"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2443"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2442"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2441"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2440"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2439"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2438"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2437"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2436"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2435"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2434"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2433"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2432"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2431"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2430"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2429"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2428"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2427"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2426"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2425"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2424"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2423"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2422"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2421"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2420"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2419"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2418"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2417"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2416"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2415"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2414"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2413"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2412"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2411"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2410"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2409"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2408"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2407"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2406"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2405"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2404"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2403"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2402"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2401"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2400"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2399"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2398"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2397"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2396"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2395"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2394"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2393"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2392"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2391"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2390"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2389"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2388"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2387"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2386"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2385"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2384"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2383"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2382"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2381"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2380"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2379"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2378"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2377"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2376"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2375"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2374"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2373"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2372"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2371"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2370"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2369"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2368"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2367"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2366"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2365"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2364"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2363"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2362"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2361"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2360"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2359"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2358"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2357"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2356"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2355"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2354"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2353"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2352"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2351"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2350"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2349"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2348"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2347"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2346"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2345"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2344"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2343"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2342"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2341"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2340"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2339"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2338"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2337"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2336"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2335"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2334"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2333"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2332"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2331"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2330"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2329"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2328"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2327"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2326"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2325"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2324"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2323"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2322"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2321"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2320"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2319"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2318"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2317"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2316"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2315"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2314"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2313"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2312"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2311"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2310"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2309"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2308"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2307"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2306"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2305"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2304"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2303"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2302"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2301"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2300"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2299"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2298"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2297"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2296"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2295"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2294"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2293"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2292"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2291"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2290"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2289"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2288"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2287"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2286"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2285"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2284"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2283"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2282"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2281"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2280"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2279"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2278"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2277"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2276"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2275"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2274"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2273"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2272"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2271"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2270"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2269"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2268"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2267"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2266"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2265"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2264"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2263"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2262"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2261"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2260"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2259"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2258"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2257"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2256"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2255"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2254"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2253"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2252"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2251"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2250"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2249"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2248"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2247"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2246"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2245"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2244"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2243"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2242"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2241"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2240"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2239"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2238"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2237"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2236"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2235"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2234"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2233"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2232"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2231"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2230"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2229"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2228"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2227"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2226"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2225"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2224"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2223"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2222"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2221"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2220"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2219"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2218"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2217"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2216"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2215"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2214"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2213"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2212"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2211"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2210"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2209"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2208"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2207"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2206"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2205"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2204"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2203"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2202"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2201"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2200"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2199"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2198"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2197"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2196"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2195"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2194"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2193"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2192"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2191"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2190"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2189"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2188"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2187"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2186"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2185"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2184"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2183"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2182"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2181"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2180"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2179"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2178"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2177"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2176"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2175"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2174"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2173"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2172"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2171"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2170"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2169"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2168"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2167"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2166"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2165"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2164"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2163"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2162"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2161"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2160"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2159"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2158"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2157"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2156"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2155"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2154"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2153"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2152"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2151"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2150"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2149"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2148"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2147"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2146"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2145"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2144"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2143"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2142"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2141"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2140"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2139"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2138"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2137"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2136"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2135"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2134"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2133"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2132"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2131"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2130"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2129"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2128"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2127"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2126"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2125"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2124"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2123"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2122"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2121"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2120"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2119"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2118"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2117"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2116"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2115"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2114"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2113"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2112"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2111"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2110"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2109"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2108"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2107"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2106"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2105"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2104"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2103"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2102"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2101"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2100"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2099"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2098"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2097"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2096"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2095"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2094"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2093"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2092"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2091"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2090"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2089"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2088"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2087"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2086"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2085"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2084"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2083"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2082"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2081"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2080"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2079"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2078"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2077"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2076"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2075"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2074"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2073"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2072"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2071"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2070"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2069"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2068"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2067"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2066"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2065"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2064"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2063"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2062"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2061"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2060"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2059"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2058"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2057"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2056"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2055"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2054"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2053"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2052"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2051"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2050"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2049"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2048"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2047"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2046"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2045"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2044"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2043"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2042"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2041"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2040"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2039"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2038"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2037"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2036"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2035"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2034"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2033"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2032"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2031"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2030"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2029"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2028"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2027"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2026"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2025"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2024"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2023"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2022"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2021"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2020"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2019"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2018"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2017"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2016"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2015"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2014"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2013"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2012"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2011"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2010"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2009"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2008"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2007"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2006"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2005"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2004"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2003"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2002"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2001"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2000"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1999"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1998"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1997"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1996"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1995"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1994"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1993"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1992"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1991"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1990"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1989"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1988"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1987"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1986"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1985"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1984"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1983"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1982"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1981"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1980"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1979"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1978"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1977"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1976"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1975"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1974"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1973"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1972"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1971"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1970"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1969"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1968"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1967"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1966"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1965"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1964"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1963"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1962"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1961"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1960"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1959"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1958"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1957"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1956"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1955"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1954"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1953"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1952"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1951"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1950"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1949"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1948"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1947"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1946"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1945"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1944"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1943"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1942"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1941"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1940"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1939"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1938"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1937"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1936"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1935"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1934"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1933"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1932"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1931"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1930"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1929"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1928"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1927"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1926"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1925"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1924"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1923"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1922"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1921"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1920"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1919"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1918"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1917"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1916"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1915"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1914"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1913"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1912"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1911"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1910"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1909"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1908"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1907"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1906"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1905"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1904"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1903"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1902"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1901"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1900"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1899"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1898"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1897"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1896"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1895"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1894"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1893"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1892"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1891"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1890"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1889"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1888"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1887"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1886"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1885"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1884"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1883"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1882"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1881"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1880"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1879"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1878"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1877"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1876"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1875"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1874"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1873"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1872"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1871"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1870"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1869"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1868"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1867"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1866"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1865"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1864"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1863"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1862"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1861"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1860"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1859"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1858"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1857"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1856"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1855"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1854"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1853"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1852"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1851"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1850"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1849"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1848"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1847"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1846"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1845"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1844"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1843"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1842"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1841"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1840"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1839"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1838"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1837"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1836"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1835"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1834"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1833"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1832"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1831"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1830"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1829"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1828"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1827"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1826"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1825"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1824"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1823"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1822"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1821"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1820"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1819"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1818"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1817"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1816"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1815"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1814"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1813"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1812"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1811"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1810"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1809"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1808"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1807"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1806"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1805"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1804"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1803"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1802"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1801"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1800"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1799"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1798"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1797"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1796"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1795"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1794"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1793"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1792"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1791"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1790"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1789"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1788"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1787"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1786"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1785"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1784"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1783"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1782"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1781"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1780"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1779"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1778"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1777"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1776"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1775"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1774"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1773"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1772"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1771"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1770"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1769"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1768"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1767"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1766"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1765"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1764"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1763"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1762"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1761"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1760"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1759"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1758"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1757"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1756"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1755"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1754"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1753"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1752"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1751"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1750"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1749"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1748"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1747"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1746"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1745"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1744"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1743"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1742"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1741"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1740"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1739"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1738"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1737"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1736"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1735"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1734"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1733"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1732"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1731"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1730"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1729"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1728"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1727"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1726"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1725"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1724"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1723"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1722"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1721"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1720"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1719"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1718"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1717"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1716"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1715"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1714"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1713"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1712"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1711"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1710"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1709"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1708"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1707"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1706"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1705"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1704"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1703"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1702"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1701"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1700"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1699"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1698"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1697"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1696"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1695"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1694"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1693"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1692"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1691"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1690"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1689"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1688"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1687"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1686"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1685"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1684"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1683"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1682"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1681"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1680"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1679"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1678"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1677"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1676"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1675"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1674"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1673"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1672"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1671"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1670"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1669"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1668"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1667"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1666"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1665"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1664"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1663"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1662"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1661"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1660"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1659"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1658"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1657"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1656"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1655"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1654"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1653"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1652"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1651"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1650"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1649"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1648"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1647"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1646"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1645"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1644"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1643"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1642"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1641"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1640"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1639"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1638"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1637"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1636"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1635"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1634"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1633"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1632"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1631"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1630"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1629"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1628"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1627"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1626"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1625"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1624"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1623"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1622"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1621"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1620"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1619"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1618"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1617"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1616"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1615"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1614"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1613"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1612"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1611"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1610"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1609"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1608"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1607"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1606"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1605"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1604"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1603"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1602"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1601"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1600"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1599"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1598"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1597"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1596"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1595"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1594"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1593"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1592"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1591"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1590"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1589"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1588"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1587"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1586"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1585"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1584"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1583"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1582"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1581"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1580"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1579"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1578"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1577"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1576"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1575"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1574"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1573"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1572"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1571"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1570"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1569"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1568"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1567"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1566"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1565"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1564"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1563"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1562"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1561"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1560"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1559"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1558"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1557"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1556"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1555"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1554"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1553"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1552"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1551"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1550"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1549"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1548"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1547"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1546"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1545"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1544"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1543"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1542"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1541"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1540"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1539"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1538"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1537"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1536"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1535"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1534"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1533"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1532"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1531"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1530"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1529"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1528"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1527"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1526"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1525"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1524"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1523"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1522"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1521"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1520"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1519"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1518"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1517"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1516"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1515"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1514"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1513"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1512"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1511"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1510"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1509"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1508"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1507"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1506"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1505"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1504"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1503"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1502"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1501"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1500"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1499"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1498"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1497"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1496"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1495"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1494"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1493"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1492"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1491"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1490"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1489"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1488"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1487"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1486"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1485"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1484"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1483"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1482"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1481"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1480"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1479"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1478"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1477"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1476"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1475"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1474"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1473"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1472"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1471"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1470"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1469"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1468"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1467"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1466"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1465"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1464"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1463"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1462"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1461"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1460"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1459"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1458"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1457"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1456"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1455"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1454"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1453"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1452"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1451"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1450"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1449"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1448"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1447"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1446"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1445"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1444"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1443"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1442"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1441"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1440"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1439"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1438"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1437"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1436"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1435"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1434"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1433"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1432"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1431"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1430"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1429"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1428"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1427"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1426"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1425"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1424"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1423"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1422"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1421"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1420"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1419"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1418"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1417"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1416"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1415"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1414"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1413"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1412"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1411"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1410"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1409"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1408"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1407"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1406"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1405"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1404"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1403"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1402"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1401"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1400"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1399"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1398"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1397"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1396"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1395"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1394"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1393"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1392"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1391"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1390"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1389"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1388"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1387"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1386"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1385"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1384"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1383"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1382"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1381"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1380"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1379"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1378"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1377"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1376"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1375"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1374"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1373"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1372"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1371"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1370"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1369"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1368"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1367"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1366"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1365"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1364"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1363"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1362"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1361"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1360"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1359"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1358"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1357"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1356"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1355"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1354"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1353"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1352"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1351"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1350"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1349"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1348"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1347"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1346"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1345"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1344"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1343"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1342"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1341"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1340"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1339"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1338"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1337"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1336"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1335"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1334"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1333"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1332"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1331"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1330"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1329"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1328"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1327"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1326"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1325"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1324"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1323"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1322"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1321"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1320"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1319"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1318"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1317"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1316"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1315"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1314"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1313"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1312"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1311"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1310"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1309"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1308"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1307"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1306"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1305"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1304"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1303"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1302"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1301"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1300"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1299"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1298"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1297"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1296"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1295"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1294"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1293"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1292"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1291"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1290"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1289"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1288"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1287"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1286"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1285"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1284"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1283"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1282"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1281"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1280"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1279"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1278"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1277"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1276"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1275"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1274"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1273"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1272"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1271"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1270"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1269"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1268"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1267"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1266"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1265"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1264"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1263"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1262"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1261"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1260"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1259"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1258"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1257"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1256"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1255"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1254"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1253"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1252"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1251"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1250"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1249"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1248"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1247"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1246"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1245"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1244"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1243"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1242"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1241"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1240"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1239"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1238"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1237"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1236"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1235"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1234"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1233"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1232"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1231"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1230"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1229"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1228"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1227"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1226"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1225"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1224"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1223"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1222"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1221"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1220"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1219"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1218"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1217"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1216"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1215"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1214"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1213"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1212"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1211"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1210"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1209"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1208"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1207"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1206"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1205"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1204"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1203"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1202"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1201"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1200"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1199"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1198"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1197"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1196"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1195"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1194"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1193"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1192"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1191"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1190"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1189"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1188"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1187"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1186"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1185"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1184"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1183"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1182"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1181"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1180"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1179"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1178"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1177"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1176"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1175"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1174"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1173"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1172"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1171"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1170"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1169"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1168"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1167"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1166"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1165"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1164"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1163"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1162"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1161"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1160"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1159"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1158"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1157"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1156"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1155"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1154"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1153"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1152"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1151"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1150"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1149"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1148"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1147"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1146"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1145"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1144"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1143"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1142"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1141"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1140"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1139"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1138"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1137"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1136"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1135"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1134"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1133"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1132"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1131"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1130"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1129"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1128"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1127"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1126"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1125"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1124"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1123"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1122"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1121"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1120"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1119"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1118"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1117"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1116"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1115"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1114"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1113"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1112"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1111"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1110"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1109"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1108"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1107"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1106"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1105"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1104"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1103"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1102"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1101"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1100"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1099"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1098"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1097"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1096"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1095"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1094"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1093"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1092"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1091"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1090"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1089"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1088"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1087"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1086"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1085"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1084"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1083"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1082"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1081"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1080"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1079"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1078"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1077"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1076"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1075"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1074"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1073"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1072"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1071"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1070"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1069"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1068"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1067"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1066"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1065"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1064"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1063"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1062"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1061"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1060"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1059"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1058"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1057"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1056"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1055"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1054"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1053"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1052"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1051"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1050"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1049"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1048"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1047"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1046"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1045"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1044"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1043"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1042"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1041"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1040"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1039"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1038"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1037"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1036"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1035"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1034"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1033"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1032"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1031"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1030"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1029"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1028"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1027"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1026"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1025"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1024"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1023"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1022"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1021"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1020"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1019"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1018"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1017"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1016"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1015"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1014"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1013"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1012"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1011"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1010"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1009"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1008"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1007"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1006"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1005"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1004"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1003"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1002"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1001"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1000"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_999"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_998"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_997"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_996"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_995"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_994"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_993"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_992"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_991"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_990"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_989"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_988"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_987"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_986"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_985"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_984"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_983"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_982"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_981"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_980"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_979"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_978"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_977"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_976"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_975"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_974"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_973"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_972"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_971"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_970"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_969"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_968"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_967"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_966"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_965"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_964"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_963"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_962"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_961"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_960"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_959"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_958"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_957"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_956"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_955"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_954"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_953"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_952"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_951"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_950"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_949"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_948"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_947"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_946"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_945"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_944"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_943"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_942"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_941"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_940"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_939"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_938"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_937"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_936"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_935"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_934"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_933"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_932"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_931"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_930"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_929"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_928"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_927"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_926"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_925"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_924"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_923"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_922"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_921"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_920"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_919"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_918"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_917"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_916"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_915"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_914"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_913"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_912"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_911"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_910"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_909"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_908"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_907"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_906"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_905"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_904"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_903"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_902"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_901"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_900"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_899"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_898"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_897"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_896"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_895"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_894"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_893"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_892"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_891"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_890"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_889"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_888"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_887"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_886"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_885"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_884"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_883"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_882"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_881"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_880"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_879"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_878"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_877"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_876"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_875"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_874"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_873"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_872"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_871"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_870"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_869"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_868"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_867"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_866"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_865"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_864"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_863"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_862"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_861"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_860"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_859"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_858"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_857"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_856"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_855"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_854"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_853"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_852"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_851"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_850"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_849"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_848"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_847"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_846"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_845"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_844"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_843"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_842"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_841"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_840"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_839"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_838"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_837"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_836"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_835"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_834"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_833"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_832"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_831"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_830"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_829"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_828"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_827"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_826"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_825"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_824"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_823"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_822"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_821"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_820"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_819"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_818"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_817"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_816"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_815"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_814"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_813"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_812"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_811"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_810"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_809"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_808"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_807"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_806"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_805"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_804"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_803"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_802"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_801"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_800"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_799"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_798"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_797"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_796"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_795"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_794"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_793"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_792"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_791"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_790"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_789"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_788"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_787"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_786"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_785"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_784"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_783"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_782"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_781"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_780"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_779"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_778"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_777"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_776"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_775"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_774"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_773"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_772"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_771"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_770"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_769"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_768"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_767"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_766"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_765"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_764"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_763"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_762"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_761"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_760"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_759"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_758"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_757"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_756"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_755"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_754"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_753"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_752"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_751"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_750"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_749"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_748"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_747"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_746"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_745"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_744"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_743"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_742"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_741"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_740"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_739"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_738"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_737"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_736"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_735"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_734"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_733"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_732"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_731"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_730"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_729"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_728"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_727"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_726"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_725"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_724"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_723"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_722"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_721"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_720"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_719"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_718"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_717"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_716"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_715"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_714"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_713"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_712"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_711"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_710"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_709"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_708"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_707"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_706"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_705"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_704"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_703"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_702"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_701"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_700"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_699"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_698"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_697"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_696"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_695"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_694"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_693"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_692"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_691"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_690"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_689"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_688"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_687"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_686"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_685"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_684"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_683"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_682"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_681"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_680"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_679"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_678"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_677"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_676"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_675"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_674"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_673"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_672"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_671"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_670"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_669"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_668"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_667"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_666"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_665"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_664"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_663"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_662"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_661"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_660"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_659"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_658"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_657"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_656"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_655"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_654"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_653"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_652"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_651"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_650"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_649"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_648"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_647"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_646"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_645"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_644"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_643"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_642"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_641"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_640"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_639"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_638"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_637"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_636"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_635"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_634"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_633"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_632"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_631"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_630"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_629"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_628"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_627"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_626"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_625"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_624"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_623"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_622"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_621"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_620"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_619"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_618"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_617"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_616"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_615"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_614"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_613"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_612"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_611"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_610"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_609"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_608"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_607"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_606"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_605"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_604"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_603"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_602"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_601"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_600"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_599"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_598"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_597"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_596"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_595"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_594"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_593"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_592"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_591"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_590"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_589"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_588"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_587"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_586"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_585"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_584"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_583"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_582"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_581"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_580"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_579"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_578"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_577"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_576"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_575"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_574"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_573"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_572"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_571"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_570"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_569"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_568"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_567"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_566"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_565"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_564"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_563"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_562"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_561"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_560"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_559"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_558"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_557"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_556"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_555"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_554"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_553"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_552"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_551"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_550"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_549"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_548"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_547"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_546"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_545"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_544"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_543"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_542"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_541"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_540"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_539"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_538"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_537"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_536"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_535"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_534"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_533"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_532"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_531"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_530"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_529"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_528"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_527"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_526"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_525"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_524"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_523"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_522"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_521"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_520"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_519"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_518"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_517"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_516"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_515"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_514"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_513"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_512"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_511"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_510"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_509"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_508"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_507"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_506"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_505"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_504"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_503"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_502"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_501"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_500"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_499"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_498"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_497"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_496"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_495"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_494"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_493"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_492"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_491"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_490"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_489"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_488"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_487"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_486"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_485"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_484"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_483"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_482"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_481"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_480"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_479"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_478"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_477"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_476"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_475"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_474"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_473"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_472"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_471"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_470"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_469"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_468"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_467"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_466"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_465"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_464"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_463"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_462"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_461"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_460"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_459"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_458"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_457"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_456"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_455"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_454"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_453"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_452"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_451"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_450"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_449"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_448"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_447"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_446"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_445"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_444"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_443"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_442"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_441"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_440"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_439"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_438"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_437"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_436"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_435"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_434"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_433"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_432"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_431"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_430"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_429"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_428"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_427"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_426"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_425"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_424"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_423"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_422"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_421"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_420"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_419"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_418"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_417"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_416"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_415"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_414"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_413"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_412"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_411"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_410"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_409"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_408"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_407"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_406"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_405"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_404"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_403"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_402"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_401"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_400"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_399"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_398"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_397"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_396"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_395"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_394"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_393"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_392"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_391"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_390"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_389"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_388"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_387"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_386"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_385"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_384"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_383"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_382"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_381"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_380"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_379"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_378"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_377"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_376"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_375"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_374"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_373"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_372"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_371"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_370"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_369"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_368"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_367"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_366"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_365"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_364"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_363"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_362"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_361"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_360"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_359"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_358"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_357"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_356"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_355"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_354"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_353"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_352"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_351"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_350"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_349"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_348"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_347"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_346"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_345"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_344"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_343"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_342"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_341"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_340"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_339"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_338"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_337"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_336"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_335"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_334"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_333"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_332"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_331"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_330"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_329"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_328"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_327"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_326"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_325"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_324"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_323"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_322"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_321"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_320"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_319"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_318"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_317"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_316"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_315"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_314"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_313"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_312"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_311"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_310"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_309"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_308"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_307"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_306"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_305"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_304"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_303"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_302"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_301"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_300"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_299"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_298"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_297"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_296"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_295"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_294"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_293"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_292"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_291"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_290"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_289"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_288"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_287"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_286"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_285"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_284"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_283"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_282"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_281"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_280"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_279"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_278"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_277"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_276"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_275"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_274"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_273"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_272"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_271"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_270"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_269"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_268"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_267"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_266"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_265"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_264"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_263"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_262"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_261"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_260"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_259"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_258"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_257"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_256"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_255"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_254"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_253"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_252"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_251"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_250"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_249"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_248"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_247"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_246"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_245"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_244"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_243"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_242"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_241"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_240"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_239"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_238"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_237"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_236"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_235"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_234"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_233"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_232"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_231"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_230"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_229"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_228"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_227"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_226"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_225"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_224"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_223"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_222"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_221"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_220"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_219"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_218"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_217"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_216"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_215"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_214"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_213"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_212"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_211"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_210"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_209"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_208"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_207"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_206"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_205"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_204"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_203"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_202"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_201"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_200"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_199"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_198"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_197"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_196"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_195"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_194"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_193"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_192"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_191"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_190"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_189"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_188"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_187"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_186"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_185"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_184"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_183"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_182"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_181"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_180"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_179"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_178"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_177"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_176"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_175"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_174"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_173"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_172"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_171"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_170"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_169"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_168"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_167"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_166"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_165"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_164"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_163"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_162"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_161"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_160"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_159"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_158"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_157"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_156"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_155"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_154"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_153"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_152"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_151"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_150"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_149"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_148"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_147"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_146"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_145"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_144"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_143"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_142"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_141"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_140"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_139"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_138"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_137"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_136"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_135"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_134"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_133"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_132"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_131"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_130"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_129"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_128"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_127"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_126"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_125"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_124"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_123"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_122"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_121"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_120"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_119"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_118"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_117"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_116"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_115"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_114"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_113"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_112"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_111"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_110"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_109"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_108"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_107"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_106"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_105"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_104"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_103"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_102"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_101"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_100"/>
+    <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_99"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_98"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_97"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_96"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_95"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_94"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_93"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_92"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_91"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_90"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_89"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_88"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_87"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_86"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_85"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_84"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_83"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_82"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_81"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_80"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_79"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_78"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_77"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_76"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_75"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_74"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_73"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_72"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_71"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_70"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_69"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_68"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_67"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_66"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_65"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_64"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_63"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_62"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_61"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_60"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_59"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_58"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_57"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_56"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_55"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_54"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_53"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_52"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_51"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_50"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_49"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_48"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_47"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_46"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_45"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_44"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_43"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_42"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_41"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_40"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_39"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_38"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_37"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_36"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_35"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_34"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_33"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_32"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_31"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_30"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_29"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_28"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_27"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_26"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_25"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_24"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_23"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_22"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_21"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_20"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_19"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_18"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_17"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_16"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_15"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_14"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_13"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_12"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_11"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_10"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_9"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_8"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_7"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_6"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_5"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_4"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_3"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_2"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_1"/> <View android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/weex_id_0"/>
+</LinearLayout>
\ No newline at end of file
diff --git a/android/playground/app/src/main/res/menu/main.xml b/android/playground/app/src/main/res/menu/main.xml
index b6325ad..4e0533b 100755
--- a/android/playground/app/src/main/res/menu/main.xml
+++ b/android/playground/app/src/main/res/menu/main.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
diff --git a/android/playground/app/src/main/res/menu/main_scan.xml b/android/playground/app/src/main/res/menu/main_scan.xml
index 925d7af..b4be73e 100755
--- a/android/playground/app/src/main/res/menu/main_scan.xml
+++ b/android/playground/app/src/main/res/menu/main_scan.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
diff --git a/android/playground/app/src/main/res/menu/refresh.xml b/android/playground/app/src/main/res/menu/refresh.xml
index dce7255..8e3805c 100755
--- a/android/playground/app/src/main/res/menu/refresh.xml
+++ b/android/playground/app/src/main/res/menu/refresh.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
       xmlns:app="http://schemas.android.com/apk/res-auto">
     <item
diff --git a/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png
index a3e1db8..0e70a40 100755
--- a/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ b/android/playground/app/src/main/res/mipmap-hdpi/ic_launcher.png
Binary files differ
diff --git a/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png
index eddeab5..0da5e44 100755
--- a/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ b/android/playground/app/src/main/res/mipmap-mdpi/ic_launcher.png
Binary files differ
diff --git a/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index 83c8831..5d95120 100755
--- a/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ b/android/playground/app/src/main/res/mipmap-xhdpi/ic_launcher.png
Binary files differ
diff --git a/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index 2ba4638..6901b4e 100755
--- a/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ b/android/playground/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index e622712..ac38da2 100755
--- a/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ b/android/playground/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/android/playground/app/src/main/res/values-v21/styles.xml b/android/playground/app/src/main/res/values-v21/styles.xml
index 251fb9f..f98bd65 100755
--- a/android/playground/app/src/main/res/values-v21/styles.xml
+++ b/android/playground/app/src/main/res/values-v21/styles.xml
@@ -1,4 +1,22 @@
-<resources>>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<resources>
 
     <style name="AppTheme.NoActionBar">
         <item name="windowActionBar">false</item>
diff --git a/android/playground/app/src/main/res/values-w820dp/dimens.xml b/android/playground/app/src/main/res/values-w820dp/dimens.xml
index 63fc816..ec08727 100755
--- a/android/playground/app/src/main/res/values-w820dp/dimens.xml
+++ b/android/playground/app/src/main/res/values-w820dp/dimens.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <!-- Example customization of dimensions originally defined in res/values/dimens.xml
          (such as screen margins) for screens with more than 820dp of available width. This
diff --git a/android/playground/app/src/main/res/values/attrs.xml b/android/playground/app/src/main/res/values/attrs.xml
index d2e6995..6a3624e 100755
--- a/android/playground/app/src/main/res/values/attrs.xml
+++ b/android/playground/app/src/main/res/values/attrs.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <declare-styleable name="CircleImageView">
         <attr name="border_width" format="dimension"/>
diff --git a/android/playground/app/src/main/res/values/colors.xml b/android/playground/app/src/main/res/values/colors.xml
index 227fd33..ad29c22 100755
--- a/android/playground/app/src/main/res/values/colors.xml
+++ b/android/playground/app/src/main/res/values/colors.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <color name="colorPrimary">#3F51B5</color>
     <color name="colorPrimaryDark">#303F9F</color>
diff --git a/android/playground/app/src/main/res/values/dimens.xml b/android/playground/app/src/main/res/values/dimens.xml
index ae17b87..84d904a 100755
--- a/android/playground/app/src/main/res/values/dimens.xml
+++ b/android/playground/app/src/main/res/values/dimens.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <!-- Default screen margins, per the Android Design guidelines. -->
     <dimen name="nav_header_vertical_spacing">16dp</dimen>
diff --git a/android/playground/app/src/main/res/values/drawables.xml b/android/playground/app/src/main/res/values/drawables.xml
index 52c6a6c..bab1227 100755
--- a/android/playground/app/src/main/res/values/drawables.xml
+++ b/android/playground/app/src/main/res/values/drawables.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
     <item name="ic_menu_camera" type="drawable">@android:drawable/ic_menu_camera</item>
     <item name="ic_menu_gallery" type="drawable">@android:drawable/ic_menu_gallery</item>
diff --git a/android/playground/app/src/main/res/values/scan_code_styles.xml b/android/playground/app/src/main/res/values/scan_code_styles.xml
index 9db7574..9d89329 100755
--- a/android/playground/app/src/main/res/values/scan_code_styles.xml
+++ b/android/playground/app/src/main/res/values/scan_code_styles.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
 
     <!--
diff --git a/android/playground/app/src/main/res/values/strings.xml b/android/playground/app/src/main/res/values/strings.xml
index 25b6a39..f352c18 100755
--- a/android/playground/app/src/main/res/values/strings.xml
+++ b/android/playground/app/src/main/res/values/strings.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <string name="app_name">WEEX</string>
 
diff --git a/android/playground/app/src/main/res/values/styles.xml b/android/playground/app/src/main/res/values/styles.xml
index a0bfa21..f0407f1 100755
--- a/android/playground/app/src/main/res/values/styles.xml
+++ b/android/playground/app/src/main/res/values/styles.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
 
     <!-- Base application theme. -->
diff --git a/android/playground/codeStyleSettings.xml b/android/playground/codeStyleSettings.xml
index 3b08f67..98d8430 100755
--- a/android/playground/codeStyleSettings.xml
+++ b/android/playground/codeStyleSettings.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <project version="4">
   <component name="ProjectCodeStyleSettingsManager">
     <option name="PER_PROJECT_SETTINGS">
diff --git a/android/run-ci.sh b/android/run-ci.sh
index 86e0989..fae4e74 100755
--- a/android/run-ci.sh
+++ b/android/run-ci.sh
@@ -1,4 +1,4 @@
 # !/bin/sh -eu
 cd playground
-./gradlew assembleDebug :weex_sdk:testDebugUnitTest -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
+./gradlew assembleDebug :weex_sdk:testDebugUnitTest --info -PdisableCov=true -PtargetSDK=19 -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError" -Dfile.encoding=UTF-8
 COLUMNS=2000 ps -m -o pid,rss,command > ../sdk/build/reports/memdump.txt
\ No newline at end of file
diff --git a/android/sdk/assets/main.js b/android/sdk/assets/main.js
index d2aa93e..15ada86 100644
--- a/android/sdk/assets/main.js
+++ b/android/sdk/assets/main.js
@@ -1,7 +1,8 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.19.7, Build 2017-01-10 10:50."),this.getJSFMVersion=function(){return"0.19.7"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),"undefined"==typeof global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){Ls={},global.console=Vs}function o(){qs.forEach(function(e){var t=qs.indexOf(e);Ls[e]={},qs.forEach(function(n){var r=qs.indexOf(n);r<=t&&(Ls[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Ls[t]&&Ls[t][e]}function a(e){return e.map(function(e){var t=Object.prototype.toString.call(e);return e="[object object]"===t.toLowerCase()?JSON.stringify(e):String(e)})}function s(){if("undefined"==typeof setTimeout&&"function"==typeof Js){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Js(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=Us,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),Object.freeze(Object.prototype),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Object.freeze(Error.prototype),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=Ws.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Bs(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Bs(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Bs(e,[{module:t,method:n,args:r}])}}function f(e,t){e&&(Xs[e]=t)}function d(e){return Xs[e]}function p(e){delete Xs[e]}function h(e){var t=Xs[e];return t&&t.taskCenter?t.taskCenter:null}function v(){return(Ks++).toString()}function m(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,g(t,r)):(t.children.forEach(function(e){e.parentNode=t}),_(e,t),t.docId=e.id,t.ownerDocument=e,g(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),y(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function y(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function _(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function g(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){g(t,e)})}function b(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function w(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function C(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function k(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function O(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function x(e){zs=e}function E(e,t){if(t&&t.length){var n=function(t){zs.call(this,e,t,!0)};n.prototype=Object.create(zs.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:zs}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=h(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Qs[e]=n}}function S(e,t){I(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Zs.push({name:e,options:t}))}function j(e){Zs.some(function(t,n){if(t.name===e)return Zs.splice(n,1),!0})}function I(e){return A(e)>=0}function A(e){return Zs.map(function(e){return e.name}).indexOf(e)}function T(e){var t,n=Ys.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function N(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Zs.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function R(e,t,n,r){var o=eu[e];if(!o){o=T(t)||{},Hs[o.framework]||(o.framework="Weex"),n=JSON.parse(JSON.stringify(n||{})),n.bundleVersion=o.version,n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),console.debug("[JS Framework] create an "+o.framework+"@"+n.bundleVersion+" instance from "+n.bundleVersion);var i=new Gs.CallbackManager(e),a={info:o,config:n,callbacks:i,created:Date.now(),framework:o.framework};return a.services=N(e,a,Gs),eu[e]=a,Hs[o.framework].createInstance(e,t,n,r,a)}return new Error('invalid instance id "'+e+'"')}function D(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&$(t[0]);for(var r in Hs){var o=Hs[r];o&&o[e]&&o[e].apply(o,t)}}}function $(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&E(e.type,e.methods)})}function P(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];if(o&&Hs[o.framework]){var i=(a=Hs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Zs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Gs})}):"destroyInstance"===e&&(Zs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Gs})}),delete eu[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function M(e,t){tu[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];return o&&Hs[o.framework]?(i=Hs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function F(e){Gs=e||{},Hs=Gs.frameworks||{},l();for(var t in Hs){var n=Hs[t];n.init(e)}return["registerComponents","registerModules","registerMethods"].forEach(D),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(P),M("receiveTasks","callJS"),tu}function q(){this.nodeId=v(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function L(e,t,n){void 0===e&&(e=nu);var r=Qs[e];return r&&!n?new r(t):(t=t||{},this.nodeType=1,this.nodeId=v(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],void(this.pureChildren=[]))}function V(e,t){var n=d(e);n.nodeMap[t.nodeId]=t}function U(e){this.nodeType=8,this.nodeId=v(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function J(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")}function B(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function W(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=H(e,t[r],n);if(o===-1)return o}}}function z(e,t){return"dom"===e&&ru[t]&&"function"==typeof global[ru[t]]}function H(e,t,n){var r=t.module,o=t.method,i=t.args;return z(r,o)?global[ru[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function G(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,f(e,this),this.nodeMap={};var r=G.Listener||J;this.listener=new r(e,n||W(e,G.handler)),this.taskCenter=new Ws(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:G.handler),this.createDocumentElement()}function X(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}function K(){c(),Object.freeze(iu.Element),Object.freeze(iu.Comment),Object.freeze(iu.Listener),Object.freeze(iu.Document.prototype),Object.freeze(iu.Element.prototype),Object.freeze(iu.Comment.prototype),Object.freeze(iu.Listener.prototype)}function Q(e){uu.Document=e.Document,uu.Element=e.Element,uu.Comment=e.Comment,uu.sendTasks=e.sendTasks}function Z(e){}function Y(e){}function ee(e){}function te(e,t,n){}function ne(e,t,n,r,o){var i=new uu.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},cu[e]=i;var u=Object.assign({Document:uu.Document,Element:uu.Element,Comment:uu.Comment,sendTasks:uu.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);c.push(t);var d=new(Function.prototype.bind.apply(Function,[null].concat(c)));return d.apply(void 0,l)}function re(e,t){}function oe(e){delete cu[e]}function ie(e){return cu[e].body.toJSON()}function ae(e,t){var n={fireEvent:function(e,t,n,r,o){var i=cu[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){var o=cu[e];return o.handleCallback(t,n,r)}},r=cu[e];if(r&&Array.isArray(t)){var o=[];return t.forEach(function(t){var r=n[t.method],i=[].concat(t.args);"function"==typeof r&&(i.unshift(e),o.push(r.apply(void 0,i)))}),o}}function se(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function ue(e){var t=this._ids[e];if(t)return t.el}function ce(e){var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._app,n=t.differ;return n.then(function(){e()})}function fe(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);if(n){var r=this._app.requireModule("dom");r.scrollToElement(n.ref,{offset:t})}}function de(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){var i=this._app.requireModule("animation");i.transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function pe(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function he(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead");var n=this._app.requireModule("stream");n.sendHttp(e,t)}function ve(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead");var t=this._app.requireModule("event");t.openURL(e)}function me(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead");var t=this._app.requireModule("pageInfo");t.setTitle(e)}function ye(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function _e(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&_e.apply(void 0,[e].concat(t))}return e}function ge(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function be(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function we(e,t){return Pu.call(e,t)}function Ce(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function ke(e){return null!==e&&"object"==typeof e}function Oe(e){return Mu.call(e)===Fu}function xe(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function Ee(){return"object"==typeof nativeSet?nativeSet.create():new au}function Se(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function je(e){var t=e.replace(Lu,"").replace(Vu,"");return t}function Ie(e){return e.replace(Ju,"")}function Ae(){this.id=Gu++,this.subs=[]}function Te(e){Ae.target&&Xu.push(Ae.target),Ae.target=e}function Ne(){Ae.target=Xu.pop()}function Re(){Ae.target=null,Xu=[]}function De(e,t,n,r){r&&_e(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++Ku,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=Ee(),this.newDepIds=Ee(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $e(e,t){var n,r,o,i;if(t||(t=Qu,t.clear()),o=Array.isArray(e),i=ke(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)$e(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$e(e[r[n]],t)}}function Pe(e){if(this.value=e,this.dep=new Ae,ge(e,"__ob__",this),Array.isArray(e)){var t=qu?Me:Fe;t(e,Yu,ec),this.observeArray(e)}else this.walk(e)}function Me(e,t){e.__proto__=t}function Fe(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];ge(e,i,t[i])}}function qe(e,t){if(ke(e)){var n;return we(e,"__ob__")&&e.__ob__ instanceof Pe?n=e.__ob__:(Array.isArray(e)||Oe(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Pe(e)),n&&t&&n.addVm(t),n}}function Le(e,t,n){var r=new Ae,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var i=o&&o.get,a=o&&o.set,s=qe(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Ae.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)o=t[a],o&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=qe(t),r.notify())}})}}function Ve(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(we(e,t))return void(e[t]=n);if(e._isVue)return void Ve(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];Je(i,t)}return n}function Ue(e,t){if(we(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];Be(o,t)}}}function Je(e,t){(tc.indexOf(t)>-1||!xe(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Be(e,t){xe(t)||delete e[t]}function We(e){e._watchers=[],ze(e),Ge(e),Ke(e)}function ze(e){var t=e._data;Oe(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)Je(e,n[r]);qe(t,e)}function He(){}function Ge(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=Xe(r,e),o.set=He):(o.get=r.get?r.cache!==!1?Xe(r.get,e):Ce(r.get,e):He,o.set=r.set?Ce(r.set,e):He),Object.defineProperty(e,n,o)}}function Xe(e,t){var n=new De(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Ae.target&&n.depend(),n.value}}function Ke(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Qe(e){var t=e.type,n=rc[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Se(e[r])&&"object"===Se(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Ze(e,t,n){ot(e,t,n.id,e),it(e,t,n.attr),st(e,t,n.classList),ut(e,t,n.style),lt(e,t,n.events)}function Ye(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),tt(r,i,e,t),tt(n.attr,i,e,t)}function et(e,t,n,r){void 0===r&&(r={}),rt(n.classList,e,t),nt(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function tt(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=pt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function nt(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=pt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}function rt(e,t,n){function r(e,t){"array"===Se(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=pt(t,e,function(e){r(e,i),at(n._rootEl,o,e)});r(a,i),at(n._rootEl,o,a)}else null!=e&&(r(e,i),at(n._rootEl,o,e))}}function ot(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),pt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function it(e,t,n){ft(e,t,"attr",n)}function at(e,t,n){for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function st(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=pt(e,n,function(e){at(t,r,e)});at(t,r,o)}else at(t,r,n)}}function ut(e,t,n){ft(e,t,"style",n)}function ct(e,t,n,r){t.addEvent(n,Ce(r,e))}function lt(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&(a=e[a],a||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ct(e,t,i,a)}}function ft(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?dt(e,t,n,a,s):t[oc[n]](a,s)}}function dt(e,t,n,r,o){var i=oc[n],a=pt(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function pt(e,t,n){if(e._static)return t.call(e,e);var r=new De(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)});return r.value}function ht(e,t){var n=e._app.doc;return n.createBody(t)}function vt(e,t){var n=e._app.doc;return n.createElement(t)}function mt(e,t){var n=yt(e),r=_t(e),o=ic++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function yt(e){var t=e._app.doc,n=t.createComment("start");return n}function _t(e){var t=e._app.doc,n=t.createComment("end");return n}function gt(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=bt(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function bt(e,t,n){return t.element?Ct(t,n):wt(t,n)}function wt(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function Ct(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,r!==-1}),r}}function kt(e,t,n){void 0===n&&(n=!1),t.element?xt(t,n):Ot(t),t._vm&&t._vm.$emit("hook:destroyed")}function Ot(e){var t=e.parentNode;t&&t.removeChild(e)}function xt(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Ot(e.start),n.forEach(function(e){Ot(e)}),t||Ot(e.end)}function Et(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?St(e,n.children[0],e._parentEl):St(e,n.children,e._parentEl):St(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function St(e,t,n,r){var o=e._app||{};if(o.lastSignal!==-1){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),jt(t))return void Dt(e,t,n,r);if(r=r||{},It(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=mt(e,n));if(At(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):$t(e,t,n));if(Tt(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Pt(e,t,n,r));var i=r.type||t.type;if(Nt(i,r))return void Mt(e,t,n,i,r);var a=i,s=Rt(e,t,a);if(s)return console.debug("[JS Framework] compile composed component by",t),void Ft(e,s,t,n,a,r);console.debug("[JS Framework] compile native component by",t),qt(e,t,n,a)}}function jt(e){return Array.isArray(e)}function It(e){return"content"===e.type||"slot"===e.type}function At(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Tt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Nt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Rt(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Dt(e,t,n,r){var o=mt(e,n);t.forEach(function(t){St(e,t,o,r)})}function $t(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=mt(e,n);c.children=[],c.data=[],c.vms=[],Vt(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Pt(e,t,n,r){var o={shown:!0},i=mt(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ut(e,t,i,o)}function Mt(e,t,n,r,o){var i=r.call(e),a=_e({type:i},o),s=mt(e,n);n.element&&n.children&&n.children.push(s),pt(e,r,function(n){var r=_e({type:n},o);kt(e,s,!0),St(e,t,s,r)}),St(e,t,s,a)}function Ft(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),ot(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Ye(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Lt(e,n,this._content)}});et(e,s,n,r)}function qt(e,t,n,r){Qe(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ht(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=vt(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,Ce(c,s))}}Ze(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};f.lastSignal===-1||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=gt(e,o,n)),f.lastSignal!==-1&&Lt(e,t,o),f.lastSignal!==-1&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=gt(e,o,n))}function Lt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return St(e,t,n),r.lastSignal!==-1})}function Vt(e,t,n,r){function o(e,r,o){var a;c?(a=e,ke(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Bt(o,a);i.push(s),St(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=Jt(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):kt(e,r[n])}),a.length=0,i.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),bt(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function Ut(e,t,n,r){var o=Jt(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?St(e,t,n,r):kt(e,n,!0))});n.display=!!o,o&&St(e,t,n,r)}function Jt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return pt(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Bt(e,t){var n=Object.create(e);return n._data=t,ze(n),Ge(n),n._realParent=e,e._static&&(n._static=e._static),n}function Wt(e,t){if(t instanceof Wt)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function zt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Wt(e,t);o.forEach(function(e){e.call(n,i)})}}function Ht(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Gt(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Xt(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Kt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Qt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);ac.forEach(function(t){e.$on("hook:"+t,n[t])})}function Zt(e){e.$emit=zt,e.$dispatch=Ht,e.$broadcast=Gt,e.$on=Xt,e.$off=Kt}function Yt(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,Qt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&_e(this._data,o),We(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,Et(this))}function en(e,t){var n=function(n){var r=sc[n];r||(r={},sc[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function tn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function nn(e,t){var n=sc[t],r={},o=function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})};for(var i in n)o(i);return r}function rn(e,t){var n=e.customComponentMap;return n[t]}function on(e,t,n){var r=e.customComponentMap;return r[t]?void console.error("[JS Framework] define a component("+t+") that already exists"):void(r[t]=n)}function an(e){var t=uc.valid(e);if(t)return e;e="string"==typeof e?e:"";for(var n=e.split("."),r=0,o=[];r<3;){var i="string"==typeof n[r]&&n[r]?n[r]:"0";o.push(i),r++}return o.join(".")}function sn(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return r.errorMessage=o(e,t,n),i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r}function un(e,t){t=t||global.WXEnvironment,t=Oe(t)?t:{};var n={isDowngrade:!1};if("function"===Se(e)){var r=e.call(this,t,{semver:uc,normalizeVersion:an});r=!!r,n=r?sn("custom","","custom params"):n}else{e=Oe(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=an(p),v=an(t[s]);if(uc.satisfies(v,h)){n=sn(u,l,p);break}}else if(d){var m="array"===Se(p)?p:[p];if(m.indexOf(l)>=0){n=sn(u,l,p);break}}}}return n}function cn(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ln(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Bu(t))o=je(t);else{if(!Hu(t))return new Error("Wrong component name: "+t);if(o=Ie(t),!rn(e,o))return new Error("It's not a component: "+t)}if(n=Oe(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!uc.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=un(n.downgrade);return i.isDowngrade?(e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]
-}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage)):(n.viewport&&cn(e,n.viewport),void(e.vm=new Yt(o,null,{_app:e},null,r)))}function fn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),on(e,t,n)}function dn(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):_e(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}function pn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&hn(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null,e.callbacks=null}function hn(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)hn(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function vn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function mn(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t){return mn(e,t,n,r)!==!1});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function yn(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.callbacks[t];return"function"==typeof o?(o(n),"undefined"!=typeof r&&r!==!1||(e.callbacks[t]=void 0),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"updateFinish"},[])):new Error('invalid callback id "'+t+'"')}function _n(e){e.differ.flush()}function gn(e,t){var n;return"array"!==Se(t)&&(t=[t]),t.forEach(function(t){t.args=t.args.map(function(t){return bn(t,e)}),n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function bn(e,t){var n=Se(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof nc.Element?e.ref:e;case"function":return t.callbacks[++t.uid]=e,t.uid.toString();default:return JSON.stringify(e)}}function wn(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return cc.apply(void 0,[e].concat(t))},a=function(t,r,i){o=ln(e,t,r,i||n),_n(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=Yt,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return fn.apply(void 0,[e].concat(t))},c=function(t,n){o=ln(e,t,{},n)},l=function(t){return function(n){o=ln(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(je(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h="(function(global){\n\n "+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.uid.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.uid.toString()},clearTimeout:function(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,document:f,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return Cn(_,h),o}function Cn(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function kn(e,t){var n=e[t];for(var r in n)n[r]()}function On(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}function xn(e,t,n){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},Object.defineProperty(this,"callbacks",{get:function(){return n.callbacks},set:function(e){e||n.close()}}),Object.defineProperty(this,"uid",{get:function(){return n.lastCallbackId},set:function(e){n.lastCallbackId=e}}),this.callbackManager=n,this.doc=new nc.Document(e,this.options.bundleUrl,null,nc.Listener),this.differ=new lc(e)}function En(e,t,n,r,o){var i=o||{},a=i.services,s=i.callbacks;Re();var u=fc[e];n=n||{};var c;return u?c=new Error('invalid instance id "'+e+'"'):(u=new xn(e,n,s),fc[e]=u,c=wn(u,t,r,a)),c}function Sn(e){nc.Document=e.Document,nc.Element=e.Element,nc.Comment=e.Comment,nc.sendTasks=e.sendTasks,nc.Listener=e.Listener}function jn(e,t){var n,r=fc[e];return n=r?dn(r,t):new Error('invalid instance id "'+e+'"')}function In(e){Re();var t=fc[e];return t?(pn(t),delete fc[e],fc):new Error('invalid instance id "'+e+'"')}function An(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?dc[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(dc[e.type]=e))})}function Tn(e){"object"==typeof e&&en(e)}function Nn(e){"object"==typeof e&&tn(Yt,e)}function Rn(e,t){var n=fc[e];if(n&&Array.isArray(t)){var r=[];return t.forEach(function(t){var n=pc[t.method],o=[].concat(t.args);"function"==typeof n&&(o.unshift(e),r.push(n.apply(void 0,o)))}),r}return new Error('invalid instance id "'+e+'" or tasks')}function Dn(e){var t,n=fc[e];return t=n?vn(n):new Error('invalid instance id "'+e+'"')}function $n(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Pn(){}function Mn(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead");var o=this._app.requireModule("userTrack");o.commit(e,t,n,r)}function Fn(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window){var n=this._app.requireModule("windvane");n.call({class:"MtopWVPlugin",method:"send",data:e},t)}else{var r=this._app.requireModule("stream");r.sendMtop(e,t)}}function qn(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead");var n=this._app.requireModule("windvane");n.call(e,t)}function Ln(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead");var n=this._app.requireModule("pageInfo");n.setSpm(e,t)}function Vn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead");var t=this._app.requireModule("user");t.getUserInfo(e)}function Un(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead");var t=this._app.requireModule("user");t.login(e)}function Jn(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead");var t=this._app.requireModule("user");t.logout(e)}var Bn={browser:"0.5.0",framework:"0.19.7",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if("undefined"!=typeof a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],a?c[l]="undefined"==typeof i?a(s,l):a.call(i,s,l):c[l]=s,l+=1;return c.length=u,c}}());var Wn="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},zn=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Hn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Gn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Xn=Gn,Kn=function(e){if(!Xn(e))throw TypeError(e+" is not an object!");return e},Qn=function(e){try{return!!e()}catch(e){return!0}},Zn=!Qn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),Yn=Gn,er=zn.document,tr=Yn(er)&&Yn(er.createElement),nr=function(e){return tr?er.createElement(e):{}},rr=!Zn&&!Qn(function(){return 7!=Object.defineProperty(nr("div"),"a",{get:function(){return 7}}).a}),or=Gn,ir=function(e,t){if(!or(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!or(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},ar=Kn,sr=rr,ur=ir,cr=Object.defineProperty,lr=Zn?Object.defineProperty:function(e,t,n){if(ar(e),t=ur(t,!0),ar(n),sr)try{return cr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},fr={f:lr},dr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},pr=fr,hr=dr,vr=Zn?function(e,t,n){return pr.f(e,t,hr(1,n))}:function(e,t,n){return e[t]=n,e},mr={}.hasOwnProperty,yr=function(e,t){return mr.call(e,t)},_r=0,gr=Math.random(),br=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++_r+gr).toString(36))},wr=t(function(e){var t=zn,n=vr,r=yr,o=br("src"),i="toString",a=Function[i],s=(""+a).split(i);Hn.inspectSource=function(e){return a.call(e)},(e.exports=function(e,i,a,u){var c="function"==typeof a;c&&(r(a,"name")||n(a,"name",i)),e[i]!==a&&(c&&(r(a,o)||n(a,o,e[i]?""+e[i]:s.join(String(i)))),e===t?e[i]=a:u?e[i]?e[i]=a:n(e,i,a):(delete e[i],n(e,i,a)))})(Function.prototype,i,function(){return"function"==typeof this&&this[o]||a.call(this)})}),Cr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},kr=Cr,Or=function(e,t,n){if(kr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},xr=zn,Er=Hn,Sr=vr,jr=wr,Ir=Or,Ar="prototype",Tr=function(e,t,n){var r,o,i,a,s=e&Tr.F,u=e&Tr.G,c=e&Tr.S,l=e&Tr.P,f=e&Tr.B,d=u?xr:c?xr[t]||(xr[t]={}):(xr[t]||{})[Ar],p=u?Er:Er[t]||(Er[t]={}),h=p[Ar]||(p[Ar]={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Ir(i,xr):l&&"function"==typeof i?Ir(Function.call,i):i,d&&jr(d,r,i,e&Tr.U),p[r]!=i&&Sr(p,r,a),l&&h[r]!=i&&(h[r]=i)};xr.core=Er,Tr.F=1,Tr.G=2,Tr.S=4,Tr.P=8,Tr.B=16,Tr.W=32,Tr.U=64,Tr.R=128;var Nr=Tr,Rr={}.toString,Dr=function(e){return Rr.call(e).slice(8,-1)},$r=Dr,Pr=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==$r(e)?e.split(""):Object(e)},Mr=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Fr=Pr,qr=Mr,Lr=function(e){return Fr(qr(e))},Vr=Math.ceil,Ur=Math.floor,Jr=function(e){return isNaN(e=+e)?0:(e>0?Ur:Vr)(e)},Br=Jr,Wr=Math.min,zr=function(e){return e>0?Wr(Br(e),9007199254740991):0},Hr=Jr,Gr=Math.max,Xr=Math.min,Kr=function(e,t){return e=Hr(e),e<0?Gr(e+t,0):Xr(e,t)},Qr=Lr,Zr=zr,Yr=Kr,eo=function(e){return function(t,n,r){var o,i=Qr(t),a=Zr(i.length),s=Yr(r,a);if(e&&n!=n){for(;a>s;)if(o=i[s++],o!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},to=zn,no="__core-js_shared__",ro=to[no]||(to[no]={}),oo=function(e){return ro[e]||(ro[e]={})},io=oo("keys"),ao=br,so=function(e){return io[e]||(io[e]=ao(e))},uo=yr,co=Lr,lo=eo(!1),fo=so("IE_PROTO"),po=function(e,t){var n,r=co(e),o=0,i=[];for(n in r)n!=fo&&uo(r,n)&&i.push(n);for(;t.length>o;)uo(r,n=t[o++])&&(~lo(i,n)||i.push(n));return i},ho="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),vo=po,mo=ho,yo=Object.keys||function(e){return vo(e,mo)},_o=Object.getOwnPropertySymbols,go={f:_o},bo={}.propertyIsEnumerable,wo={f:bo},Co=Mr,ko=function(e){return Object(Co(e))},Oo=yo,xo=go,Eo=wo,So=ko,jo=Pr,Io=Object.assign,Ao=!Io||Qn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Io({},e)[n]||Object.keys(Io({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=So(e),o=arguments.length,i=1,a=xo.f,s=Eo.f;o>i;)for(var u,c=jo(n[i++]),l=a?Oo(c).concat(a(c)):Oo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Io,To=Nr;To(To.S+To.F,"Object",{assign:Ao}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,t).set,r.call({},null)}catch(o){if(e.prototype!=={}[t]||void 0==={__proto__:null}.__proto__)return;r=function(e){this[t]=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object,"__proto__"));var No=Wn,Ro=No.WXEnvironment;Ro&&"iOS"===Ro.platform&&(Wn.Promise=void 0);var Do=t(function(e){var t=oo("wks"),n=br,r=zn.Symbol,o="function"==typeof r,i=e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))};i.store=t}),$o=Dr,Po=Do("toStringTag"),Mo="Arguments"==$o(function(){return arguments}()),Fo=function(e,t){try{return e[t]}catch(e){}},qo=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=Fo(t=Object(e),Po))?n:Mo?$o(t):"Object"==(r=$o(t))&&"function"==typeof t.callee?"Arguments":r},Lo=qo,Vo={};Vo[Do("toStringTag")]="z",Vo+""!="[object z]"&&wr(Object.prototype,"toString",function(){return"[object "+Lo(this)+"]"},!0);var Uo=Jr,Jo=Mr,Bo=function(e){return function(t,n){var r,o,i=String(Jo(t)),a=Uo(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):(r-55296<<10)+(o-56320)+65536)}},Wo=!1,zo={},Ho=fr,Go=Kn,Xo=yo,Ko=Zn?Object.defineProperties:function(e,t){Go(e);for(var n,r=Xo(t),o=r.length,i=0;o>i;)Ho.f(e,n=r[i++],t[n]);return e},Qo=zn.document&&document.documentElement,Zo=Kn,Yo=Ko,ei=ho,ti=so("IE_PROTO"),ni=function(){},ri="prototype",oi=function(){var e,t=nr("iframe"),n=ei.length,r="<",o=">";for(t.style.display="none",Qo.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),oi=e.F;n--;)delete oi[ri][ei[n]];return oi()},ii=Object.create||function(e,t){var n;return null!==e?(ni[ri]=Zo(e),n=new ni,ni[ri]=null,n[ti]=e):n=oi(),void 0===t?n:Yo(n,t)},ai=fr.f,si=yr,ui=Do("toStringTag"),ci=function(e,t,n){e&&!si(e=n?e:e.prototype,ui)&&ai(e,ui,{configurable:!0,value:t})},li=ii,fi=dr,di=ci,pi={};vr(pi,Do("iterator"),function(){return this});var hi=function(e,t,n){e.prototype=li(pi,{next:fi(1,n)}),di(e,t+" Iterator")},vi=yr,mi=ko,yi=so("IE_PROTO"),_i=Object.prototype,gi=Object.getPrototypeOf||function(e){return e=mi(e),vi(e,yi)?e[yi]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?_i:null},bi=Wo,wi=Nr,Ci=wr,ki=vr,Oi=yr,xi=zo,Ei=hi,Si=ci,ji=gi,Ii=Do("iterator"),Ai=!([].keys&&"next"in[].keys()),Ti="@@iterator",Ni="keys",Ri="values",Di=function(){return this},$i=function(e,t,n,r,o,i,a){Ei(n,t,r);var s,u,c,l=function(e){if(!Ai&&e in h)return h[e];switch(e){case Ni:return function(){return new n(this,e)};case Ri:return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d=o==Ri,p=!1,h=e.prototype,v=h[Ii]||h[Ti]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=ji(_.call(new e)),c!==Object.prototype&&(Si(c,f,!0),bi||Oi(c,Ii)||ki(c,Ii,Di))),d&&v&&v.name!==Ri&&(p=!0,m=function(){return v.call(this)}),bi&&!a||!Ai&&!p&&h[Ii]||ki(h,Ii,m),xi[t]=m,xi[f]=Di,o)if(s={values:d?m:l(Ri),keys:i?m:l(Ni),entries:y},a)for(u in s)u in h||Ci(h,u,s[u]);else wi(wi.P+wi.F*(Ai||p),t,s);return s},Pi=Bo(!0);$i(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Pi(t,n),this._i+=e.length,{value:e,done:!1})});var Mi=Do("unscopables"),Fi=Array.prototype;void 0==Fi[Mi]&&vr(Fi,Mi,{});var qi=function(e){Fi[Mi][e]=!0},Li=function(e,t){return{value:t,done:!!e}},Vi=qi,Ui=Li,Ji=zo,Bi=Lr,Wi=$i(Array,"Array",function(e,t){this._t=Bi(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ui(1)):"keys"==t?Ui(0,n):"values"==t?Ui(0,e[n]):Ui(0,[n,e[n]])},"values");Ji.Arguments=Ji.Array,Vi("keys"),Vi("values"),Vi("entries");for(var zi=Wi,Hi=wr,Gi=zn,Xi=vr,Ki=zo,Qi=Do,Zi=Qi("iterator"),Yi=Qi("toStringTag"),ea=Ki.Array,ta=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],na=0;na<5;na++){var ra,oa=ta[na],ia=Gi[oa],aa=ia&&ia.prototype;if(aa){aa[Zi]||Xi(aa,Zi,ea),aa[Yi]||Xi(aa,Yi,oa),Ki[oa]=ea;for(ra in zi)aa[ra]||Hi(aa,ra,zi[ra],!0)}}var sa,ua,ca,la=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},fa=Kn,da=function(e,t,n,r){try{return r?t(fa(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&fa(o.call(e)),t}},pa=zo,ha=Do("iterator"),va=Array.prototype,ma=function(e){return void 0!==e&&(pa.Array===e||va[ha]===e)},ya=qo,_a=Do("iterator"),ga=zo,ba=Hn.getIteratorMethod=function(e){if(void 0!=e)return e[_a]||e["@@iterator"]||ga[ya(e)]},wa=t(function(e){var t=Or,n=da,r=ma,o=Kn,i=zr,a=ba,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if(m=c?_(o(h=e[g])[0],h[1]):_(e[g]),m===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if(m=n(v,_,h.value,c),m===s||m===u)return m};c.BREAK=s,c.RETURN=u}),Ca=Kn,ka=Cr,Oa=Do("species"),xa=function(e,t){var n,r=Ca(e).constructor;return void 0===r||void 0==(n=Ca(r)[Oa])?t:ka(n)},Ea=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Sa=Or,ja=Ea,Ia=Qo,Aa=nr,Ta=zn,Na=Ta.process,Ra=Ta.setImmediate,Da=Ta.clearImmediate,$a=Ta.MessageChannel,Pa=0,Ma={},Fa="onreadystatechange",qa=function(){var e=+this;if(Ma.hasOwnProperty(e)){var t=Ma[e];delete Ma[e],t()}},La=function(e){qa.call(e.data)};Ra&&Da||(Ra=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return Ma[++Pa]=function(){ja("function"==typeof e?e:Function(e),n)},sa(Pa),Pa},Da=function(e){delete Ma[e]},"process"==Dr(Na)?sa=function(e){Na.nextTick(Sa(qa,e,1))}:$a?(ua=new $a,ca=ua.port2,ua.port1.onmessage=La,sa=Sa(ca.postMessage,ca,1)):Ta.addEventListener&&"function"==typeof postMessage&&!Ta.importScripts?(sa=function(e){Ta.postMessage(e+"","*")},Ta.addEventListener("message",La,!1)):sa=Fa in Aa("script")?function(e){Ia.appendChild(Aa("script"))[Fa]=function(){Ia.removeChild(this),qa.call(e)}}:function(e){setTimeout(Sa(qa,e,1),0)});var Va={set:Ra,clear:Da},Ua=zn,Ja=Va.set,Ba=Ua.MutationObserver||Ua.WebKitMutationObserver,Wa=Ua.process,za=Ua.Promise,Ha="process"==Dr(Wa),Ga=function(){var e,t,n,r=function(){var r,o;for(Ha&&(r=Wa.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Ha)n=function(){Wa.nextTick(r)};else if(Ba){var o=!0,i=document.createTextNode("");new Ba(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(za&&za.resolve){var a=za.resolve();n=function(){a.then(r)}}else n=function(){Ja.call(Ua,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}},Xa=wr,Ka=function(e,t,n){for(var r in t)Xa(e,r,t[r],n);return e},Qa=zn,Za=fr,Ya=Zn,es=Do("species"),ts=function(e){var t=Qa[e];Ya&&t&&!t[es]&&Za.f(t,es,{configurable:!0,get:function(){return this}})},ns=Do("iterator"),rs=!1;try{var os=[7][ns]();os.return=function(){rs=!0},Array.from(os,function(){throw 2})}catch(e){}var is,as,ss,us=function(e,t){if(!t&&!rs)return!1;var n=!1;try{var r=[7],o=r[ns]();o.next=function(){return{done:n=!0}},r[ns]=function(){return o},e(r)}catch(e){}return n},cs=Wo,ls=zn,fs=Or,ds=qo,ps=Nr,hs=Gn,vs=Cr,ms=la,ys=wa,_s=xa,gs=Va.set,bs=Ga(),ws="Promise",Cs=ls.TypeError,ks=ls.process,Os=ls[ws],ks=ls.process,xs="process"==ds(ks),Es=function(){},Ss=!!function(){try{var e=Os.resolve(1),t=(e.constructor={})[Do("species")]=function(e){e(Es,Es)};return(xs||"function"==typeof PromiseRejectionEvent)&&e.then(Es)instanceof t}catch(e){}}(),js=function(e,t){return e===t||e===Os&&t===ss},Is=function(e){var t;return!(!hs(e)||"function"!=typeof(t=e.then))&&t},As=function(e){return js(Os,e)?new Ts(e):new as(e)},Ts=as=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw Cs("Bad Promise constructor");t=e,n=r}),this.resolve=vs(t),this.reject=vs(n)},Ns=function(e){try{e()}catch(e){return{error:e}}},Rs=function(e,t){if(!e._n){e._n=!0;var n=e._c;bs(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&Ps(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(Cs("Promise-chain cycle")):(i=Is(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Ds(e)})}},Ds=function(e){gs.call(ls,function(){var t,n,r,o=e._v;if($s(e)&&(t=Ns(function(){xs?ks.emit("unhandledRejection",o,e):(n=ls.onunhandledrejection)?n({promise:e,reason:o}):(r=ls.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=xs||$s(e)?2:1),e._a=void 0,t)throw t.error})},$s=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!$s(t.promise))return!1;return!0},Ps=function(e){gs.call(ls,function(){var t;xs?ks.emit("rejectionHandled",e):(t=ls.onrejectionhandled)&&t({promise:e,reason:e._v})})},Ms=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),Rs(t,!0))},Fs=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Cs("Promise can't be resolved itself");(t=Is(e))?bs(function(){var r={_w:n,_d:!1};try{t.call(e,fs(Fs,r,1),fs(Ms,r,1))}catch(e){Ms.call(r,e)}}):(n._v=e,n._s=1,Rs(n,!1))}catch(e){Ms.call({_w:n,_d:!1},e)}}};Ss||(Os=function(e){ms(this,Os,ws,"_h"),vs(e),is.call(this);try{e(fs(Fs,this,1),fs(Ms,this,1))}catch(e){Ms.call(this,e)}},is=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},is.prototype=Ka(Os.prototype,{then:function(e,t){var n=As(_s(this,Os));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=xs?ks.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Rs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Ts=function(){var e=new is;this.promise=e,this.resolve=fs(Fs,e,1),this.reject=fs(Ms,e,1)}),ps(ps.G+ps.W+ps.F*!Ss,{Promise:Os}),ci(Os,ws),ts(ws),ss=Hn[ws],ps(ps.S+ps.F*!Ss,ws,{reject:function(e){var t=As(this),n=t.reject;return n(e),t.promise}}),ps(ps.S+ps.F*(cs||!Ss),ws,{resolve:function(e){if(e instanceof Os&&js(e.constructor,this))return e;var t=As(this),n=t.resolve;return n(e),t.promise}}),ps(ps.S+ps.F*!(Ss&&us(function(e){Os.all(e).catch(Es)})),ws,{all:function(e){var t=this,n=As(t),r=n.resolve,o=n.reject,i=Ns(function(){var n=[],i=0,a=1;ys(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=As(t),r=n.reject,o=Ns(function(){ys(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var qs=["off","error","warn","info","log","debug"],Ls={},Vs=global.console,Us=global.setTimeout,Js=global.setTimeoutNative;s();var Bs=function(){},Ws=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Bs=t||function(){}};Ws.prototype.send=function(e,t,n){var r=t.action,o=t.component,i=t.ref,a=t.module,s=t.method;switch(e){case"dom":return this[r](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,i,s,n,{component:o});default:return this.moduleHandler(this.instanceId,a,s,n,{})}},Ws.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},Ws.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},Ws.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var zs,Hs,Gs,Xs={},Ks=1,Qs={},Zs=[],Ys=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,eu={},tu={createInstance:R,registerService:S,unregisterService:j};q.prototype.destroy=function(){var e=d(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var nu="div";L.prototype=Object.create(q.prototype),L.prototype.constructor=L,x(L),Object.assign(L.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(k(e,this.children,this.children.length,!0),1===e.nodeType){var t=k(e,this.pureChildren,this.pureChildren.length),n=h(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(g(e,this),C(e,this.children,this.children.length,!0),this.docId&&V(this.docId,e),1===e.nodeType){C(e,this.pureChildren,this.pureChildren.length);var r=h(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=b(t),r=k(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=h(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t),!0),this.docId&&V(this.docId,e),1===e.nodeType){var i=b(t),a=C(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=h(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=k(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),r=h(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&V(this.docId,e),1===e.nodeType){var o=C(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),i=h(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(O(e,this.children,!0),1===e.nodeType)){O(e,this.pureChildren);var n=h(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=h(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||n===!1){this.attr[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||n===!1){this.style[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=h(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=h(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=h(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}}),U.prototype=Object.create(q.prototype),U.prototype.constructor=U,U.prototype.toString=function(){return"<!-- "+this.value+" -->"},Object.assign(J.prototype,{createFinish:function(e){var t=this.handler;return t([B("createFinish")],e)},updateFinish:function(e){var t=this.handler;return t([B("updateFinish")],e)},refreshFinish:function(e){var t=this.handler;return t([B("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[B("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return B("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(B("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return B("removeElement",[e])});return this.addActions(t)}return this.addActions(B("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(B("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(B("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(B("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(B("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;return Array.isArray(e)||(e=[e]),this.batched?void t.push.apply(t,e):n(e)}});var ru={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};G.handler=null,Object.assign(G.prototype,{getRef:function(e){return this.nodeMap[e];
-},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new L("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){m(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){m(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){var n=new L(e,t);_(this,n)}return this.body},createElement:function(e,t){return new L(e,t)},createComment:function(e){return new U(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&X(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,p(this.id)}});var ou=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};ou.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},ou.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},ou.prototype.consume=function(e,t,n){var r=this.callbacks[e];return"undefined"!=typeof n&&n!==!1||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},ou.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var iu={Document:G,Element:L,Comment:U,Listener:J,TaskCenter:Ws,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return global.callNative.apply(global,e)},CallbackManager:ou};G.handler=iu.sendTasks;var au,su={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:S,unregister:j,has:I},freezePrototype:K,init:F,config:iu},uu={},cu={},lu=Q,fu=Z,du=Y,pu=ee,hu=te,vu=ne,mu=re,yu=oe,_u=ie,gu=ae,bu={init:lu,registerComponents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu},wu=Object.freeze({default:bu,__moduleExports:bu,init:lu,registerComponents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu}),Cu=t(function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e,10);return t||0===t?t:e}function o(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return Xt.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function c(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return tn.call(e)===nn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function y(e,t){var n=d(e),r=d(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}function _(e,t){for(var n=0;n<e.length;n++)if(y(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function b(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(e){if(!sn.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function C(e){return/native code/.test(e.toString())}function k(e){Cn.target&&kn.push(Cn.target),Cn.target=e}function O(){Cn.target=kn.pop()}function x(e,t){e.__proto__=t}function E(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(e,i,t[i])}}function S(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof jn?n=e.__ob__:Sn.shouldConvert&&!mn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new jn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new Cn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||i.configurable!==!1){var a=i&&i.get,s=i&&i.set,u=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return Cn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,u=S(t),o.notify())}})}}function I(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(j(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function A(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&T(t)}function N(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&N(r,o):I(e,n,o);return e}function R(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function D(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(o=Qt(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=Qt(a),i[o]=p(r)?r:{type:r};e.props=i}}function P(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function M(e,t,n){function r(r){var o=In[r]||Tn;l[r]=o(e[r],t[r],n,r)}$(t),P(t);var o=t.extends;if(o&&(e="function"==typeof o?M(e,o.options,n):M(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof Be&&(u=u.options),e=M(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=Qt(n);if(a(o,i))return o[i];var s=Zt(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function q(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(U(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:U(String,o.type)||""!==s&&s!==en(e)||(s=!0)),void 0===s){s=L(r,o,e);var u=Sn.shouldConvert;Sn.shouldConvert=!0,S(s),Sn.shouldConvert=u}return s}function L(e,t,n){if(a(t,"default")){var r=t.default;return d(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function V(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function U(e,t){if(!Array.isArray(t))return V(t)===V(e);for(var n=0,r=t.length;n<r;n++)if(V(t[n])===V(e))return!0;return!1}function J(e){return new Rn(void 0,void 0,void 0,String(e))}function B(e){var t=new Rn(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function W(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=B(e[n]);return t}function z(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=Y(e,i,function(){n.$forceUpdate()}),!e)return;Je(e),t=t||{};var a=ee(t,e);if(e.options.functional)return H(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),ne(t);var u=e.options.name||o,c=new Rn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r});return c}}}function H(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=q(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return de(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return ye(o,r)}});return l instanceof Rn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function G(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function X(e,t,n,r){if(!e.child||e.child._isDestroyed){var o=e.child=G(e,qn,n,r);o.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var i=e;K(i,i)}}function K(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function Q(e){e.child._isMounted||(e.child._isMounted=!0,xe(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,xe(e.child,"activated"))}function Z(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,xe(e.child,"deactivated")):e.child.$destroy())}function Y(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function ee(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=en(s);te(r,i,s,u,!0)||te(r,o,s,u)||te(r,a,s,u)}return r}}function te(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function ne(e){e.hook||(e.hook={});for(var t=0;t<Pn.length;t++){var n=Pn[t],r=e.hook[n],o=$n[n];e.hook[n]=r?re(o,r):o}}function re(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function oe(e,t,n,r){r+=t;var o=e.__injected||(e.__injected={});if(!o[r]){o[r]=!0;var i=e[t];i?e[t]=function(){i.apply(this,arguments),n.apply(this,arguments)}:e[t]=n}}function ie(e,t,n,r,o){var i,a,s,u,c,l,f;for(i in e)if(a=e[i],s=t[i],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var d=0;d<s.length;d++)s[d]=a[d];e[i]=s}else s.fn=a,e[i]=s}else f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,Array.isArray(a)?n(c,a.invoker=ae(a),f,l):(a.invoker||(u=a,a=e[i]={},a.fn=u,a.invoker=se(a)),n(c,a.invoker,f,l));else;for(i in t)e[i]||(f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,r(c,t[i].invoker,l))}function ae(e){return function(t){for(var n=arguments,r=1===arguments.length,o=0;o<e.length;o++)r?e[o](t):e[o].apply(null,n)}}function se(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function ue(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function ce(e){return s(e)?[J(e)]:Array.isArray(e)?le(e):void 0}function le(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)r=e[n],null!=r&&"boolean"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,le(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(J(r)):r.text&&o&&o.text?i[i.length-1]=J(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function fe(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function de(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=Fn),pe(e,t,n,r,o)}function pe(e,t,n,r,o){if(n&&n.__ob__)return Dn();if(!t)return Dn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Fn?r=ce(r):o===Mn&&(r=ue(r));var i,a;if("string"==typeof t){var s;a=an.getTagNamespace(t),i=an.isReservedTag(t)?new Rn(an.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?z(s,n,e,r,t):new Rn(t,n,r,void 0,void 0,e)}else i=z(t,n,e,r);return i?(a&&he(i,a),i):Dn()}function he(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&he(o,t)}}function ve(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=ye(e.$options._renderChildren,n),e.$scopedSlots={},e._c=function(t,n,r,o){return de(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return de(e,t,n,r,o,!0)},e.$options.el&&e.$mount(e.$options.el)}function me(e){function t(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&o(e[r],t+"_"+r,n);else o(e,t,n)}function o(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}e.prototype.$nextTick=function(e){return _n(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=W(e.$slots[i]);o&&o.data.scopedSlots&&(e.$scopedSlots=o.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(!an.errorHandler)throw t;an.errorHandler.call(null,t,e),a=e._vnode}return a instanceof Rn||(a=Dn()),a.parent=o,a},e.prototype._s=n,e.prototype._v=J,e.prototype._n=r,e.prototype._e=Dn,e.prototype._q=y,e.prototype._i=_,e.prototype._m=function(e,n){var r=this._staticTrees[e];return r&&!n?Array.isArray(r)?W(r):B(r):(r=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),t(r,"__static__"+e,!1),r)},e.prototype._o=function(e,n,r){return t(e,"__once__"+n+(r?"_"+r:""),!0),e},e.prototype._f=function(e){return F(this.$options,"filters",e,!0)||on},e.prototype._l=function(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n},e.prototype._t=function(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t},e.prototype._b=function(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));for(var o in n)if("class"===o||"style"===o)e[o]=n[o];else{var i=r||an.mustUseProp(t,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[o]=n[o]}}else;return e},e.prototype._k=function(e,t,n){var r=an.keyCodes[t]||n;return Array.isArray(r)?r.indexOf(e)===-1:r!==e}}function ye(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.length&&(1!==i.length||" "!==i[0].text&&!i[0].isComment)&&(n.default=i),n}function _e(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&we(e,t)}function ge(e,t,n){n?An.$once(e,t):An.$on(e,t)}function be(e,t){An.$off(e,t)}function we(e,t,n){An=e,ie(t,n||{},ge,be,e)}function Ce(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;return(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0),r},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var o,i=r.length;i--;)if(o=r[i],o===t||o.fn===t){r.splice(i,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}function ke(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function Oe(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=Dn),xe(n,"beforeMount"),n._watcher=new Hn(n,function(){n._update(n._render(),t)},v),t=!1,null==n.$vnode&&(n._isMounted=!0,xe(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&xe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=qn;qn=n,n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),qn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype._updateFromParent=function(e,t,n,r){var o=this,i=!(!o.$options._renderChildren&&!r);if(o.$options._parentVnode=n,o.$vnode=n,o._vnode&&(o._vnode.parent=n),o.$options._renderChildren=r,e&&o.$options.props){Sn.shouldConvert=!1;for(var a=o.$options._propKeys||[],s=0;s<a.length;s++){var u=a[s];o[u]=q(u,o.$options.props,e,o)}Sn.shouldConvert=!0,o.$options.propsData=e}if(t){var c=o.$options._parentListeners;o.$options._parentListeners=t,we(o,t,c)}i&&(o.$slots=ye(r,n.context),o.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){xe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,xe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function xe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)n[r].call(e);e._hasHookEvent&&e.$emit("hook:"+t)}function Ee(){Ln.length=0,Vn={},Un=Jn=!1}function Se(){Jn=!0;var e,t,n;for(Ln.sort(function(e,t){return e.id-t.id}),Bn=0;Bn<Ln.length;Bn++)e=Ln[Bn],t=e.id,Vn[t]=null,e.run();for(Bn=Ln.length;Bn--;)e=Ln[Bn],n=e.vm,n._watcher===e&&n._isMounted&&xe(n,"updated");yn&&an.devtools&&yn.emit("flush"),Ee()}function je(e){var t=e.id;if(null==Vn[t]){if(Vn[t]=!0,Jn){for(var n=Ln.length-1;n>=0&&Ln[n].id>e.id;)n--;Ln.splice(Math.max(n,Bn)+1,0,e)}else Ln.push(e);Un||(Un=!0,_n(Se))}}function Ie(e){Gn.clear(),Ae(e,Gn)}function Ae(e,t){var n,r,o=Array.isArray(e);if((o||d(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)Ae(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Ae(e[r[n]],t)}}function Te(e){e._watchers=[];var t=e.$options;t.props&&Ne(e,t.props),t.methods&&Pe(e,t.methods),t.data?Re(e):S(e._data={},!0),t.computed&&De(e,t.computed),t.watch&&Me(e,t.watch)}function Ne(e,t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),o=!e.$parent;Sn.shouldConvert=o;for(var i=function(o){var i=r[o];j(e,i,q(i,t,n,e))},a=0;a<r.length;a++)i(a);Sn.shouldConvert=!0}function Re(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||Le(e,n[o]);S(t,!0)}function De(e,t){for(var n in t){var r=t[n];"function"==typeof r?(Xn.get=$e(r,e),Xn.set=v):(Xn.get=r.get?r.cache!==!1?$e(r.get,e):c(r.get,e):v,Xn.set=r.set?c(r.set,e):v),Object.defineProperty(e,n,Xn)}}function $e(e,t){var n=new Hn(t,e,v,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Cn.target&&n.depend(),n.value}}function Pe(e,t){for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function Me(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Fe(e,n,r[o]);else Fe(e,n,r)}}function Fe(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function qe(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=I,e.prototype.$delete=A,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Hn(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}function Le(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Ve(e){e.prototype._init=function(e){var t=this;t._uid=Kn++,t._isVue=!0,e&&e._isComponent?Ue(t,e):t.$options=M(Je(t.constructor),e||{},t),t._renderProxy=t,t._self=t,ke(t),_e(t),xe(t,"beforeCreate"),Te(t),xe(t,"created"),ve(t)}}function Ue(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Je(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,o=e.extendOptions;n!==r&&(e.superOptions=n,o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._scopeId=t._scopeId,t=e.options=M(n,o),t.name&&(t.components[t.name]=e))}return t}function Be(e){this._init(e)}function We(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function ze(e){e.mixin=function(e){this.options=M(this.options,e)}}function He(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=M(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,an._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,o[r]=a,a}}function Ge(e){an._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function Xe(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ke(e){var t={};t.get=function(){return an},Object.defineProperty(e,"config",t),e.util=Nn,e.set=I,e.delete=A,e.nextTick=_n,e.options=Object.create(null),an._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,Yn),We(e),ze(e),He(e),Ge(e)}function Qe(e){this.instanceId="",this.nodeId=er++,this.parentNode=null,this.nodeType=3,this.text=e}function Ze(e){return new tr.Element(e)}function Ye(e,t){return new tr.Element(e+":"+t)}function et(e){return new tr.TextNode(e)}function tt(e){return new tr.Comment(e)}function nt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Ze("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function rt(e,t){return 3===t.nodeType?void e.setAttr("value",""):void e.removeChild(t)}function ot(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Ze("text");n.setAttr("value",t.text),e.appendChild(n)}}function it(e){return e.parentNode}function at(e){return e.nextSibling}function st(e){return e.type}function ut(e,t){e.parentNode.setAttr("value",t)}function ct(e,t,n){e.setAttr(t,n)}function lt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.child||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function ft(e){return null==e}function dt(e){return null!=e}function pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,dt(o)&&(i[o]=r);return i}function vt(e){function t(e){return new Rn(S.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=S.parentNode(e);t&&S.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(dt(u)){e.elm=e.ns?S.createElementNS(e.ns,u):S.createElement(u,e),h(e);var f=i&&i.appendAsTree;f||(dt(i)&&d(e,t),c(n,e.elm,r)),l(e,s,t),f&&(dt(i)&&d(e,t),c(n,e.elm,r))}else e.isComment?(e.elm=S.createComment(e.text),c(n,e.elm,r)):(e.elm=S.createTextNode(e.text),c(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(dt(o)){var i=dt(e.child)&&o.keepAlive;if(dt(o=o.hook)&&dt(o=o.init)&&o(e,!1,n,r),dt(e.child))return p(e,t),i&&u(e,t,n,r),!0}}function u(e,t,n,r){for(var o,i=e;i.child;)if(i=i.child._vnode,dt(o=i.data)&&dt(o=o.transition)){for(o=0;o<x.activate.length;++o)x.activate[o](ir,i);t.push(i);break}c(n,e.elm,r)}function c(e,t,n){e&&(n?S.insertBefore(e,t,n):S.appendChild(e,t))}function l(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&S.appendChild(e.elm,S.createTextNode(e.text))}function f(e){for(;e.child;)e=e.child._vnode;return dt(e.tag)}function d(e,t){for(var n=0;n<x.create.length;++n)x.create[n](ir,e);k=e.data.hook,dt(k)&&(k.create&&k.create(ir,e),k.insert&&t.push(e))}function p(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,f(e)?(d(e,t),h(e)):(lt(e),t.push(e))}function h(e){var t;dt(t=e.context)&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,""),dt(t=qn)&&t!==e.context&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(dt(r))for(dt(t=r.hook)&&dt(t=t.destroy)&&t(e),t=0;t<x.destroy.length;++t)x.destroy[t](e);if(dt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];dt(i)&&(dt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||dt(e.data)){var o=x.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),dt(k=e.child)&&dt(k=k._vnode)&&dt(k.data)&&_(k,t),k=0;k<x.remove.length;++k)x.remove[k](e,t);dt(k=e.data.hook)&&dt(k=k.remove)?k(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(var a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)ft(p)?p=t[++l]:ft(h)?h=t[--d]:pt(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):pt(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):pt(p,g)?(b(p,g,r),w&&S.insertBefore(e,p.elm,S.nextSibling(h.elm)),p=t[++l],g=n[--m]):pt(h,_)?(b(h,_,r),w&&S.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(ft(a)&&(a=ht(t,l,d)),s=dt(_.key)?a[_.key]:null,ft(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],pt(u,_)?(b(u,_,r),t[s]=void 0,w&&S.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=ft(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.child=e.child);var o,i=t.data,a=dt(i);a&&dt(o=i.hook)&&dt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&f(t)){for(o=0;o<x.update.length;++o)x.update[o](e,t);dt(o=i.hook)&&dt(o=o.update)&&o(e,t)}ft(t.text)?dt(u)&&dt(c)?u!==c&&g(s,u,c,n,r):dt(c)?(dt(e.text)&&S.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):dt(u)?y(s,u,0,u.length-1):dt(e.text)&&S.setTextContent(s,""):e.text!==t.text&&S.setTextContent(s,t.text),a&&dt(o=i.hook)&&dt(o=o.postpatch)&&o(e,t)}}function w(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function C(e,t,n){t.elm=e;var r=t.tag,o=t.data,i=t.children;if(dt(o)&&(dt(k=o.hook)&&dt(k=k.init)&&k(t,!0),dt(k=t.child)))return p(t,n),!0;if(dt(r)){if(dt(i))if(e.hasChildNodes()){for(var a=!0,s=e.firstChild,u=0;u<i.length;u++){if(!s||!C(s,i[u],n)){a=!1;break}s=s.nextSibling}if(!a||s)return!1}else l(t,i,n);if(dt(o))for(var c in o)if(!j(c)){d(t,n);break}}else e.data!==t.text&&(e.data=t.text);return!0}var k,O,x={},E=e.modules,S=e.nodeOps;for(k=0;k<ar.length;++k)for(x[ar[k]]=[],O=0;O<E.length;++O)void 0!==E[O][ar[k]]&&x[ar[k]].push(E[O][ar[k]]);var j=o("attrs,style,class,staticClass,staticStyle,key");return function(e,n,r,o,a,s){if(!n)return void(e&&m(e));var u,c,l=!1,d=[];if(e){var p=dt(e.nodeType);if(!p&&pt(e,n))b(e,n,d,o);else{if(p){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&C(e,n,d))return w(n,d,!0),e;e=t(e)}if(u=e.elm,c=S.parentNode(u),i(n,d,c,S.nextSibling(u)),n.parent){for(var h=n.parent;h;)h.elm=n.elm,h=h.parent;if(f(n))for(var v=0;v<x.create.length;++v)x.create[v](ir,n.parent)}null!==c?y(c,[e],0,0):dt(e.tag)&&m(e)}}else l=!0,i(n,d,a,s);return w(n,d,l),n.elm}}function mt(e,t){(e.data.directives||t.data.directives)&&yt(e,t)}function yt(e,t){var n,r,o,i=e===ir,a=t===ir,s=_t(e.data.directives,e.context),u=_t(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,bt(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):(bt(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)bt(c[n],"inserted",t,e)};i?oe(t.data.hook||(t.data.hook={}),"insert",f,"dir-insert"):f()}if(l.length&&oe(t.data.hook||(t.data.hook={}),"postpatch",function(){for(var n=0;n<l.length;n++)bt(l[n],"componentUpdated",t,e)},"dir-postpatch"),!i)for(n in s)u[n]||bt(s[n],"unbind",e,e,a)}function _t(e,t){var n=Object.create(null);if(!e)return n;var r,o;for(r=0;r<e.length;r++)o=e[r],o.modifiers||(o.modifiers=ur),n[gt(o)]=o,o.def=F(t.$options,"directives",o.name,!0);return n}function gt(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function bt(e,t,n,r,o){var i=e.def&&e.def[t];i&&i(n.elm,e,n,r,o)}function wt(e,t){if(e.data.attrs||t.data.attrs){var n,r,o,i=t.elm,a=e.data.attrs||{},s=t.data.attrs||{};s.__ob__&&(s=t.data.attrs=f({},s));for(n in s)r=s[n],o=a[n],o!==r&&i.setAttr(n,r);for(n in a)null==s[n]&&i.setAttr(n)}}function Ct(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u=[],c=o.staticClass;c&&u.push.apply(u,c),o.class&&u.push.apply(u,o.class);var l=kt(a,u,r);for(var f in l)n.setStyle(f,l[f])}}function kt(e,t,n){var r=n.$options.style||{},o={};return t.forEach(function(e){var t=r[e];f(o,t)}),e.forEach(function(e){var t=r[e];for(var n in t)o.hasOwnProperty(n)||(o[n]="")}),o}function Ot(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};ie(n,r,function(e,n,r){return r?void console.log("Weex do not support event in bubble phase."):void t.elm.addEvent(e,n.bind(t.context))},function(e){t.elm.removeEvent(e)},t.context)}}function xt(e,t){if(!t.data.staticStyle)return void Et(e,t);var n=t.elm,r=t.data.staticStyle;for(var o in r)r[o]&&n.setStyle(pr(o),r[o]);Et(e,t)}function Et(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=St(a)),s&&(a=t.data.style=f({},a));for(r in i)a[r]||o.setStyle(pr(r),"");for(r in a)n=a[r],o.setStyle(pr(r),n)}}function St(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function jt(){}function It(){}function At(e,t){var n=new tr.Comment("root");return n.hasAttribute=n.removeAttribute=function(){},t.documentElement.appendChild(n),n}function Tt(e){tr.Document=e.Document,tr.Element=e.Element,tr.Comment=e.Comment,tr.sendTasks=e.sendTasks}function Nt(){Rt(wr),Rt(Cr),Rt(kr),delete tr.Document,delete tr.Element,delete tr.Comment,delete tr.sendTasks,Be.config.isReservedTag=Or}function Rt(e){for(var t in e)delete e[t]}function Dt(e,t,n,r,o){void 0===t&&(t=""),void 0===n&&(n={}),void 0===o&&(o={}),br=e;var i=new tr.Document(e,n.bundleUrl),a=[],s=1;wr[e]={instanceId:e,config:n,data:r,document:i,callbacks:a,callbackId:s};var u=Vt(e),c=Ut(e,u),l={config:n,document:i,requireModule:u};Object.freeze(l);var f=Be.extend({});f.options._base=f,["util","set","delete","nextTick","version","weexVersion","config"].forEach(function(e){f[e]=Be[e]});var d=Object.assign({Vue:f,weex:l,__weex_require_module__:l.require},c);Jt(d,t),tr.sendTasks(e+"",[{module:"dom",method:"createFinish",args:[]}],-1)}function $t(e){var t=wr[e]||{};t.app instanceof Be&&t.app.$destroy(),delete wr[e]}function Pt(e,t){var n=wr[e]||{};if(!(n.app instanceof Be))return new Error("refreshInstance: instance "+e+" not found!");for(var r in t)Be.set(n.app,r,t[r]);
-tr.sendTasks(e+"",[{module:"dom",method:"refreshFinish",args:[]}],-1)}function Mt(e){var t=wr[e]||{};return t.app instanceof Be?t.app.$el.toJSON():new Error("getRoot: instance "+e+" not found!")}function Ft(e,t){var n=wr[e]||{};if(!(n.app instanceof Be))return new Error("receiveTasks: instance "+e+" not found!");var r=n.callbacks,o=n.document;t.forEach(function(e){if("fireEvent"===e.method){var t=e.args,n=t[0],i=t[1],a=t[2],s=t[3],u=o.getRef(n);o.fireEvent(u,i,a,s)}if("callback"===e.method){var c=e.args,l=c[0],f=c[1],d=c[2],p=r[l];"function"==typeof p&&(p(f),"undefined"!=typeof d&&d!==!1||(r[l]=void 0))}}),tr.sendTasks(e+"",[{module:"dom",method:"updateFinish",args:[]}],-1)}function qt(e){var t=function(t){Cr[t]||(Cr[t]={}),e[t].forEach(function(e){"string"==typeof e?Cr[t][e]=!0:Cr[t][e.name]=e.args})};for(var n in e)t(n)}function Lt(e){var t=Be.config,n={};if(Array.isArray(e)){e.forEach(function(e){e&&("string"==typeof e?(kr[e]=!0,n[e]=!0):"object"==typeof e&&"string"==typeof e.type&&(kr[e.type]=e,n[e.type]=!0))});var r=t.isReservedTag;t.isReservedTag=function(e){return n[e]||r(e)}}}function Vt(e){var t=wr[e];return function(n){var r=Cr[n]||[],o={},i=function(r){o[r]=function(){for(var o=arguments,i=[],a=arguments.length;a--;)i[a]=o[a];var s=i.map(function(e){return Bt(e,t)});tr.sendTasks(e+"",[{module:n,method:r,args:s}],-1)}};for(var a in r)i(a);return o}}function Ut(e,t){var n=wr[e],r=t("timer"),o={setTimeout:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setTimeout(i,t[1]),n.callbackId.toString()},setInterval:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setInterval(i,t[1]),n.callbackId.toString()},clearTimeout:function(e){r.clearTimeout(e)},clearInterval:function(e){r.clearInterval(e)}};return o}function Jt(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function Bt(e,t){var n=Wt(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof tr.Element?e.ref:e;case"function":return t.callbacks[++t.callbackId]=e,t.callbackId.toString();default:return JSON.stringify(e)}}function Wt(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}Object.defineProperty(t,"__esModule",{value:!0});var zt,Ht,Gt=o("slot,component",!0),Xt=Object.prototype.hasOwnProperty,Kt=/-(\w)/g,Qt=u(function(e){return e.replace(Kt,function(e,t){return t?t.toUpperCase():""})}),Zt=u(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),Yt=/([^-])([A-Z])/g,en=u(function(e){return e.replace(Yt,"$1-$2").replace(Yt,"$1-$2").toLowerCase()}),tn=Object.prototype.toString,nn="[object Object]",rn=function(){return!1},on=function(e){return e},an={optionMergeStrategies:Object.create(null),silent:!1,devtools:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:rn,isUnknownElement:rn,getTagNamespace:v,parsePlatformTagName:on,mustUseProp:rn,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100},sn=/[^\w.$]/,un="__proto__"in{},cn="undefined"!=typeof window,ln=cn&&window.navigator.userAgent.toLowerCase(),fn=ln&&/msie|trident/.test(ln),dn=ln&&ln.indexOf("msie 9.0")>0,pn=ln&&ln.indexOf("edge/")>0,hn=ln&&ln.indexOf("android")>0,vn=ln&&/iphone|ipad|ipod|ios/.test(ln),mn=function(){return void 0===zt&&(zt=!cn&&"undefined"!=typeof Wn&&"server"===Wn.process.env.VUE_ENV),zt},yn=cn&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,_n=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&C(Promise)){var o=Promise.resolve(),i=function(e){console.error(e)};t=function(){o.then(e).catch(i),vn&&setTimeout(v)}}else if("undefined"==typeof MutationObserver||!C(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var a=1,s=new MutationObserver(e),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),t=function(){a=(a+1)%2,u.data=String(a)}}return function(e,o){var i;if(n.push(function(){e&&e.call(o),i&&i(o)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){i=e})}}();Ht="undefined"!=typeof Set&&C(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return this.set[e]===!0},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var gn,bn=v,wn=0,Cn=function(){this.id=wn++,this.subs=[]};Cn.prototype.addSub=function(e){this.subs.push(e)},Cn.prototype.removeSub=function(e){i(this.subs,e)},Cn.prototype.depend=function(){Cn.target&&Cn.target.addDep(this)},Cn.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},Cn.target=null;var kn=[],On=Array.prototype,xn=Object.create(On);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=On[e];b(xn,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":i=o;break;case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var En=Object.getOwnPropertyNames(xn),Sn={shouldConvert:!0,isSettingProps:!1},jn=function(e){if(this.value=e,this.dep=new Cn,this.vmCount=0,b(e,"__ob__",this),Array.isArray(e)){var t=un?x:E;t(e,xn,En),this.observeArray(e)}else this.walk(e)};jn.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)j(e,t[n],e[t[n]])},jn.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)S(e[t])};var In=an.optionMergeStrategies;In.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,o="function"==typeof e?e.call(n):void 0;return r?N(r,o):o}:void 0:t?"function"!=typeof t?e:e?function(){return N(t.call(this),e.call(this))}:t:e},an._lifecycleHooks.forEach(function(e){In[e]=R}),an._assetTypes.forEach(function(e){In[e+"s"]=D}),In.watch=function(e,t){if(!t)return e;if(!e)return t;var n={};f(n,e);for(var r in t){var o=n[r],i=t[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):[i]}return n},In.props=In.methods=In.computed=function(e,t){if(!t)return e;if(!e)return t;var n=Object.create(null);return f(n,e),f(n,t),n};var An,Tn=function(e,t){return void 0===t?e:t},Nn=Object.freeze({defineReactive:j,_toString:n,toNumber:r,makeMap:o,isBuiltInTag:Gt,remove:i,hasOwn:a,isPrimitive:s,cached:u,camelize:Qt,capitalize:Zt,hyphenate:en,bind:c,toArray:l,extend:f,isObject:d,isPlainObject:p,toObject:h,noop:v,no:rn,identity:on,genStaticKeys:m,looseEqual:y,looseIndexOf:_,isReserved:g,def:b,parsePath:w,hasProto:un,inBrowser:cn,UA:ln,isIE:fn,isIE9:dn,isEdge:pn,isAndroid:hn,isIOS:vn,isServerRendering:mn,devtools:yn,nextTick:_n,get _Set(){return Ht},mergeOptions:M,resolveAsset:F,get warn(){return bn},get formatComponentName(){return gn},validateProp:q}),Rn=function(e,t,n,r,o,i,a){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=a,this.child=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},Dn=function(){var e=new Rn;return e.text="",e.isComment=!0,e},$n={init:X,prepatch:K,insert:Q,destroy:Z},Pn=Object.keys($n),Mn=1,Fn=2,qn=null,Ln=[],Vn={},Un=!1,Jn=!1,Bn=0,zn=0,Hn=function(e,t,n,r){this.vm=e,e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++zn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Ht,this.newDepIds=new Ht,this.expression="","function"==typeof t?this.getter=t:(this.getter=w(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Hn.prototype.get=function(){k(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&Ie(e),O(),this.cleanupDeps(),e},Hn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Hn.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Hn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Hn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||d(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){if(!an.errorHandler)throw e;an.errorHandler.call(null,e,this.vm)}else this.cb.call(this.vm,e,t)}}},Hn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Hn.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Hn.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||i(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Gn=new Ht,Xn={enumerable:!0,configurable:!0,get:v,set:v},Kn=0;Ve(Be),qe(Be),Ce(Be),Oe(Be),me(Be);var Qn=[String,RegExp],Zn={name:"keep-alive",abstract:!0,props:{include:Qn,exclude:Qn},created:function(){this.cache=Object.create(null)},render:function(){var e=fe(this.$slots.default);if(e&&e.componentOptions){var t=e.componentOptions,n=t.Ctor.options.name||t.tag;if(n&&(this.include&&!Xe(this.include,n)||this.exclude&&Xe(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.child=this.cache[r].child:this.cache[r]=e,e.data.keepAlive=!0}return e},destroyed:function(){var e=this;for(var t in this.cache){var n=e.cache[t];xe(n.child,"deactivated"),n.child.$destroy()}}},Yn={KeepAlive:Zn};Ke(Be),Object.defineProperty(Be.prototype,"$isServer",{get:mn}),Be.version="2.1.8";var er=1,tr={TextNode:Qe,instances:{},modules:{},components:{}},nr={},rr=Object.freeze({namespaceMap:nr,createElement:Ze,createElementNS:Ye,createTextNode:et,createComment:tt,insertBefore:nt,removeChild:rt,appendChild:ot,parentNode:it,nextSibling:at,tagName:st,setTextContent:ut,setAttribute:ct}),or={create:function(e,t){lt(t)},update:function(e,t){e.data.ref!==t.data.ref&&(lt(e,!0),lt(t))},destroy:function(e){lt(e,!0)}},ir=new Rn("",{},[]),ar=["create","activate","update","remove","destroy"],sr={create:mt,update:mt,destroy:function(e){mt(e,ir)}},ur=Object.create(null),cr=[or,sr],lr={create:wt,update:wt},fr={create:Ct,update:Ct},dr={create:Ot,update:Ot},pr=u(Qt),hr={create:xt,update:Et},vr=[lr,fr,dr,hr],mr=vr.concat(cr),yr=vt({nodeOps:rr,modules:mr,LONG_LIST_THRESHOLD:10}),_r={},gr=o("div,img,image,input,switch,indicator,list,scroller,cell,template,text,slider,image");Be.config.isUnknownElement=It,Be.config.isReservedTag=gr,Be.config.mustUseProp=jt,Be.options.directives=_r,Be.prototype.__patch__=yr,Be.prototype.$mount=function(e,t){return this._mount(e&&At(e,this.$document),t)},Be.weexVersion="2.1.8-weex.1";var br,wr=tr.instances,Cr=tr.modules,kr=tr.components,Or=Be&&Be.config&&"function"==typeof Be.config.isReservedTag?Be.config.isReservedTag:function(){};Be.mixin({beforeCreate:function(){var e=this.$options,t=e.parent&&e.parent.$options||{};if(e.el){var n=wr[br]||{};this.$instanceId=br,e.instanceId=br,this.$document=n.document;var r=e.data,o=("function"==typeof r?r():r)||{};e.data=Object.assign(o,n.data),n.app=this,br=void 0}else this.$instanceId=e.instanceId=t.instanceId}}),Be.prototype.$getConfig=function(){var e=wr[this.$instanceId]||{};if(e.app instanceof Be)return e.config},t.Vue=Be,t.init=Tt,t.reset=Nt,t.createInstance=Dt,t.destroyInstance=$t,t.refreshInstance=Pt,t.getRoot=Mt,t.receiveTasks=Ft,t.registerModules=qt,t.registerComponents=Lt}),ku=e(Cu),Ou=Cu.registerComponents,xu=Cu.registerModules,Eu=Cu.receiveTasks,Su=Cu.getRoot,ju=Cu.refreshInstance,Iu=Cu.destroyInstance,Au=Cu.createInstance,Tu=Cu.reset,Nu=Cu.init,Ru=Cu.Vue,Du=Object.freeze({default:ku,__moduleExports:Cu,registerComponents:Ou,registerModules:xu,receiveTasks:Eu,getRoot:Su,refreshInstance:ju,destroyInstance:Iu,createInstance:Au,reset:Tu,init:Nu,Vue:Ru}),$u=Object.freeze({$:se,$el:ue,$vm:ce,$renderThen:le,$scrollTo:fe,$transition:de,$getConfig:pe,$sendHttp:he,$openURL:ve,$setTitle:me,$call:ye}),Pu=Object.prototype.hasOwnProperty,Mu=Object.prototype.toString,Fu="[object Object]",qu="__proto__"in{};"undefined"!=typeof Set&&Set.toString().match(/native code/)?au=Set:(au=function(){this.set=Object.create(null)},au.prototype.has=function(e){return void 0!==this.set[e]},au.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},au.prototype.clear=function(){this.set=Object.create(null)});var Lu=/^@weex-component\//,Vu=/^@weex-module\//,Uu=/^\.{1,2}\//,Ju=/\.js$/,Bu=function(e){return!!e.match(Lu)},Wu=function(e){return!!e.match(Vu)},zu=function(e){return!!e.match(Uu)},Hu=function(e){return!Bu(e)&&!Wu(e)&&!zu(e)},Gu=0;Ae.target=null;var Xu=[];Ae.prototype.addSub=function(e){this.subs.push(e)},Ae.prototype.removeSub=function(e){be(this.subs,e)},Ae.prototype.depend=function(){Ae.target&&Ae.target.addDep(this)},Ae.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var Ku=0;De.prototype.get=function(){Te(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&$e(e),Ne(),this.cleanupDeps(),e},De.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},De.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},De.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},De.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(ke(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},De.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},De.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},De.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||be(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1,this.vm=this.cb=this.value=null}};var Qu=Ee(),Zu=Array.prototype,Yu=Object.create(Zu);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=Zu[e];ge(Yu,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":i=o;break;case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})}),ge(Zu,"$set",function(e,t){return e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),ge(Zu,"$remove",function(e){this.length&&("number"!=typeof e&&(e=this.indexOf(e)),e>-1&&this.splice(e,1))});var ec=Object.getOwnPropertyNames(Yu);Pe.prototype.walk=function(e){var t=this;for(var n in e)t.convert(n,e[n])},Pe.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)qe(e[t])},Pe.prototype.convert=function(e,t){Le(this.value,e,t)},Pe.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},Pe.prototype.removeVm=function(e){be(this.vms,e)};var tc=["$index","$value","$event"],nc={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},rc=nc.nativeComponentMap,oc={attr:"setAttr",style:"setStyle",event:"addEvent"},ic=1,ac=["init","created","ready","destroyed"];Zt(Yt.prototype),Yt.prototype.$watch=function(e,t){pt(this,e,t)},Yt.set=Ve,Yt.delete=Ue;var sc={},uc=t(function(e,t){function n(e,t){if(e instanceof i)return e;if("string"!=typeof e)return null;if(e.length>G)return null;var n=t?K[pe]:K[le];if(!n.test(e))return null;try{return new i(e,t)}catch(e){return null}}function r(e,t){var r=n(e,t);return r?r.version:null}function o(e,t){var r=n(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null}function i(e,t){if(e instanceof i){if(e.loose===t)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>G)throw new TypeError("version is longer than "+G+" characters");if(!(this instanceof i))return new i(e,t);H("SemVer",e,t),this.loose=t;var n=e.trim().match(t?K[pe]:K[le]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>X||this.major<0)throw new TypeError("Invalid major version");if(this.minor>X||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>X||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<X)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}function a(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new i(e,n).inc(t,r).version}catch(e){return null}}function s(e,t){if(b(e,t))return null;var r=n(e),o=n(t);if(r.prerelease.length||o.prerelease.length){for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return"pre"+i;return"prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return i}function u(e,t){var n=qe.test(e),r=qe.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function c(e,t){return u(t,e)}function l(e,t){return new i(e,t).major}function f(e,t){return new i(e,t).minor}function d(e,t){return new i(e,t).patch}function p(e,t,n){return new i(e,n).compare(t)}function h(e,t){return p(e,t,!0)}function v(e,t,n){return p(t,e,n)}function m(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})}function y(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})}function _(e,t,n){return p(e,t,n)>0}function g(e,t,n){return p(e,t,n)<0}function b(e,t,n){return 0===p(e,t,n)}function w(e,t,n){return 0!==p(e,t,n)}function C(e,t,n){return p(e,t,n)>=0}function k(e,t,n){return p(e,t,n)<=0}function O(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=b(e,n,r);break;case"!=":o=w(e,n,r);break;case">":o=_(e,n,r);break;case">=":o=C(e,n,r);break;case"<":o=g(e,n,r);break;case"<=":o=k(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function x(e,t){if(e instanceof x){if(e.loose===t)return e;e=e.value}return this instanceof x?(H("comparator",e,t),this.loose=t,this.parse(e),this.semver===Le?this.value="":this.value=this.operator+this.semver.version,void H("comp",this)):new x(e,t)}function E(e,t){if(e instanceof E&&e.loose===t)return e;if(!(this instanceof E))return new E(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function S(e,t){return new E(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function j(e,t){return H("comp",e),e=N(e,t),H("caret",e),e=A(e,t),H("tildes",e),e=D(e,t),H("xrange",e),e=P(e,t),H("stars",e),e}function I(e){return!e||"x"===e.toLowerCase()||"*"===e}function A(e,t){return e.trim().split(/\s+/).map(function(e){return T(e,t)}).join(" ")}function T(e,t){var n=t?K[xe]:K[Oe];return e.replace(n,function(t,n,r,o,i){H("tilde",e,t,n,r,o,i);var a;return I(n)?a="":I(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":I(o)?a=">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":i?(H("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),a=">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0"):a=">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0",H("tilde return",a),a})}function N(e,t){return e.trim().split(/\s+/).map(function(e){return R(e,t)}).join(" ")}function R(e,t){H("caret",e,t);var n=t?K[Ae]:K[Ie];return e.replace(n,function(t,n,r,o,i){H("caret",e,t,n,r,o,i);var a;return I(n)?a="":I(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":I(o)?a="0"===n?">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":">="+n+"."+r+".0 <"+(+n+1)+".0.0":i?(H("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),a="0"===n?"0"===r?">="+n+"."+r+"."+o+i+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+i+" <"+(+n+1)+".0.0"):(H("no pr"),a="0"===n?"0"===r?">="+n+"."+r+"."+o+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+" <"+(+n+1)+".0.0"),H("caret return",a),a})}function D(e,t){return H("replaceXRanges",e,t),e.split(/\s+/).map(function(e){return $(e,t)}).join(" ")}function $(e,t){e=e.trim();var n=t?K[be]:K[ge];return e.replace(n,function(t,n,r,o,i,a){H("xRange",e,t,n,r,o,i,a);var s=I(r),u=s||I(o),c=u||I(i),l=c;return"="===n&&l&&(n=""),s?t=">"===n||"<"===n?"<0.0.0":"*":n&&l?(u&&(o=0),c&&(i=0),">"===n?(n=">=",u?(r=+r+1,o=0,i=0):c&&(o=+o+1,i=0)):"<="===n&&(n="<",u?r=+r+1:o=+o+1),t=n+r+"."+o+"."+i):u?t=">="+r+".0.0 <"+(+r+1)+".0.0":c&&(t=">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0"),H("xRange return",t),t})}function P(e,t){return H("replaceStars",e,t),e.trim().replace(K[Me],"")}function M(e,t,n,r,o,i,a,s,u,c,l,f,d){return t=I(n)?"":I(r)?">="+n+".0.0":I(o)?">="+n+"."+r+".0":">="+t,s=I(u)?"":I(c)?"<"+(+u+1)+".0.0":I(l)?"<"+u+"."+(+c+1)+".0":f?"<="+u+"."+c+"."+l+"-"+f:"<="+s,(t+" "+s).trim()}function F(e,t){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length){for(var n=0;n<e.length;n++)if(H(e[n].semver),e[n].semver!==Le&&e[n].semver.prerelease.length>0){var r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}function q(e,t,n){try{t=new E(t,n)}catch(e){return!1}return t.test(e)}function L(e,t,n){return e.filter(function(e){return q(e,t,n)}).sort(function(e,t){return v(e,t,n)})[0]||null}function V(e,t,n){return e.filter(function(e){return q(e,t,n)}).sort(function(e,t){return p(e,t,n)})[0]||null}function U(e,t){try{return new E(e,t).range||"*"}catch(e){return null}}function J(e,t,n){return W(e,t,"<",n)}function B(e,t,n){return W(e,t,">",n)}function W(e,t,n,r){e=new i(e,r),t=new E(t,r);var o,a,s,u,c;switch(n){case">":o=_,a=k,s=g,u=">",c=">=";break;case"<":o=g,a=C,s=_,u="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(q(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var f=t.set[l],d=null,p=null;if(f.forEach(function(e){e.semver===Le&&(e=new x(">=0.0.0")),d=d||e,p=p||e,o(e.semver,d.semver,r)?d=e:s(e.semver,p.semver,r)&&(p=e)}),d.operator===u||d.operator===c)return!1;if((!p.operator||p.operator===u)&&a(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}function z(e,t){var r=n(e,t);return r&&r.prerelease.length?r.prerelease:null}t=e.exports=i;var H;"object"==typeof process&&process.env,H=function(){},t.SEMVER_SPEC_VERSION="2.0.0";var G=256,X=Number.MAX_SAFE_INTEGER||9007199254740991,K=t.re=[],Q=t.src=[],Z=0,Y=Z++;Q[Y]="0|[1-9]\\d*";var ee=Z++;Q[ee]="[0-9]+";var te=Z++;Q[te]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var ne=Z++;Q[ne]="("+Q[Y]+")\\.("+Q[Y]+")\\.("+Q[Y]+")";var re=Z++;Q[re]="("+Q[ee]+")\\.("+Q[ee]+")\\.("+Q[ee]+")";var oe=Z++;Q[oe]="(?:"+Q[Y]+"|"+Q[te]+")";var ie=Z++;Q[ie]="(?:"+Q[ee]+"|"+Q[te]+")";var ae=Z++;Q[ae]="(?:-("+Q[oe]+"(?:\\."+Q[oe]+")*))";var se=Z++;Q[se]="(?:-?("+Q[ie]+"(?:\\."+Q[ie]+")*))";var ue=Z++;Q[ue]="[0-9A-Za-z-]+";var ce=Z++;Q[ce]="(?:\\+("+Q[ue]+"(?:\\."+Q[ue]+")*))";var le=Z++,fe="v?"+Q[ne]+Q[ae]+"?"+Q[ce]+"?";Q[le]="^"+fe+"$";var de="[v=\\s]*"+Q[re]+Q[se]+"?"+Q[ce]+"?",pe=Z++;Q[pe]="^"+de+"$";var he=Z++;Q[he]="((?:<|>)?=?)";var ve=Z++;Q[ve]=Q[ee]+"|x|X|\\*";var me=Z++;Q[me]=Q[Y]+"|x|X|\\*";var ye=Z++;Q[ye]="[v=\\s]*("+Q[me]+")(?:\\.("+Q[me]+")(?:\\.("+Q[me]+")(?:"+Q[ae]+")?"+Q[ce]+"?)?)?";var _e=Z++;Q[_e]="[v=\\s]*("+Q[ve]+")(?:\\.("+Q[ve]+")(?:\\.("+Q[ve]+")(?:"+Q[se]+")?"+Q[ce]+"?)?)?";var ge=Z++;Q[ge]="^"+Q[he]+"\\s*"+Q[ye]+"$";var be=Z++;Q[be]="^"+Q[he]+"\\s*"+Q[_e]+"$";var we=Z++;Q[we]="(?:~>?)";var Ce=Z++;Q[Ce]="(\\s*)"+Q[we]+"\\s+",K[Ce]=new RegExp(Q[Ce],"g");var ke="$1~",Oe=Z++;Q[Oe]="^"+Q[we]+Q[ye]+"$";var xe=Z++;Q[xe]="^"+Q[we]+Q[_e]+"$";var Ee=Z++;Q[Ee]="(?:\\^)";var Se=Z++;Q[Se]="(\\s*)"+Q[Ee]+"\\s+",K[Se]=new RegExp(Q[Se],"g");var je="$1^",Ie=Z++;Q[Ie]="^"+Q[Ee]+Q[ye]+"$";var Ae=Z++;Q[Ae]="^"+Q[Ee]+Q[_e]+"$";var Te=Z++;Q[Te]="^"+Q[he]+"\\s*("+de+")$|^$";var Ne=Z++;Q[Ne]="^"+Q[he]+"\\s*("+fe+")$|^$";var Re=Z++;Q[Re]="(\\s*)"+Q[he]+"\\s*("+de+"|"+Q[ye]+")",K[Re]=new RegExp(Q[Re],"g");var De="$1$2$3",$e=Z++;Q[$e]="^\\s*("+Q[ye]+")\\s+-\\s+("+Q[ye]+")\\s*$";var Pe=Z++;Q[Pe]="^\\s*("+Q[_e]+")\\s+-\\s+("+Q[_e]+")\\s*$";var Me=Z++;Q[Me]="(<|>)?=?\\s*\\*";for(var Fe=0;Fe<Z;Fe++)H(Fe,Q[Fe]),K[Fe]||(K[Fe]=new RegExp(Q[Fe]));t.parse=n,t.valid=r,t.clean=o,t.SemVer=i,i.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},i.prototype.toString=function(){return this.version},i.prototype.compare=function(e){return H("SemVer.compare",this.version,this.loose,e),e instanceof i||(e=new i(e,this.loose)),this.compareMain(e)||this.comparePre(e)},i.prototype.compareMain=function(e){return e instanceof i||(e=new i(e,this.loose)),u(this.major,e.major)||u(this.minor,e.minor)||u(this.patch,e.patch)},i.prototype.comparePre=function(e){var t=this;if(e instanceof i||(e=new i(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var n=0;do{var r=t.prerelease[n],o=e.prerelease[n];if(H("prerelease compare",n,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return u(r,o)}while(++n)},i.prototype.inc=function(e,t){var n=this;switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof n.prerelease[r]&&(n.prerelease[r]++,r=-2);r===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=a,t.diff=s,t.compareIdentifiers=u;var qe=/^[0-9]+$/;t.rcompareIdentifiers=c,t.major=l,t.minor=f,t.patch=d,t.compare=p,t.compareLoose=h,t.rcompare=v,t.sort=m,t.rsort=y,t.gt=_,t.lt=g,t.eq=b,t.neq=w,t.gte=C,t.lte=k,t.cmp=O,t.Comparator=x;var Le={};x.prototype.parse=function(e){var t=this.loose?K[Te]:K[Ne],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new i(n[2],this.loose):this.semver=Le},x.prototype.toString=function(){return this.value},x.prototype.test=function(e){return H("Comparator.test",e,this.loose),this.semver===Le||("string"==typeof e&&(e=new i(e,this.loose)),O(e,this.operator,this.semver,this.loose))},t.Range=E,E.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},E.prototype.toString=function(){return this.range},E.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),H("range",e,t);var n=t?K[Pe]:K[$e];e=e.replace(n,M),H("hyphen replace",e),e=e.replace(K[Re],De),H("comparator trim",e,K[Re]),e=e.replace(K[Ce],ke),e=e.replace(K[Se],je),e=e.split(/\s+/).join(" ");var r=t?K[Te]:K[Ne],o=e.split(" ").map(function(e){return j(e,t)}).join(" ").split(/\s+/);return this.loose&&(o=o.filter(function(e){return!!e.match(r)})),o=o.map(function(e){return new x(e,t)})},t.toComparators=S,E.prototype.test=function(e){var t=this;if(!e)return!1;"string"==typeof e&&(e=new i(e,this.loose));for(var n=0;n<this.set.length;n++)if(F(t.set[n],e))return!0;return!1},t.satisfies=q,t.maxSatisfying=L,t.minSatisfying=V,t.validRange=U,t.ltr=J,t.gtr=B,t.outside=W,t.prerelease=z}),cc=function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.debug("[JS Framework] define a component "+t);var o,i;if(i=n.length>1?n[1]:n[0],"function"==typeof i&&(o=i,i=null),o){var a=function(t){if(Bu(t)){var n=je(t);return rn(e,n)}if(Wu(t)){var r=je(t);return e.requireModule(r)}if(zu(t)||Hu(t)){var o=Ie(t);return e.commonModules[o]}},s={exports:{}};o(a,s.exports,s),i=s.exports}if(Bu(t)){var u=je(t);on(e,u,i)}else if(Wu(t)){var c,l=je(t);en((c={},c[l]=i,c))}else if(zu(t)){var f=Ie(t);e.commonModules[f]=i}else if(Hu(t)){var d=Ie(t);i.template||i.style||i.methods?on(e,d,i):e.commonModules[d]=i}},lc=function(e){this.id=e,this.map=[],this.hooks=[]};lc.prototype.isEmpty=function(){return 0===this.map.length},lc.prototype.append=function(e,t,n,r){var o=this;this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},lc.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){kn(e,"repeat"),kn(e,"shown"),On(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},lc.prototype.then=function(e){this.hooks.push(e)},xn.prototype.requireModule=function(e){return nn(this,e)},xn.prototype.updateActions=function(){return _n(this)},xn.prototype.callTasks=function(e){return gn(this,e)},Object.freeze(xn),Object.freeze(xn.prototype);var fc={},dc=nc.nativeComponentMap;global.registerMethods=Nn;var pc={fireEvent:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return mn.apply(void 0,[fc[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return yn.apply(void 0,[fc[e]].concat(t))}};Nn($u),Object.freeze(Yt);var hc=Object.freeze({registerComponents:An,registerModules:Tn,registerMethods:Nn,createInstance:En,init:Sn,refreshInstance:jn,destroyInstance:In,receiveTasks:Rn,getRoot:Dn}),vc=t(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n;for(var r in L)L.hasOwnProperty(r)&&(n=L[r],"*"!==t&&t!==n.origin||(e.target=n.window,n.window.dispatchEvent(e)))}function i(e){var t=L[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}function a(e){I=e.Document,A=e.Element,T=e.Comment,N=e.Listener,R=e.TaskCenter,D=e.CallbackManager,$=e.sendTasks}function s(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?S[e]=!0:"object"===("undefined"==typeof e?"undefined":k(e))&&"string"==typeof e.type&&(S[e.type]=e))})}function u(e){}function c(e){
-if("object"===("undefined"==typeof e?"undefined":k(e)))for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(j[t]=e[t])}function l(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1};return e}function f(e,t){if("object"===("undefined"==typeof j?"undefined":k(j))){var n=function(n){var r=P+n;e[r]={module:{exports:{}},isInitialized:!0},j[n].forEach(function(o){"string"==typeof o&&(o={name:o});var a=o.name;e[r].module.exports[a]=function(){for(var e=arguments,r=arguments.length,o=Array(r),s=0;s<r;s++)o[s]=e[s];var u=[];o.forEach(function(e,n){var r=o[n];u[n]=g(r,i(t))}),$(String(t),[{module:n,method:a,args:u}],"-1")}})};for(var r in j)n(r)}return e}function d(e,t,r,i,a){var s=L[e];if(void 0!=s)throw new Error('Instance id "'+e+'" existed when create instance');!function(){var u="object"===("undefined"==typeof WXEnvironment?"undefined":k(WXEnvironment))&&WXEnvironment||{},c=n(4)(),d=n(5)(),p=n(6)(),h=n(7)(),v=new I(e,r.bundleUrl,null,N),m=new d(v.URL),y={};s=L[e]={document:v,instanceId:e,modules:y,origin:m.origin,callbacks:[],uid:0},f(y,e);var _=n(8)(y),g=n(9)(y),b=n(10)(g);v.fonts={add:function(e){var t=g(F);t.addRule("fontFace",{fontFamily:e.family,src:e.source})}};var w=n(12)(g,c),x=w.fetch,S=w.Headers,j=w.Request,A=w.Response,T=n(13)(g,s),R=T.setTimeout,D=T.clearTimeout,$=T.setInterval,P=T.clearInterval,V=T.requestAnimationFrame,U=T.cancelAnimationFrame,J=new E.default,B={Promise:c,document:v,location:m,navigator:{product:"Weex",platform:u.platform,appName:u.appName,appVersion:u.appVersion},screen:{width:u.deviceWidth,height:u.deviceHeight,availWidth:u.deviceWidth,availHeight:u.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:u.scale,fetch:x,Headers:S,Response:A,Request:j,URL:d,URLSearchParams:p,FontFace:h,setTimeout:R,clearTimeout:D,setInterval:$,clearInterval:P,requestAnimationFrame:V,cancelAnimationFrame:U,alert:function(e){var t=g(M);t.alert({message:e},function(){})},open:function(e){var t=g(q);t.push({url:e,animated:"true"},function(e){})},postMessage:function(e,t){var n={origin:m.origin,data:JSON.parse(JSON.stringify(e)),type:"message",source:B};o(n,t)},addEventListener:function(e,t){J.on(e,t)},removeEventListener:function(e,t){J.off(e,t)},dispatchEvent:function(e){J.emit(e.type,e)},define:_,require:g,__weex_document__:v,__weex_define__:_,__weex_require__:g,__weex_downgrade__:b,__weex_env__:u,__weex_code__:t,__weex_options__:r,__weex_data__:i};s.window=B.self=B.window=B;var W={},z={};try{W=a.services.builtinGlobals,z=a.services.builtinModules}catch(e){}Object.assign(B,W);var H=C({},O.ModuleFactories,z);if(l(y,H,B),"Web"!==u.platform){var G=new Function('with (this) { (function(){ "use strict";'+t+"}).call(this); }");G.call(B)}else{var X=new Function('"use strict";'+t);X.call(B)}}()}function p(e,t){var n=i(e),r=n.document;r.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),r.listener.refreshFinish()}function h(e){var t=i(e),n=t.document;n.documentElement.fireEvent("destory",{timestamp:Date.now()}),n.destroy&&n.destroy(),delete L[e]}function v(e){var t=i(e),n=t.document;return n.toJSON?n.toJSON():{}}function m(e,t,n,r,o){if(Array.isArray(t))return void t.some(function(t){return m(e,t,n,r)!==!1});var i=e.getRef(t);if(i){var a=e.fireEvent(i,n,r,o);return e.listener.updateFinish(),a}return new Error('Invalid element reference "'+t+'"')}function y(e,t,n,r,o){var i=t[n];return"function"==typeof i?(i(r),"undefined"!=typeof o&&o!==!1||(t[n]=null),void e.listener.updateFinish()):new Error('Invalid callback id "'+n+'"')}function _(e,t){var n=i(e);if(Array.isArray(t)){var r=function(){var e=n.callbacks,r=n.document,o=[];return t.forEach(function(t){var n=void 0;if("fireEvent"===t.method){var i=w(t.args,4),a=i[0],s=i[1],u=i[2],c=i[3];n=m(r,a,s,u,c)}else if("callback"===t.method){var l=w(t.args,3),f=l[0],d=l[1],p=l[2];n=y(r,e,f,d,p)}o.push(n)}),{v:o}}();if("object"===("undefined"==typeof r?"undefined":k(r)))return r.v}}function g(e,t){var n=b(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof A?e.ref:e;case"function":return t.callbacks[++t.uid]=e,t.uid.toString();default:return JSON.stringify(e)}}function b(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}Object.defineProperty(t,"__esModule",{value:!0});var w=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),C=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getInstance=i,t.init=a,t.registerComponents=s,t.registerMethods=u,t.registerModules=c,t.createInstance=d,t.refreshInstance=p,t.destroyInstance=h,t.getRoot=v,t.receiveTasks=_;var O=n(1),x=n(3),E=r(x),S={},j={},I=void 0,A=void 0,T=void 0,N=void 0,R=void 0,D=void 0,$=void 0,P="@weex-module/",M=P+"modal",F=P+"dom",q=P+"navigator",L={};t.default=t},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(2)}},function(e,t){e.exports=function(e,t,n){var r=this.__weex_document__,o=this.document;n.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getDriver=t.setDriver=t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0;var r=n(1);Object.defineProperty(t,"createElement",{enumerable:!0,get:function(){return r.createElement}}),Object.defineProperty(t,"cloneElement",{enumerable:!0,get:function(){return r.cloneElement}}),Object.defineProperty(t,"isValidElement",{enumerable:!0,get:function(){return r.isValidElement}}),Object.defineProperty(t,"createFactory",{enumerable:!0,get:function(){return r.createFactory}});var o=n(5);Object.defineProperty(t,"setDriver",{enumerable:!0,get:function(){return o.setDriver}}),Object.defineProperty(t,"getDriver",{enumerable:!0,get:function(){return o.getDriver}}),n(12);var i=n(19),a=n(3).interopRequireDefault(i),s=n(20),u=n(3).interopRequireDefault(s),c=n(21),l=n(3).interopRequireDefault(c),f=n(22),d=n(3).interopRequireDefault(f),p=n(8),h=n(3).interopRequireDefault(p),v=n(15),m=n(3).interopRequireDefault(v),y=n(34),_=n(3).interopRequireDefault(y),g=n(7),b=n(3).interopRequireDefault(g),w=n(35),C=n(3).interopRequireDefault(w);t.Component=a.default,t.PureComponent=u.default,t.PropTypes=l.default,t.render=d.default,t.findDOMNode=h.default,t.unmountComponentAtNode=m.default,t.findComponentInstance=_.default,t.setNativeProps=b.default,t.version=C.default},function(e,t,n){function r(){if(p.default.component){var e=p.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)o(e[n],t);else t.push(e)}function i(e){if(null==e)return e;var t=[];return o(e,t),1===t.length&&(t=t[0]),t}function a(e){if(e){if(Array.isArray(e)){for(var t={},n=0;n<e.length;++n){var r=a(e[n]);if(r)for(var o in r)t[o]=r[o]}return t}return e}}function s(e,t){if(h.isWeex&&"text"===e){var n=t.children;n&&(Array.isArray(n)&&(n=n.join("")),t.children=null,t.value=n)}return t}function u(e,t){var o=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+r());var s={},u=void 0,c=null,l=null;if(null!=t){l=void 0===t.ref?null:t.ref,c=void 0===t.key?null:String(t.key);for(u in t)t.hasOwnProperty(u)&&!v.hasOwnProperty(u)&&(s[u]=t[u])}for(var f=arguments.length,d=Array(f>2?f-2:0),h=2;h<f;h++)d[h-2]=o[h];if(d.length&&(s.children=i(d)),e&&e.defaultProps){var y=e.defaultProps;for(u in y)void 0===s[u]&&(s[u]=y[u])}return s.style&&(Array.isArray(s.style)||"object"===n(3).typeof(s.style))&&(s.style=a(s.style)),new m(e,c,l,s,p.default.component)}function c(e){var t=u.bind(null,e);return t.type=e,t}function l(e,t){var n=arguments,r=Object.assign({},e.props),o=e.key,a=e.ref,s=e._owner;if(t){void 0!==t.ref&&(a=t.ref,s=p.default.component),void 0!==t.key&&(o=String(t.key));var u=void 0;e.type&&e.type.defaultProps&&(u=e.type.defaultProps);var c=void 0;for(c in t)t.hasOwnProperty(c)&&!v.hasOwnProperty(c)&&(void 0===t[c]&&void 0!==u?r[c]=u[c]:r[c]=t[c])}for(var l=arguments.length,f=Array(l>2?l-2:0),d=2;d<l;d++)f[d-2]=n[d];return f.length&&(r.children=i(f)),new m(e.type,o,a,r,s)}function f(e){return"object"===("undefined"==typeof e?"undefined":n(3).typeof(e))&&null!==e&&e.type&&e.props}Object.defineProperty(t,"__esModule",{value:!0}),t.createElement=u,t.createFactory=c,t.cloneElement=l,t.isValidElement=f;var d=n(2),p=n(3).interopRequireDefault(d),h=n(4),v={key:!0,ref:!0},m=function(e,t,n,r,o){return r=s(e,r),{type:e,key:t,ref:n,props:r,_owner:o}};t.default=m},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,driver:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{}}},function(e,t){t.interopRequireDefault=function(e){return e&&e.__esModule?e:{default:e}},t.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.inherits=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"===n(3).typeof(Symbol.iterator)?function(e){return"undefined"==typeof e?"undefined":n(3).typeof(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":"undefined"==typeof e?"undefined":n(3).typeof(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode="undefined"!=typeof process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.injectDriver=t.getDriver=t.setDriver=void 0;var r=n(2),o=n(3).interopRequireDefault(r),i=n(6),a=n(3).interopRequireDefault(i),s=n(10),u=n(3).interopRequireDefault(s),c=n(4),l=t.setDriver=function(e){o.default.driver=e},f=t.getDriver=function(){return o.default.driver};t.injectDriver=function(){var e=f();if(!e){if(c.isWeex)e=a.default;else{if(!c.isWeb)throw Error("No builtin driver matched");e=u.default}l(e)}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=(n(3).interopRequireDefault(o),n(7)),a=n(3).interopRequireDefault(i),s=n(9),u="style",c="id",l="text",f=750,d=11,p={},h="object"===("undefined"==typeof r?"undefined":n(3).typeof(r))?r:"object"===("undefined"==typeof h?"undefined":n(3).typeof(h))?h:null,v={getElementById:function(e){return p[e]},getChildNodes:function(e){return e.children},createBody:function(){if(h.open(),h.body)return h.body;var e=h.documentElement,t=h.createBody();return e.appendChild(t),t},createFragment:function(){return{nodeType:d,childNodes:[]}},createComment:function(e){return h.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return v.createElement({type:l,props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=e.props,n={},r=t[u];for(var o in r)n[o]=(0,s.convertUnit)(r[o],o);var i=h.createElement(e.type,{style:n});return(0,a.default)(i,t,!0),i},appendChild:function(e,t){var n=this;return t.nodeType===d?t.childNodes.push(e):e.nodeType===d?e.childNodes.map(function(e){return n.appendChild(e,t)}):t.appendChild(e)},removeChild:function(e,t){var n=e.attr&&e.attr[c];return null!=n&&(p[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){var r=this;return e.nodeType===d?e.childNodes.map(function(o,i){return r.insertAfter(o,e.childNodes[i-1]||t,n)}):n.insertAfter(e,t)},insertBefore:function(e,t,n){var r=this;return e.nodeType===d?e.childNodes.map(function(e,o){return r.insertBefore(e,t,n)}):n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEvent(t,n)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return t==c&&(p[n]=null),e.setAttr(t,void 0)},setAttribute:function(e,t,n){return t==c&&(p[n]=e),e.setAttr(t,n)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,s.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){(0,s.setRem)(this.getWindowWidth()/f)},afterRender:function(){h&&h.listener&&h.listener.createFinish&&h.listener.createFinish(function(){h.close()})},getWindowWidth:function(){return f}};t.default=v},function(e,t,n){function r(e,t,n){e=(0,s.default)(e);for(var r in t){var o=t[r];if(r!==c&&null!=o)if(r===u){if(n)continue;i.default.driver.setStyles(e,o)}else if("on"===r.substring(0,2)){var a=r.slice(2).toLowerCase();i.default.driver.addEventListener(e,a,o)}else i.default.driver.setAttribute(e,r,o)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(2),i=n(3).interopRequireDefault(o),a=n(8),s=n(3).interopRequireDefault(a),u="style",c="children"},function(e,t,n){function r(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("Appears to be neither Component nor DOMNode.");var t=e._internal;if(t){for(;!t._nativeNode;)if(t=t._renderedComponent,null==t)return null;return t._nativeNode}throw new Error("findDOMNode was called on an unmounted component.")}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=n(3).interopRequireDefault(o);t.default=r},function(e,t){function n(e){return"string"==typeof e&&e.indexOf(c)!==-1}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f;return e.replace(l,function(e){return parseFloat(e)*t+"px"})}function o(){return f}function i(e){f=e}function a(e,t){return"number"==typeof e&&!u[t]}function s(e,t){return t&&a(e,t)?e*f+"px":n(e)?r(e):e}Object.defineProperty(t,"__esModule",{value:!0}),t.isRem=n,t.calcRem=r,t.getRem=o,t.setRem=i,t.isUnitNumber=a,t.convertUnit=s;var u={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},c="rem",l=/[-+]?\d*\.?\d+rem/g,f=void 0},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),i=n(3).interopRequireDefault(r),a=n(9),s=n(11),u=n(3).interopRequireDefault(s),c=750,l="dangerouslySetInnerHTML",f={getElementById:function(e){return o.getElementById(e)},getChildNodes:function(e){return e.childNodes},createBody:function(){return o.body},createFragment:function(){return o.createDocumentFragment()},createComment:function(e){return o.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return o.createTextNode(e)},updateText:function(e,t){var n="textContent"in o?"textContent":"nodeValue";e[n]=t},createElement:function(e){var t=o.createElement(e.type),n=e.props;return(0,i.default)(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){e.parentNode===t&&t.removeChild(e)},replaceChild:function(e,t,n){n.replaceChild(e,t)},insertAfter:function(e,t,n){var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEventListener(t,n)},removeEventListener:function(e,t,n){return e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){"className"===t&&(t="class"),"input"!=e.nodeName.toLowerCase()||("checked"!=t||"checkbox"!==e.type&&"radio"!==e.type)&&"value"!=t?t===l?e.innerHTML=null:e.removeAttribute(t):e[t]=null},setAttribute:function(e,t,n){"className"===t&&(t="class"),"input"!=e.nodeName.toLowerCase()||("checked"!=t||"checkbox"!==e.type&&"radio"!==e.type)&&"value"!=t?t===l?e.innerHTML=n.__html:null!=n&&e.setAttribute(t,n):e[t]=n},setStyles:function(e,t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];u.default.isFlexProp(n)?u.default[n](r,e.style):e.style[n]=(0,a.convertUnit)(r,n)}},beforeRender:function(){(0,a.setRem)(this.getWindowWidth()/c)},getWindowWidth:function(){return o.documentElement.clientWidth}};t.default=f},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},r={row:"horizontal",column:"vertical"},o={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},i={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},a={isFlexProp:function(e){return i[e]},display:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"flex"===e?(t.display="-webkit-box",t.display="-webkit-flex",t.display="flex"):t.display=e,t},flex:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.flexWrap=e,t},alignItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=n[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=r[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=o[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=a},function(e,t,n){var r=n(13),o=n(3).interopRequireDefault(r);"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(o.default)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(14),o=n(3).interopRequireDefault(r),i=n(2),a=n(3).interopRequireDefault(i);t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return o.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:a.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(1),a=n(15),s=n(3).interopRequireDefault(a),u=n(16),c=n(3).interopRequireDefault(u),l=n(17),f=n(3).interopRequireDefault(l),d=n(18),p=n(3).interopRequireDefault(d),h=n(13),v=n(3).interopRequireDefault(h),m="$$instance";t.default={set:function(e,t){e[m]||(e[m]=t,t.rootID&&(o.default.rootInstances[t.rootID]=t,o.default.rootComponents[t.rootID]=t._internal))},get:function(e){return e[m]},remove:function(e){var t=this.get(e);t&&(e[m]=null,t.rootID&&(delete o.default.rootComponents[t.rootID],delete o.default.rootInstances[t.rootID]))},render:function(e,t){var n=this.get(t),r=n&&n.isRootComponent;if(r){var o=n.getRenderedComponent(),a=o._currentElement;if((0,f.default)(a,e)){var u=o._context;return o.updateComponent(a,e,u,u),n}v.default.Reconciler.unmountComponent(n),(0,s.default)(t)}var l=(0,i.createElement)(p.default,null,e),d=(0,c.default)(l),h={},m=d.mountComponent(t,h);return this.set(t,m),v.default.Mount._renderNewRootComponent(m._internal),m}}},function(e,t,n){function r(e){var t=i.default.get(e);return!!t&&(i.default.remove(e),t._internal.unmountComponent(),!0)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(14),i=n(3).interopRequireDefault(o)},function(e,t,n){function r(e){var t=void 0;if(void 0===e||null===e||e===!1||e===!0)t=new i.default.EmptyComponent;else if(Array.isArray(e))t=new i.default.FragmentComponent(e);else if("object"===("undefined"==typeof e?"undefined":n(3).typeof(e))&&e.type)t="string"==typeof e.type?new i.default.NativeComponent(e):new i.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw Error("Invalid element type "+JSON.stringify(e));t=new i.default.TextComponent(e)}return t._mountIndex=0,t}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=n(3).interopRequireDefault(o);t.default=r},function(e,t,n){function r(e,t){var r=null===e,o=null===t;if(r||o)return r===o;var i="undefined"==typeof e?"undefined":n(3).typeof(e),a="undefined"==typeof t?"undefined":n(3).typeof(t);return"string"===i||"number"===i?"string"===a||"number"===a:"object"===i&&"object"===a&&e.type===t.type&&e.key===t.key}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),o=n(3).interopRequireDefault(r),i=1,a=function(e){function t(){var e,r,o,a,s=arguments;n(3).classCallCheck(this,t);for(var u=arguments.length,c=Array(u),l=0;l<u;l++)c[l]=s[l];return r=o=n(3).possibleConstructorReturn(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(c))),o.rootID=i++,a=r,n(3).possibleConstructorReturn(o,a)}return n(3).inherits(t,e),n(3).createClass(t,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),t}(o.default);t.default=a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(t,r,o){n(3).classCallCheck(this,e),this.props=t,this.context=r,this.refs={},this.updater=o}return n(3).createClass(e,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),e}();t.default=r},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),o=n(3).interopRequireDefault(r),i=function(e){function t(e,r){return n(3).classCallCheck(this,t),n(3).possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r))}return n(3).inherits(t,e),n(3).createClass(t,[{key:"isPureComponentClass",value:function(){}}]),t}(o.default);t.default=i},function(e,t){function n(e){function t(e,t,n,r,o,i){}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function r(e){function t(e,t,n,r,o){}return n(t)}Object.defineProperty(t,"__esModule",{value:!0});var o=r();t.default={array:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,element:o,node:o,any:o,arrayOf:o,instanceOf:o,objectOf:o,oneOf:o,oneOfType:o,shape:o}},function(e,t,n){function r(e,t,n){(0,i.default)(),(0,u.injectDriver)();var r=(0,u.getDriver)();r.beforeRender&&r.beforeRender(e,t),null==t&&(t=r.createBody());var o=s.default.render(e,t),a=o.getPublicInstance();return n&&n.call(a),r.afterRender&&r.afterRender(a),a}Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),i=n(3).interopRequireDefault(o),a=n(14),s=n(3).interopRequireDefault(a),u=(n(9),n(5));t.default=r},function(e,t,n){function r(){i.default.EmptyComponent=s.default,i.default.NativeComponent=c.default,i.default.TextComponent=f.default,i.default.FragmentComponent=v.default,i.default.CompositeComponent=p.default}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(2),i=n(3).interopRequireDefault(o),a=n(24),s=n(3).interopRequireDefault(a),u=n(25),c=n(3).interopRequireDefault(u),l=n(28),f=n(3).interopRequireDefault(l),d=n(29),p=n(3).interopRequireDefault(d),h=n(33),v=n(3).interopRequireDefault(h)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=function(){function e(){n(3).classCallCheck(this,e),this._currentElement=null}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t;var r={_internal:this},i=this.getNativeNode();return n?n(i,e):o.default.driver.appendChild(i,e),r}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&o.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=i},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(26),a=n(3).interopRequireDefault(i),s=n(16),u=n(3).interopRequireDefault(s),c=n(17),l=n(3).interopRequireDefault(c),f=n(27),d=n(3).interopRequireDefault(f),p=n(14),h=n(3).interopRequireDefault(p),v=n(13),m=n(3).interopRequireDefault(v),y="style",_="children",g="tree",b=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r=this._currentElement.props,i=this._currentElement.type,s={_internal:this,type:i,props:r},u=r.append;this._instance=s,this._prevStyleCopy=Object.assign({},r.style);var c=this.getNativeNode();u!==g&&(n?n(c,e):o.default.driver.appendChild(c,e)),this._currentElement&&this._currentElement.ref&&a.default.attach(this._currentElement._owner,this._currentElement.ref,this);var l=r.children;return null!=l&&this.mountChildren(l,t),u===g&&(n?n(c,e):o.default.driver.appendChild(c,e)),m.default.Reconciler.mountComponent(this),s}},{key:"mountChildren",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r={},o=e.map(function(e,o){var i=(0,u.default)(e),a=(0,d.default)(r,e,o);r[a]=i,i._mountIndex=o;var s=i.mountComponent(n.getNativeNode(),t);return s});return this._renderedChildren=r,o}},{key:"unmountChildren",value:function(){var e=this._renderedChildren;if(e){for(var t in e){var n=e[t];n.unmountComponent()}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&a.default.detach(this._currentElement._owner,t,this),h.default.remove(this._nativeNode),e||o.default.driver.removeChild(this._nativeNode,this._parent),o.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(),m.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,a.default.update(e,t,this);var o=e.props,i=t.props;this.updateProperties(o,i),this.updateChildren(i.children,r),m.default.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,i=void 0,a=void 0;for(r in e)if(r!==_&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(r===y){var s=n._prevStyleCopy;for(i in s)s.hasOwnProperty(i)&&(a=a||{},a[i]="");n._prevStyleCopy=null}else"on"===r.substring(0,2)?e[r]&&o.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],c=r===y?n._prevStyleCopy:null!=e?e[r]:void 0;if(r!==_&&t.hasOwnProperty(r)&&u!==c&&(null!=u||null!=c))if(r===y)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(a=a||{},a[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(a=a||{},a[i]=u[i])}else a=u;else"on"===r.substring(0,2)?(null!=c&&o.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),c),null!=u&&o.default.driver.addEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),u)):null!=u?o.default.driver.setAttribute(n.getNativeNode(),r,u):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}a&&o.default.driver.setStyles(this.getNativeNode(),a)}},{key:"updateChildren",value:function(e,t){var n=this,r=this._renderedChildren;if(null!=e||null!=r){var i={},a={};if(null!=e){Array.isArray(e)||(e=[e]);for(var s=0,c=e.length;s<c;s++){var f=e[s],p=(0,d.default)(i,f,s),h=r&&r[p],v=h&&h._currentElement;if(null!=h&&(0,l.default)(v,f))h.updateComponent(v,f,t,t),i[p]=h;else{if(h){var m=h.getNativeNode();h.unmountComponent(!0),a[p]=m}i[p]=(0,u.default)(f)}}}if(null!=r)for(var y in r)if(r.hasOwnProperty(y)){var _=r[y];i[y]||_.unmountComponent()}null!=i&&!function(){var e=0,s=0,u=null,c=function(c){if(!i.hasOwnProperty(c))return"continue";var l=i[c],f=r&&r[c];f===l?(f._mountIndex<e&&o.default.driver.insertAfter(f.getNativeNode(),u,n.getNativeNode()),e=Math.max(f._mountIndex,e),f._mountIndex=s):(null!=f&&(e=Math.max(f._mountIndex,e)),l.mountComponent(n.getNativeNode(),t,function(e,t){var n=a[c];if(n)o.default.driver.replaceChild(e,n,t);else{var r=o.default.driver.getChildNodes(t),i=r[s];i?o.default.driver.insertBefore(e,i,t):o.default.driver.appendChild(e,t)}}),l._mountIndex=s),s++,u=l.getNativeNode()};for(var l in i){c(l)}}(),this._renderedChildren=i}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createElement(this._instance),h.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),e}();t.default=b},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){if("function"==typeof t)t(null);else{
-var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,s=void 0===e[a];return s||console.warn('Encountered two children with the same key "'+r+'".'),s?a:i}return i}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(13),a=n(3).interopRequireDefault(i),s=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t,this._stringText=String(t)}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r=this.getNativeNode();n?n(r,e):o.default.driver.appendChild(r,e);var i={_internal:this};return a.default.Reconciler.mountComponent(this),i}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&o.default.driver.removeChild(this._nativeNode,this._parent),a.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),o.default.driver.updateText(this.getNativeNode(),t),a.default.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createText(this._stringText)),this._nativeNode}}]),e}();t.default=s},function(e,t,n){function r(e,t){try{return e()}catch(e){if(t)t(e);else{if(!c.default.sandbox)throw e;setTimeout(function(){throw e},0)}}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(30),i=n(3).interopRequireDefault(o),a=n(31),s=n(3).interopRequireDefault(a),u=n(2),c=n(3).interopRequireDefault(u),l=n(26),f=n(3).interopRequireDefault(l),d=n(16),p=n(3).interopRequireDefault(d),h=n(17),v=n(3).interopRequireDefault(h),m=n(32),y=n(3).interopRequireDefault(m),_=n(13),g=n(3).interopRequireDefault(_),b=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t}return n(3).createClass(e,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=c.default.mountID++,this._updateCount=0;var o=this._currentElement.type,a=this._currentElement.props,u=o.prototype&&o.prototype.isComponentClass,l=o.prototype.render,d=this._processContext(t),h=void 0,v=void 0;if(u||l)h=new o(a,d,s.default);else{if("function"!=typeof o)throw Error("Invalid component type "+JSON.stringify(o));h=new i.default(o)}h.props=a,h.context=d,h.refs={},h.updater=s.default,h._internal=this,this._instance=h;var m=h.state;if(void 0===m&&(h.state=m=null),r(function(){h.componentWillMount&&h.componentWillMount()}),null==v){c.default.component=this,h.state=this._processPendingState(a,d);var y=void 0;"function"==typeof h.handleError&&(y=function(e){h.handleError(e)}),r(function(){v=h.render()},y),c.default.component=null}return this._renderedComponent=(0,p.default)(v),this._renderedComponent.mountComponent(this._parent,this._processChildContext(t),n),this._currentElement&&this._currentElement.ref&&f.default.attach(this._currentElement._owner,this._currentElement.ref,this),r(function(){h.componentDidMount&&h.componentDidMount()}),g.default.Reconciler.mountComponent(this),h}},{key:"unmountComponent",value:function(e){var t=this._instance;if(r(function(){t.componentWillUnmount&&t.componentWillUnmount()}),g.default.Reconciler.unmountComponent(this),t._internal=null,null!=this._renderedComponent){var n=this._currentElement.ref;n&&f.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return{};var r={};for(var o in n)r[o]=e[o];return r}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,o){var i=this,a=this._instance;a||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var s=!1,u=void 0,c=void 0;this._context===o?u=a.context:(u=this._processContext(o),s=!0),e===t?c=t.props:(c=t.props,s=!0),s&&a.componentWillReceiveProps&&(this._pendingState=!0,r(function(){a.componentWillReceiveProps(c,u)}),this._pendingState=!1),f.default.update(e,t,this);var l=!0,d=a.props,p=a.state,h=this._processPendingState(c,u);this._pendingForceUpdate||(a.shouldComponentUpdate?l=r(function(){return a.shouldComponentUpdate(c,h,u)}):a.isPureComponentClass&&(l=!(0,y.default)(d,c)||!(0,y.default)(p,h))),l?!function(){i._pendingForceUpdate=!1;var e=a.context;r(function(){a.componentWillUpdate&&a.componentWillUpdate(c,h,u)}),i._currentElement=t,i._context=o,a.props=c,a.state=h,a.context=u,i._updateRenderedComponent(o),r(function(){a.componentDidUpdate&&a.componentDidUpdate(d,p,e)}),i._updateCount++}():(this._currentElement=t,this._context=o,a.props=c,a.state=h,a.context=u),g.default.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this,n=this._renderedComponent,o=n._currentElement,i=this._instance,a=void 0;c.default.component=this,r(function(){a=i.render()}),c.default.component=null,(0,v.default)(o,a)?n.updateComponent(o,a,n._context,this._processChildContext(e)):!function(){var r=n.getNativeNode();n.unmountComponent(!0),t._renderedComponent=(0,p.default)(a),t._renderedComponent.mountComponent(t._parent,t._processChildContext(e),function(e,t){c.default.driver.replaceChild(e,r,t)})}()}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof i.default?null:e}}]),e}();t.default=b},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(t){n(3).classCallCheck(this,e),this.pureRender=t}return n(3).createClass(e,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),e}();t.default=r},function(e,t){function n(e,t){if(t){var n=e._pendingCallbacks||(e._pendingCallbacks=[]);n.push(t)}}function r(e,t){if(t){var n=e._pendingStateQueue||(e._pendingStateQueue=[]);n.push(t)}}Object.defineProperty(t,"__esModule",{value:!0});var o={setState:function(e,t,o){var i=e._internal;i&&(r(i,t),n(i,o),i._pendingState||this.runUpdate(e))},forceUpdate:function(e,t){var r=e._internal;r&&(r._pendingForceUpdate=!0,n(r,t),this.runUpdate(e))},runUpdate:function(e){var t=e._internal;if(t&&t._renderedComponent){var n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),n&&n.forEach(function(e){return e()})}}};t.default=o},function(e,t,n){function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==("undefined"==typeof e?"undefined":n(3).typeof(e))||null===e||"object"!==("undefined"==typeof t?"undefined":n(3).typeof(t))||null===t)return!1;var o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;for(var s=0;s<o.length;s++)if(!i.call(t,o[s])||!r(e[o[s]],t[o[s]]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.prototype.hasOwnProperty;t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(25),a=n(3).interopRequireDefault(i),s=n(14),u=n(3).interopRequireDefault(s),c=n(16),l=n(3).interopRequireDefault(c),f=n(27),d=n(3).interopRequireDefault(f),p=n(13),h=n(3).interopRequireDefault(p),v=function(e){function t(e){return n(3).classCallCheck(this,t),n(3).possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return n(3).inherits(t,e),n(3).createClass(t,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r={_internal:this};this._instance=r;var i=this.getNativeNode(),a=this._currentElement;return this.mountChildren(a,t),n?n(i,e):o.default.driver.appendChild(i,e),this._nativeNode=e,h.default.Reconciler.mountComponent(this),r}},{key:"mountChildren",value:function(e,t){var n=this,r={},i=this.getNativeNode(),a=e.map(function(e,a){var s=(0,l.default)(e),u=(0,d.default)(r,e,a);r[u]=s,s._mountIndex=a;var c=s.mountComponent(n._parent,t,function(e){o.default.driver.appendChild(e,i)});return c});return this._renderedChildren=r,a}},{key:"unmountComponent",value:function(e){this._nativeNode&&(u.default.remove(this._nativeNode),e||o.default.driver.removeChild(this._nativeNode,this._parent)),this.unmountChildren(),h.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r),h.default.Reconciler.receiveComponent(this)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createFragment(this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return null}},{key:"getName",value:function(){return"fragment"}}]),t}(a.default);t.default=v},function(e,t,n){function r(e){return null==e?null:i.default.get(e)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),i=n(3).interopRequireDefault(o);t.default=r},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.1.0"}])}},function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(){n(this,e),this._listeners={}}return r(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length?t?(this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}),this):(delete this._listeners[e],this):this}},{key:"emit",value:function(e,t){var n=this;return this._listeners[e]?(this._listeners[e].forEach(function(r){r.listener.apply(n,[t]),r.once&&n.removeListener(e,r.listener)}),this):this}}]),e}();t.default=o},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(){}function r(e,t){return function(){e.apply(t,arguments)}}function o(e){if("object"!==f(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],l(e,this)}function i(e,t){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(t):(e._handled=!0,void d(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?a:s)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void s(t.promise,e)}a(t.promise,r)}))}function a(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===("undefined"==typeof t?"undefined":f(t))||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void l(r(n,t),e)}e._state=1,e._value=t,u(e)}catch(t){s(e,t)}}function s(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&d(function(){e._handled||p(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)i(e,e._deferreds[t]);e._deferreds=null}function c(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function l(e,t){var n=!1;try{e(function(e){n||(n=!0,a(t,e))},function(e){n||(n=!0,s(t,e))})}catch(e){if(n)return;n=!0,s(t,e)}}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},p=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var r=new this.constructor(n);return i(this,new c(e,t,r)),r},o.all=function(e){var t=Array.prototype.slice.call(e);return new o(function(e,n){function r(i,a){try{if(a&&("object"===("undefined"==typeof a?"undefined":f(a))||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(i,e)},n)}t[i]=a,0===--o&&e(t)}catch(e){n(e)}}if(0===t.length)return e([]);for(var o=t.length,i=0;i<t.length;i++)r(i,t[i])})},o.resolve=function(e){return e&&"object"===("undefined"==typeof e?"undefined":f(e))&&e.constructor===o?e:new o(function(t){t(e)})},o.reject=function(e){return new o(function(t,n){n(e)})},o.race=function(e){return new o(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},o._setImmediateFn=function(e){d=e},o._setUnhandledRejectionFn=function(e){p=e},e.exports=o}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e){return void 0!==l[e]}function r(){u.call(this),this._isInvalid=!0}function o(e){return""==e&&r.call(this),e.toLowerCase()}function i(e){var t=e.charCodeAt(0);return t>32&&t<127&&[34,35,60,62,63,96].indexOf(t)==-1?e:encodeURIComponent(e)}function a(e){var t=e.charCodeAt(0);return t>32&&t<127&&[34,35,60,62,96].indexOf(t)==-1?e:encodeURIComponent(e)}function s(e,t,s){function u(e){b.push(e)}var c=this,v=t||"scheme start",m=0,y="",_=!1,g=!1,b=[];e:for(;(e[m-1]!=d||0==m)&&!this._isInvalid;){var w=e[m];switch(v){case"scheme start":if(!w||!p.test(w)){if(t){u("Invalid scheme.");break e}y="",v="no scheme";continue}y+=w.toLowerCase(),v="scheme";break;case"scheme":if(w&&h.test(w))y+=w.toLowerCase();else{if(":"!=w){if(t){if(d==w)break e;u("Code point not allowed in scheme: "+w);break e}y="",m=0,v="no scheme";continue}if(c._scheme=y,y="",t)break e;n(c._scheme)&&(c._isRelative=!0),v="file"==c._scheme?"relative":c._isRelative&&s&&s._scheme==c._scheme?"relative or authority":c._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==w?v="query":"#"==w?(c._fragment="#",v="fragment"):d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._schemeData+=i(w));break;case"no scheme":if(s&&n(s._scheme)){v="relative";continue}u("Missing scheme."),r.call(c);break;case"relative or authority":if("/"!=w||"/"!=e[m+1]){u("Expected /, got: "+w),v="relative";continue}v="authority ignore slashes";break;case"relative":if(c._isRelative=!0,"file"!=c._scheme&&(c._scheme=s._scheme),d==w){c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query=s._query,c._username=s._username,c._password=s._password;break e}if("/"==w||"\\"==w)"\\"==w&&u("\\ is an invalid code point."),v="relative slash";else if("?"==w)c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query="?",c._username=s._username,c._password=s._password,v="query";else{if("#"!=w){var C=e[m+1],k=e[m+2];("file"!=c._scheme||!p.test(w)||":"!=C&&"|"!=C||d!=k&&"/"!=k&&"\\"!=k&&"?"!=k&&"#"!=k)&&(c._host=s._host,c._port=s._port,c._username=s._username,c._password=s._password,c._path=s._path.slice(),c._path.pop()),v="relative path";continue}c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query=s._query,c._fragment="#",c._username=s._username,c._password=s._password,v="fragment"}break;case"relative slash":if("/"!=w&&"\\"!=w){"file"!=c._scheme&&(c._host=s._host,c._port=s._port,c._username=s._username,c._password=s._password),v="relative path";continue}"\\"==w&&u("\\ is an invalid code point."),v="file"==c._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=w){u("Expected '/', got: "+w),v="authority ignore slashes";continue}v="authority second slash";break;case"authority second slash":if(v="authority ignore slashes","/"!=w){u("Expected '/', got: "+w);continue}break;case"authority ignore slashes":if("/"!=w&&"\\"!=w){v="authority";continue}u("Expected authority, got: "+w);break;case"authority":if("@"==w){_&&(u("@ already seen."),y+="%40"),_=!0;for(var O=0;O<y.length;O++){var x=y[O];if("\t"!=x&&"\n"!=x&&"\r"!=x)if(":"!=x||null!==c._password){var E=i(x);null!==c._password?c._password+=E:c._username+=E}else c._password="";else u("Invalid whitespace in authority.")}y=""}else{if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){m-=y.length,y="",v="host";continue}y+=w}break;case"file host":if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){2!=y.length||!p.test(y[0])||":"!=y[1]&&"|"!=y[1]?0==y.length?v="relative path start":(c._host=o.call(c,y),y="",v="relative path start"):v="relative path";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid whitespace in file host."):y+=w;break;case"host":case"hostname":if(":"!=w||g){if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){if(c._host=o.call(c,y),y="",v="relative path start",t)break e;continue}"\t"!=w&&"\n"!=w&&"\r"!=w?("["==w?g=!0:"]"==w&&(g=!1),y+=w):u("Invalid code point in host/hostname: "+w)}else if(c._host=o.call(c,y),y="",v="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(w))y+=w;else{if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w||t){if(""!=y){var S=parseInt(y,10);S!=l[c._scheme]&&(c._port=S+""),y=""}if(t)break e;v="relative path start";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid code point in port: "+w):r.call(c)}break;case"relative path start":if("\\"==w&&u("'\\' not allowed in path."),v="relative path","/"!=w&&"\\"!=w)continue;break;case"relative path":if(d!=w&&"/"!=w&&"\\"!=w&&(t||"?"!=w&&"#"!=w))"\t"!=w&&"\n"!=w&&"\r"!=w&&(y+=i(w));else{"\\"==w&&u("\\ not allowed in relative path.");var j;(j=f[y.toLowerCase()])&&(y=j),".."==y?(c._path.pop(),"/"!=w&&"\\"!=w&&c._path.push("")):"."==y&&"/"!=w&&"\\"!=w?c._path.push(""):"."!=y&&("file"==c._scheme&&0==c._path.length&&2==y.length&&p.test(y[0])&&"|"==y[1]&&(y=y[0]+":"),c._path.push(y)),y="","?"==w?(c._query="?",v="query"):"#"==w&&(c._fragment="#",v="fragment")}break;case"query":t||"#"!=w?d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._query+=a(w)):(c._fragment="#",v="fragment");break;case"fragment":d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._fragment+=w)}m++}}function u(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function c(e,t){void 0===t||t instanceof c||(t=new c(String(t))),this._url=e,u.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");s.call(this,n,null,t)}var l=Object.create(null);l.ftp=21,l.file=0,l.gopher=70,l.http=80,l.https=443,l.ws=80,l.wss=443;var f=Object.create(null);f["%2e"]=".",f[".%2e"]="..",f["%2e."]="..",f["%2e%2e"]="..";var d=void 0,p=/[a-zA-Z]/,h=/[a-zA-Z0-9\+\-\.]/;c.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){u.call(this),s.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||s.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],s.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&(this._query="?","?"==e[0]&&(e=e.slice(1)),s.call(this,e,"query"))},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||(this._fragment="#","#"==e[0]&&(e=e.slice(1)),s.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return e=this.host,e?this._scheme+"://"+e:""}},e.exports=c}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){return encodeURIComponent(e).replace(s,l)}function o(e){return decodeURIComponent(e.replace(u," "))}function i(){try{return!!Symbol.iterator}catch(e){return!1}}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=/[!'\(\)~]|%20|%00/g,u=/\+/g,c={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},l=function(e){return c[e]},f=i(),d="__URLSearchParams__",p=function(){function e(t){var r=this;if(n(this,e),this[d]=Object.create(null),t){"?"===t.charAt(0)&&(t=t.slice(1));for(var i,a,s=(t||"").split("&"),u=0,c=s.length;u<c;u++)a=s[u],i=a.indexOf("="),-1<i?r.append(o(a.slice(0,i)),o(a.slice(i+1))):a.length&&r.append(o(a),"")}}return a(e,[{key:"append",value:function(e,t){var n=this[d];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[d][e]}},{key:"get",value:function(e){var t=this[d];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[d];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[d]}},{key:"set",value:function(e,t){this[d][e]=[""+t]}},{key:"forEach",value:function(e,t){var n=this[d];Object.getOwnPropertyNames(n).forEach(function(r){n[r].forEach(function(n){e.call(t,n,r,this)},this)},this)}},{key:"keys",value:function(){var e=[];this.forEach(function(t,n){e.push(n)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"values",value:function(){var e=[];this.forEach(function(t){e.push(t)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"entries",value:function(){var e=[];this.forEach(function(t,n){e.push([n,t])});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"toString",value:function(){var e,t,n,o,i=this[d],a=[];for(t in i)for(n=r(t),e=0,o=i[t];e<o.length;e++)a.push(n+"="+r(o[e]));return a.join("&")}}]),e}();f&&(p.prototype[Symbol.iterator]=p.prototype.entries),e.exports=p}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function e(t,r){n(this,e),this.family=t,this.source=r};e.exports=r}])}},function(e,t){e.exports=function(e){function t(t,n,r){n instanceof Function&&(r=n,n=[]),e[t]={factory:r,deps:n,module:{exports:{}},isInitialized:!1,hasError:!1}}return t}},function(e,t){e.exports=function(e){function t(n){var r=e[n];if(r&&r.isInitialized)return r.module.exports;if(!r)throw new Error('Requiring unknown module "'+n+'"');if(r.hasError)throw new Error('Requiring module "'+n+'" which threw an exception');try{r.isInitialized=!0,r.factory(t,r.module.exports,r.module)}catch(e){throw r.hasError=!0,r.isInitialized=!1,e}return r.module.exports}return t}},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if("*"==e)return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function i(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r.errorMessage=o(e,t,n),r}function a(e){var t={isDowngrade:!1},n=WXEnvironment,r=n.platform||"unknow",a=r.toLowerCase(),s=e[a]||{};for(var c in n){var l=c,f=l.toLowerCase(),d=n[c],p=f.indexOf("version")>=0,h=f.indexOf("devicemodel")>=0,v=s[c];if(v&&p){var m=o(v),y=o(n[c]);if(u.default.satisfies(y,m)){t=i(l,d,v);break}}else if(h){var _=Array.isArray(v)?v:[v];if(_.indexOf(d)>=0){t=i(l,d,v);break}}}return t}var s=n(11),u=r(s);e.exports=function(e){return function(t){var n=e("@weex-module/instanceWrap"),r=a(t);return!!r.isDowngrade&&(n.error(r.errorType,r.code,r.errorMessage),!0)}}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){var r=/(\W+)?([\d|.]+)/;if(("undefined"==typeof e?"undefined":n(e))+("undefined"==typeof t?"undefined":n(t))!="stringstring")return!1;if("*"==t)return!0;for(var o=t.match(r),i=e.split("."),a=o[2].split("."),s=Math.max(i.length,a.length),u=0,c=0;c<s;c++){if(i[c]&&!a[c]&&parseInt(i[c])>0||parseInt(i[c])>parseInt(a[c])){u=1;break}if(a[c]&&!i[c]&&parseInt(a[c])>0||parseInt(i[c])<parseInt(a[c])){u=-1;break}}switch(o[1]){case"<":if(u===-1)return!0;break;case"<=":if(1!==u)return!0;break;case">":if(1===u)return!0;break;case">=":if(u!==-1)return!0;break;default:if(0===u)return!0}return!1}}},function(e,t){var n="@weex-module/stream";e.exports=function(e,t){function r(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function o(e){return"string"!=typeof e&&(e=String(e)),e}function i(e){this.originHeaders=e,this.map={},e instanceof i?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function a(e){return e.bodyUsed?t.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function s(){return this.bodyUsed=!1,this._initBody=function(e,t){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=a(this);return e?e:t.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}function u(e){var t=e.toUpperCase();return f.indexOf(t)>-1?t:e}function c(e,t){t=t||{};var n=t.body;if(c.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new i(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new i(t.headers)),this.method=u(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n,t)}function l(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new i(t.headers),this.url=t.url||"",this._initBody(e,t)}i.prototype.append=function(e,t){e=r(e),t=o(t);var n=this.map[e];this.map[e]=n?n+","+t:t},i.prototype.delete=function(e){delete this.map[r(e)]},i.prototype.get=function(e){return e=r(e),this.has(e)?this.map[e]:null},i.prototype.has=function(e){return this.map.hasOwnProperty(r(e))},i.prototype.set=function(e,t){this.map[r(e)]=[o(t)]},i.prototype.forEach=function(e,t){var n=this;for(var r in this.map)n.map.hasOwnProperty(r)&&e.call(t,n.map[r],r,n)};var f=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];c.prototype.clone=function(){return new c(this)},s.call(c.prototype),s.call(l.prototype),l.prototype.clone=function(){return new l(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},l.error=function(){var e=new l(null,{status:0,statusText:""});return e.type="error",e};var d=[301,302,303,307,308];l.redirect=function(e,t){if(d.indexOf(t)===-1)throw new RangeError("Invalid status code");return new l(null,{status:t,headers:{location:e}})};var p=function(r,o){return new t(function(t,i){var a;a=c.prototype.isPrototypeOf(r)&&!o?r:new c(r,o);var s={url:a.url,method:a.method,headers:a.headers&&a.headers.originHeaders};"undefined"!=typeof a._bodyInit&&(s.body=a._bodyInit),s.type=o&&o.dataType?o.dataType:"json";var u=e(n).fetch;u(s,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var n="string"==typeof e.data?e.data:JSON.stringify(e.data),r=new l(n,{status:e.status,statusText:e.statusText,headers:e.headers,url:a.url});t(r)}catch(e){i(e)}},function(e){})})};return{fetch:p,Headers:i,Request:c,Response:l}}},function(e,t){function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var r="@weex-module/timer";e.exports=function(e,t){var o=function(){for(var o=arguments,i=arguments.length,a=Array(i),s=0;s<i;s++)a[s]=o[s];var u=e(r),c=function(){a[0].apply(a,n(a.slice(2)))};return u.setTimeout(c,a[1]),t.uid.toString()},i=function(){for(var o=arguments,i=arguments.length,a=Array(i),s=0;s<i;s++)a[s]=o[s];var u=e(r),c=function(){a[0].apply(a,n(a.slice(2)))};return u.setInterval(c,a[1]),t.uid.toString()},a=function(t){var n=e(r);n.clearTimeout(t)},s=function(t){var n=e(r);n.clearInterval(t)},u=function(n){var o=e(r);return o.setTimeout(n,16),t.uid.toString()},c=function(t){var n=e(r);n.clearTimeout(t)};return{setTimeout:o,clearTimeout:a,setInterval:i,clearInterval:s,requestAnimationFrame:u,cancelAnimationFrame:c}}}])}),mc=e(vc),yc={Vanilla:wu,Vue:Du,Rax:mc,Weex:hc},_c={},gc={};Pn.prototype.postMessage=function(e){var t=this;if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var n=_c[this.name];if(n&&n.length)for(var r=0;r<n.length;++r){var o=n[r];
-o._closed||o===t||"function"==typeof o.onmessage&&o.onmessage(new $n("message",{data:e}))}},Pn.prototype.close=function(){var e=this;if(!this._closed&&(this._closed=!0,_c[this.name])){var t=_c[this.name].filter(function(t){return t!==e});t.length?_c[this.name]=t:delete _c[this.name]}};var bc={create:function(e,t,n){if(gc[e]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(t){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(t)}),this._closed=!1,this.onmessage=null,_c[this.name]||(_c[this.name]=[]),_c[this.name].push(this),gc[e].push(this)}};return r.BroadcastChannel.prototype=Pn.prototype,{instance:r}},destroy:function(e,t){gc[e].forEach(function(e){return e.close()}),delete gc[e]}},wc={BroadcastChannel:bc},Cc=su.init,kc=su.config;kc.frameworks=yc;var Oc=Bn.native,xc=Bn.transformer;for(var Ec in wc)su.service.register(Ec,wc[Ec]);su.setNativeConsole(),global.frameworkVersion=Oc,global.transformerVersion=xc;var Sc=Cc(kc),jc=function(e){global[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=Sc[e].apply(Sc,t);return r instanceof Error&&console.error(r.toString()),r}};for(var Ic in Sc)jc(Ic);var Ac=Object.freeze({$userTrack:Mn,$sendMtop:Fn,$callWindvane:qn,$setSpm:Ln,$getUserInfo:Vn,$login:Un,$logout:Jn});global.registerMethods(Ac)});
+(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.20.6, Build 2017-04-24 21:17."),this.getJSFMVersion=function(){return"0.20.6"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),void 0===global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){xs={},global.console=Es}function o(){Ss.forEach(function(e){var t=Ss.indexOf(e);xs[e]={},Ss.forEach(function(n){Ss.indexOf(n)<=t&&(xs[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return xs[t]&&xs[t][e]}function a(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}function s(){if(void 0===setTimeout&&"function"==typeof Cs){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Cs(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=ks,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),l(),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),f(),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(){var e=Object.prototype,t="Object.prototype";d(e,"__defineGetter__",t),d(e,"__defineSetter__",t),d(e,"__lookupGetter__",t),d(e,"__lookupSetter__",t),d(e,"constructor",t),d(e,"hasOwnProperty",t),d(e,"isPrototypeOf",t),d(e,"propertyIsEnumerable",t),d(e,"toLocaleString",t),d(e,"toString",t),d(e,"valueOf",t),Object.seal(e)}function f(){var e=Error.prototype,t="Error.prototype";d(e,"name",t),d(e,"message",t),d(e,"toString",t),d(e,"constructor",t),Object.seal(e)}function d(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){return r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}function p(e,t){e&&(As[e]=t)}function h(e){return As[e]}function v(e){delete As[e]}function m(e){var t=As[e];return t&&t.taskCenter?t.taskCenter:null}function y(){return(Is++).toString()}function _(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,w(t,r)):(t.children.forEach(function(e){e.parentNode=t}),b(e,t),t.docId=e.id,t.ownerDocument=e,w(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),g(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function g(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function b(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function w(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){w(t,e)})}function O(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function S(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function x(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function E(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function k(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function C(){this.nodeId=y(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function j(e,t){if(t&&t.length){var n=function(t){Ts.call(this,e,t,!0)};n.prototype=Object.create(Ts.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:Ts}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=m(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Ps[e]=n}}function A(e,t,n){void 0===e&&(e=Ns);var r=Ps[e];if(r&&!n)return new r(t);t=t||{},this.nodeType=1,this.nodeId=y(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],this.pureChildren=[]}function I(e,t){h(e).nodeMap[t.nodeId]=t}function T(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=$s.prototype;for(var n in e)!function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Ms(e,[{module:"dom",method:n,args:t}],"-1")}}(n);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Ms(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Ms(e,[{module:t,method:n,args:r}])}}function P(e,t){M(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Fs.push({name:e,options:t}))}function N(e){Fs.some(function(t,n){if(t.name===e)return Fs.splice(n,1),!0})}function M(e){return $(e)>=0}function $(e){return Fs.map(function(e){return e.name}).indexOf(e)}function R(e){var t,n=Ls.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function D(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Fs.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function F(e,t,n,r){var o=Bs[e];if(!o){o=R(t)||{},Rs[o.framework]||(o.framework="Weex"),n=JSON.parse(JSON.stringify(n||{})),n.bundleVersion=o.version,n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),console.debug("[JS Framework] create an "+o.framework+"@"+n.bundleVersion+" instance from "+n.bundleVersion);var i={info:o,config:n,created:Date.now(),framework:o.framework};return i.services=D(e,i,Ds),Bs[e]=i,Rs[o.framework].createInstance(e,t,n,r,i)}return new Error('invalid instance id "'+e+'"')}function L(e){Us[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&B(t[0]);for(var r in Rs){var o=Rs[r];o&&o[e]&&o[e].apply(o,t)}}}function B(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&j(e.type,e.methods)})}function U(e){Us[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Bs[r];if(o&&Rs[o.framework]){var i=(a=Rs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Fs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Ds})}):"destroyInstance"===e&&(Fs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Ds})}),delete Bs[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function V(e,t){Us[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Bs[r];return o&&Rs[o.framework]?(i=Rs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function z(e){Ds=e||{},Rs=Ds.frameworks||{},T();for(var t in Rs){Rs[t].init(e)}return["registerComponents","registerModules","registerMethods"].forEach(L),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(U),V("receiveTasks","callJS"),Us}function W(e){this.nodeType=8,this.nodeId=y(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function q(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")}function J(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function H(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=X(e,t[r],n);if(-1===o)return o}}}function G(e,t){return"dom"===e&&Vs[t]&&"function"==typeof global[Vs[t]]}function X(e,t,n){var r=t.module,o=t.method,i=t.args;return G(r,o)?global[Vs[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function K(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,p(e,this),this.nodeMap={};var r=K.Listener||q;this.listener=new r(e,n||H(e,K.handler)),this.taskCenter=new $s(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:K.handler),this.createDocumentElement()}function Z(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}function Q(){c(),Object.freeze(zs.Element),Object.freeze(zs.Comment),Object.freeze(zs.Listener),Object.freeze(zs.Document.prototype),Object.freeze(zs.Element.prototype),Object.freeze(zs.Comment.prototype),Object.freeze(zs.Listener.prototype)}function Y(e){Js.Document=e.Document,Js.Element=e.Element,Js.Comment=e.Comment,Js.sendTasks=e.sendTasks}function ee(e){}function te(e){}function ne(e){}function re(e,t,n){}function oe(e,t,n,r,o){var i=new Js.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},Hs[e]=i;var u=Object.assign({Document:Js.Document,Element:Js.Element,Comment:Js.Comment,sendTasks:Js.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);return c.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(c)))).apply(void 0,l)}function ie(e,t){}function ae(e){delete Hs[e]}function se(e){return Hs[e].body.toJSON()}function ue(e,t){var n={fireEvent:function(e,t,n,r,o){var i=Hs[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return Hs[e].handleCallback(t,n,r)}};if(Hs[e]&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}function ce(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._ids[e];if(t)return t.el}function fe(e){var t=this._ids[e];if(t)return t.vm}function de(e){return this._app.differ.then(function(){e()})}function pe(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);if(n){this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})}}function he(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function ve(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function me(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)}function ye(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)}function _e(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)}function ge(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function be(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&be.apply(void 0,[e].concat(t))}return e}function we(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function Oe(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function Se(e,t){return bu.call(e,t)}function xe(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function Ee(e){return null!==e&&"object"==typeof e}function ke(e){return wu.call(e)===Ou}function Ce(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function je(){return"object"==typeof nativeSet?nativeSet.create():new Ws}function Ae(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function Ie(e){return e.replace(xu,"").replace(Eu,"")}function Te(e){return e.replace(ku,"")}function Pe(){this.id=Tu++,this.subs=[]}function Ne(e){Pe.target&&Pu.push(Pe.target),Pe.target=e}function Me(){Pe.target=Pu.pop()}function $e(){Pe.target=null,Pu=[]}function Re(e,t,n,r){r&&be(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++Nu,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=je(),this.newDepIds=je(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function De(e,t){var n,r,o,i;if(t||(t=Mu,t.clear()),o=Array.isArray(e),i=Ee(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)De(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)De(e[r[n]],t)}}function Fe(e){if(this.value=e,this.dep=new Pe,we(e,"__ob__",this),Array.isArray(e)){(Su?Le:Be)(e,Ru,Du),this.observeArray(e)}else this.walk(e)}function Le(e,t){e.__proto__=t}function Be(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];we(e,i,t[i])}}function Ue(e,t){if(Ee(e)){var n;return Se(e,"__ob__")&&e.__ob__ instanceof Fe?n=e.__ob__:(Array.isArray(e)||ke(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Fe(e)),n&&t&&n.addVm(t),n}}function Ve(e,t,n){var r=new Pe,o=Object.getOwnPropertyDescriptor(e,t);if(!o||!1!==o.configurable){var i=o&&o.get,a=o&&o.set,s=Ue(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Pe.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){t!==(i?i.call(e):n)&&(a?a.call(e,t):n=t,s=Ue(t),r.notify())}})}}function ze(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(Se(e,t))return void(e[t]=n);if(e._isVue)return void ze(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];qe(i,t)}return n}function We(e,t){if(Se(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];Je(o,t)}}}function qe(e,t){(Fu.indexOf(t)>-1||!Ce(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Je(e,t){Ce(t)||delete e[t]}function He(e){e._watchers=[],Ge(e),Ke(e),Qe(e)}function Ge(e){var t=e._data;ke(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)qe(e,n[r]);Ue(t,e)}function Xe(){}function Ke(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=Ze(r,e),o.set=Xe):(o.get=r.get?!1!==r.cache?Ze(r.get,e):xe(r.get,e):Xe,o.set=r.set?xe(r.set,e):Xe),Object.defineProperty(e,n,o)}}function Ze(e,t){var n=new Re(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Pe.target&&n.depend(),n.value}}function Qe(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Ye(e){var t=e.type,n=Bu[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Ae(e[r])&&"object"===Ae(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function et(e,t,n){at(e,t,n.id,e),st(e,t,n.attr),ct(e,t,n.classList),lt(e,t,n.style),dt(e,t,n.events)}function tt(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),rt(r,i,e,t),rt(n.attr,i,e,t)}function nt(e,t,n,r){void 0===r&&(r={}),it(n.classList,e,t),ot(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function rt(e,t,n,r){if(e){for(var o in e)!function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=vt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}}(o)}}function ot(e,t,n){for(var r in e)!function(r){var o=e[r];if("function"==typeof o){var i=vt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)}(r)}function it(e,t,n){function r(e,t){"array"===Ae(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=vt(t,e,function(e){r(e,i),ut(n._rootEl,o,e)});r(a,i),ut(n._rootEl,o,a)}else null!=e&&(r(e,i),ut(n._rootEl,o,e))}}function at(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),vt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function st(e,t,n){pt(e,t,"attr",n)}function ut(e,t,n){for(var r={},o=n.length,i=0;i<o;i++)!function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})}(i);e.setClassStyle(r)}function ct(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=vt(e,n,function(e){ut(t,r,e)});ut(t,r,o)}else ut(t,r,n)}}function lt(e,t,n){pt(e,t,"style",n)}function ft(e,t,n,r){t.addEvent(n,xe(r,e))}function dt(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ft(e,t,i,a)}}function pt(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?ht(e,t,n,a,s):t[Uu[n]](a,s)}}function ht(e,t,n,r,o){var i=Uu[n],a=vt(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function vt(e,t,n){return e._static?t.call(e,e):new Re(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function mt(e,t){return e._app.doc.createBody(t)}function yt(e,t){return e._app.doc.createElement(t)}function _t(e,t){var n=gt(e),r=bt(e),o=Vu++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function gt(e){return e._app.doc.createComment("start")}function bt(e){return e._app.doc.createComment("end")}function wt(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=Ot(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function Ot(e,t,n){return t.element?xt(t,n):St(t,n)}function St(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function xt(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}function Et(e,t,n){void 0===n&&(n=!1),t.element?Ct(t,n):kt(t),t._vm&&t._vm.$emit("hook:destroyed")}function kt(e){var t=e.parentNode;t&&t.removeChild(e)}function Ct(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||kt(e.start),n.forEach(function(e){kt(e)}),t||kt(e.end)}function jt(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?At(e,n.children[0],e._parentEl):At(e,n.children,e._parentEl):At(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function At(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),It(t))return void Rt(e,t,n,r);if(r=r||{},Tt(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=_t(e,n));if(Pt(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):Dt(e,t,n));if(Nt(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Ft(e,t,n,r));var o=r.type||t.type;if(Mt(o,r))return void Lt(e,t,n,o,r);var i=o,a=$t(e,t,i);if(a)return console.debug("[JS Framework] compile composed component by",t),void Bt(e,a,t,n,i,r);console.debug("[JS Framework] compile native component by",t),Ut(e,t,n,i)}}function It(e){return Array.isArray(e)}function Tt(e){return"content"===e.type||"slot"===e.type}function Pt(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Nt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Mt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function $t(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Rt(e,t,n,r){var o=_t(e,n);t.forEach(function(t){At(e,t,o,r)})}function Dt(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=_t(e,n);c.children=[],c.data=[],c.vms=[],zt(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Ft(e,t,n,r){var o={shown:!0},i=_t(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Wt(e,t,i,o)}function Lt(e,t,n,r,o){var i=r.call(e),a=be({type:i},o),s=_t(e,n);n.element&&n.children&&n.children.push(s),vt(e,r,function(n){var r=be({type:n},o);Et(e,s,!0),At(e,t,s,r)}),At(e,t,s,a)}function Bt(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),at(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){tt(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Vt(e,n,this._content)}});nt(e,s,n,r)}function Ut(e,t,n,r){Ye(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=mt(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=yt(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,xe(c,s))}}et(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};-1===f.lastSignal||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=wt(e,o,n)),-1!==f.lastSignal&&Vt(e,t,o),-1!==f.lastSignal&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=wt(e,o,n))}function Vt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return At(e,t,n),-1!==r.lastSignal})}function zt(e,t,n,r){function o(e,r,o){var a;c?(a=e,Ee(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Jt(o,a);i.push(s),At(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=qt(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):Et(e,r[n])}),a.length=0,i.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),Ot(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function Wt(e,t,n,r){var o=qt(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?At(e,t,n,r):Et(e,n,!0))});n.display=!!o,o&&At(e,t,n,r)}function qt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return vt(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Jt(e,t){var n=Object.create(e);return n._data=t,Ge(n),Ke(n),n._realParent=e,e._static&&(n._static=e._static),n}function Ht(e,t){if(t instanceof Ht)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Gt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Ht(e,t);o.forEach(function(e){e.call(n,i)})}}function Xt(e,t){var n=new Ht(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Kt(e,t){var n=new Ht(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Zt(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Qt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Yt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);zu.forEach(function(t){e.$on("hook:"+t,n[t])})}function en(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,Yt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&be(this._data,o),He(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,jt(this))}function tn(e,t){for(var n in e)!function(n){var r=Wu[n];r||(r={},Wu[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})}(n)}function nn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function rn(e,t){var n=Wu[t],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})}(o);return r}function on(e,t){return e.customComponentMap[t]}function an(e,t,n){var r=e.customComponentMap;if(r[t])return void console.error("[JS Framework] define a component("+t+") that already exists");r[t]=n}function sn(e){if(qu.valid(e))return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function un(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n}(e,t,n),o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function cn(e,t){t=t||global.WXEnvironment,t=ke(t)?t:{};var n={isDowngrade:!1};if("function"===Ae(e)){var r=e.call(this,t,{semver:qu,normalizeVersion:sn});r=!!r,n=r?un("custom","","custom params"):n}else{e=ke(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=sn(p),v=sn(t[s]);if(qu.satisfies(v,h)){n=un(u,l,p);break}}else if(d){var m="array"===Ae(p)?p:[p];if(m.indexOf(l)>=0){n=un(u,l,p);break}}}}return n}function ln(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function fn(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Cu(t))o=Ie(t);else{if(!Iu(t))return new Error("Wrong component name: "+t);if(o=Te(t),!on(e,o))return new Error("It's not a component: "+t)}if(n=ke(n)?n:{},
+"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!qu.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=cn(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&ln(e,n.viewport),e.vm=new en(o,null,{_app:e},null,r)}function dn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),an(e,t,n)}function pn(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):be(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}function hn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&vn(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function vn(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)vn(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function mn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function yn(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t){return!1!==yn(e,t,n,r)});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function _n(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return gn(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function gn(e){e.differ.flush()}function bn(e,t){var n;return"array"!==Ae(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function wn(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return Ju.apply(void 0,[e].concat(t))},a=function(t,r,i){o=fn(e,t,r,i||n),gn(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=en,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return dn.apply(void 0,[e].concat(t))},c=function(t,n){o=fn(e,t,{},n)},l=function(t){return function(n){o=fn(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(Ie(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return Sn(_,h)||On(_,h),o}function On(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function Sn(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=compileAndRunBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}function xn(e,t){var n=e[t];for(var r in n)n[r]()}function En(e,t){var n=e[t];for(var r in n){n[r].forEach(function(e){e()})}}function kn(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Lu.Document(e,this.options.bundleUrl,null,Lu.Listener),this.differ=new Hu(e)}function Cn(e,t,n,r,o){var i=o||{},a=i.services;$e();var s=Gu[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new kn(e,n),Gu[e]=s,u=wn(s,t,r,a)),u}function jn(e){Lu.Document=e.Document,Lu.Element=e.Element,Lu.Comment=e.Comment,Lu.sendTasks=e.sendTasks,Lu.Listener=e.Listener}function An(e,t){var n=Gu[e];return n?pn(n,t):new Error('invalid instance id "'+e+'"')}function In(e){"function"==typeof markupState&&markupState(),$e();var t=Gu[e];if(!t)return new Error('invalid instance id "'+e+'"');hn(t),delete Gu[e];var n=Math.round(e);if(n>0){n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()}return Gu}function Tn(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Xu[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(Xu[e.type]=e))})}function Pn(e){"object"==typeof e&&tn(e)}function Nn(e){"object"==typeof e&&nn(en,e)}function Mn(e,t){if(Gu[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=Ku[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function $n(e){var t=Gu[e];return t?mn(t):new Error('invalid instance id "'+e+'"')}function Rn(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Dn(){}function Fn(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)}function Ln(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window){this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t)}else{this._app.requireModule("stream").sendMtop(e,t)}}function Bn(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)}function Un(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)}function Vn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule("user").getUserInfo(e)}function zn(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)}function Wn(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}var qn={browser:"0.5.0",framework:"0.20.6","vue-render":"0.11.5",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if(void 0!==a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],c[l]=a?void 0===i?a(s,l):a.call(i,s,l):s,l+=1;return c.length=u,c}}());var Jn="undefined"!=typeof window?window:void 0!==global?global:"undefined"!=typeof self?self:{},Hn=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Gn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Xn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Kn=Xn,Zn=function(e){if(!Kn(e))throw TypeError(e+" is not an object!");return e},Qn=function(e){try{return!!e()}catch(e){return!0}},Yn=!Qn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),er=Xn,tr=Hn.document,nr=er(tr)&&er(tr.createElement),rr=function(e){return nr?tr.createElement(e):{}},or=!Yn&&!Qn(function(){return 7!=Object.defineProperty(rr("div"),"a",{get:function(){return 7}}).a}),ir=Xn,ar=function(e,t){if(!ir(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!ir(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!ir(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!ir(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},sr=Zn,ur=or,cr=ar,lr=Object.defineProperty,fr=Yn?Object.defineProperty:function(e,t,n){if(sr(e),t=cr(t,!0),sr(n),ur)try{return lr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},dr={f:fr},pr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},hr=dr,vr=pr,mr=Yn?function(e,t,n){return hr.f(e,t,vr(1,n))}:function(e,t,n){return e[t]=n,e},yr={}.hasOwnProperty,_r=function(e,t){return yr.call(e,t)},gr=0,br=Math.random(),wr=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++gr+br).toString(36))},Or=t(function(e){var t=Hn,n=mr,r=_r,o=wr("src"),i=Function.toString,a=(""+i).split("toString");Gn.inspectSource=function(e){return i.call(e)},(e.exports=function(e,i,s,u){var c="function"==typeof s;c&&(r(s,"name")||n(s,"name",i)),e[i]!==s&&(c&&(r(s,o)||n(s,o,e[i]?""+e[i]:a.join(String(i)))),e===t?e[i]=s:u?e[i]?e[i]=s:n(e,i,s):(delete e[i],n(e,i,s)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||i.call(this)})}),Sr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},xr=Sr,Er=function(e,t,n){if(xr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},kr=Hn,Cr=Gn,jr=mr,Ar=Or,Ir=Er,Tr=function(e,t,n){var r,o,i,a,s=e&Tr.F,u=e&Tr.G,c=e&Tr.S,l=e&Tr.P,f=e&Tr.B,d=u?kr:c?kr[t]||(kr[t]={}):(kr[t]||{}).prototype,p=u?Cr:Cr[t]||(Cr[t]={}),h=p.prototype||(p.prototype={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Ir(i,kr):l&&"function"==typeof i?Ir(Function.call,i):i,d&&Ar(d,r,i,e&Tr.U),p[r]!=i&&jr(p,r,a),l&&h[r]!=i&&(h[r]=i)};kr.core=Cr,Tr.F=1,Tr.G=2,Tr.S=4,Tr.P=8,Tr.B=16,Tr.W=32,Tr.U=64,Tr.R=128;var Pr=Tr,Nr={}.toString,Mr=function(e){return Nr.call(e).slice(8,-1)},$r=Mr,Rr=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==$r(e)?e.split(""):Object(e)},Dr=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Fr=Rr,Lr=Dr,Br=function(e){return Fr(Lr(e))},Ur=Math.ceil,Vr=Math.floor,zr=function(e){return isNaN(e=+e)?0:(e>0?Vr:Ur)(e)},Wr=zr,qr=Math.min,Jr=function(e){return e>0?qr(Wr(e),9007199254740991):0},Hr=zr,Gr=Math.max,Xr=Math.min,Kr=function(e,t){return e=Hr(e),e<0?Gr(e+t,0):Xr(e,t)},Zr=Br,Qr=Jr,Yr=Kr,eo=Hn,to=eo["__core-js_shared__"]||(eo["__core-js_shared__"]={}),no=function(e){return to[e]||(to[e]={})},ro=no("keys"),oo=wr,io=function(e){return ro[e]||(ro[e]=oo(e))},ao=_r,so=Br,uo=function(e){return function(t,n,r){var o,i=Zr(t),a=Qr(i.length),s=Yr(r,a);if(e&&n!=n){for(;a>s;)if((o=i[s++])!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}}(!1),co=io("IE_PROTO"),lo=function(e,t){var n,r=so(e),o=0,i=[];for(n in r)n!=co&&ao(r,n)&&i.push(n);for(;t.length>o;)ao(r,n=t[o++])&&(~uo(i,n)||i.push(n));return i},fo="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),po=lo,ho=fo,vo=Object.keys||function(e){return po(e,ho)},mo=Object.getOwnPropertySymbols,yo={f:mo},_o={}.propertyIsEnumerable,go={f:_o},bo=Dr,wo=function(e){return Object(bo(e))},Oo=vo,So=yo,xo=go,Eo=wo,ko=Rr,Co=Object.assign,jo=!Co||Qn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Co({},e)[n]||Object.keys(Co({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=Eo(e),o=arguments.length,i=1,a=So.f,s=xo.f;o>i;)for(var u,c=ko(n[i++]),l=a?Oo(c).concat(a(c)):Oo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Co,Ao=Pr;Ao(Ao.S+Ao.F,"Object",{assign:jo}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,"__proto__").set,r.call({},null)}catch(t){if(e.prototype!=={}.__proto__||void 0==={__proto__:null}.__proto__)return;r=function(e){this.__proto__=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object));var Io=Jn,To=Io.WXEnvironment;To&&"iOS"===To.platform&&(Jn.Promise=void 0);var Po=t(function(e){var t=no("wks"),n=wr,r=Hn.Symbol,o="function"==typeof r;(e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))}).store=t}),No=Mr,Mo=Po("toStringTag"),$o="Arguments"==No(function(){return arguments}()),Ro=function(e,t){try{return e[t]}catch(e){}},Do=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=Ro(t=Object(e),Mo))?n:$o?No(t):"Object"==(r=No(t))&&"function"==typeof t.callee?"Arguments":r},Fo=Do,Lo={};Lo[Po("toStringTag")]="z",Lo+""!="[object z]"&&Or(Object.prototype,"toString",function(){return"[object "+Fo(this)+"]"},!0);var Bo=zr,Uo=Dr,Vo={},zo=dr,Wo=Zn,qo=vo,Jo=Yn?Object.defineProperties:function(e,t){Wo(e);for(var n,r=qo(t),o=r.length,i=0;o>i;)zo.f(e,n=r[i++],t[n]);return e},Ho=Hn.document&&document.documentElement,Go=Zn,Xo=Jo,Ko=fo,Zo=io("IE_PROTO"),Qo=function(){},Yo=function(){var e,t=rr("iframe"),n=Ko.length;for(t.style.display="none",Ho.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("<script>document.F=Object<\/script>"),e.close(),Yo=e.F;n--;)delete Yo.prototype[Ko[n]];return Yo()},ei=Object.create||function(e,t){var n;return null!==e?(Qo.prototype=Go(e),n=new Qo,Qo.prototype=null,n[Zo]=e):n=Yo(),void 0===t?n:Xo(n,t)},ti=dr.f,ni=_r,ri=Po("toStringTag"),oi=function(e,t,n){e&&!ni(e=n?e:e.prototype,ri)&&ti(e,ri,{configurable:!0,value:t})},ii=ei,ai=pr,si=oi,ui={};mr(ui,Po("iterator"),function(){return this});var ci=function(e,t,n){e.prototype=ii(ui,{next:ai(1,n)}),si(e,t+" Iterator")},li=_r,fi=wo,di=io("IE_PROTO"),pi=Object.prototype,hi=Object.getPrototypeOf||function(e){return e=fi(e),li(e,di)?e[di]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?pi:null},vi=Pr,mi=Or,yi=mr,_i=_r,gi=Vo,bi=ci,wi=oi,Oi=hi,Si=Po("iterator"),xi=!([].keys&&"next"in[].keys()),Ei=function(){return this},ki=function(e,t,n,r,o,i,a){bi(n,t,r);var s,u,c,l=function(e){if(!xi&&e in h)return h[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d="values"==o,p=!1,h=e.prototype,v=h[Si]||h["@@iterator"]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=Oi(_.call(new e)))!==Object.prototype&&(wi(c,f,!0),_i(c,Si)||yi(c,Si,Ei)),d&&v&&"values"!==v.name&&(p=!0,m=function(){return v.call(this)}),(xi||p||!h[Si])&&yi(h,Si,m),gi[t]=m,gi[f]=Ei,o)if(s={values:d?m:l("values"),keys:i?m:l("keys"),entries:y},a)for(u in s)u in h||mi(h,u,s[u]);else vi(vi.P+vi.F*(xi||p),t,s);return s},Ci=function(e){return function(t,n){var r,o,i=String(Uo(t)),a=Bo(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):o-56320+(r-55296<<10)+65536)}}(!0);ki(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Ci(t,n),this._i+=e.length,{value:e,done:!1})});var ji=Po("unscopables"),Ai=Array.prototype;void 0==Ai[ji]&&mr(Ai,ji,{});var Ii=function(e){Ai[ji][e]=!0},Ti=function(e,t){return{value:t,done:!!e}},Pi=Ii,Ni=Ti,Mi=Vo,$i=Br,Ri=ki(Array,"Array",function(e,t){this._t=$i(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ni(1)):"keys"==t?Ni(0,n):"values"==t?Ni(0,e[n]):Ni(0,[n,e[n]])},"values");Mi.Arguments=Mi.Array,Pi("keys"),Pi("values"),Pi("entries");for(var Di=Ri,Fi=Or,Li=Hn,Bi=mr,Ui=Vo,Vi=Po,zi=Vi("iterator"),Wi=Vi("toStringTag"),qi=Ui.Array,Ji=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],Hi=0;Hi<5;Hi++){var Gi,Xi=Ji[Hi],Ki=Li[Xi],Zi=Ki&&Ki.prototype;if(Zi){Zi[zi]||Bi(Zi,zi,qi),Zi[Wi]||Bi(Zi,Wi,Xi),Ui[Xi]=qi;for(Gi in Di)Zi[Gi]||Fi(Zi,Gi,Di[Gi],!0)}}var Qi,Yi,ea,ta=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},na=Zn,ra=function(e,t,n,r){try{return r?t(na(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&na(o.call(e)),t}},oa=Vo,ia=Po("iterator"),aa=Array.prototype,sa=function(e){return void 0!==e&&(oa.Array===e||aa[ia]===e)},ua=Do,ca=Po("iterator"),la=Vo,fa=Gn.getIteratorMethod=function(e){if(void 0!=e)return e[ca]||e["@@iterator"]||la[ua(e)]},da=t(function(e){var t=Er,n=ra,r=sa,o=Zn,i=Jr,a=fa,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if((m=c?_(o(h=e[g])[0],h[1]):_(e[g]))===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if((m=n(v,_,h.value,c))===s||m===u)return m};c.BREAK=s,c.RETURN=u}),pa=Zn,ha=Sr,va=Po("species"),ma=function(e,t){var n,r=pa(e).constructor;return void 0===r||void 0==(n=pa(r)[va])?t:ha(n)},ya=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},_a=Er,ga=ya,ba=Ho,wa=rr,Oa=Hn,Sa=Oa.process,xa=Oa.setImmediate,Ea=Oa.clearImmediate,ka=Oa.MessageChannel,Ca=0,ja={},Aa=function(){var e=+this;if(ja.hasOwnProperty(e)){var t=ja[e];delete ja[e],t()}},Ia=function(e){Aa.call(e.data)};xa&&Ea||(xa=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return ja[++Ca]=function(){ga("function"==typeof e?e:Function(e),n)},Qi(Ca),Ca},Ea=function(e){delete ja[e]},"process"==Mr(Sa)?Qi=function(e){Sa.nextTick(_a(Aa,e,1))}:ka?(Yi=new ka,ea=Yi.port2,Yi.port1.onmessage=Ia,Qi=_a(ea.postMessage,ea,1)):Oa.addEventListener&&"function"==typeof postMessage&&!Oa.importScripts?(Qi=function(e){Oa.postMessage(e+"","*")},Oa.addEventListener("message",Ia,!1)):Qi="onreadystatechange"in wa("script")?function(e){ba.appendChild(wa("script")).onreadystatechange=function(){ba.removeChild(this),Aa.call(e)}}:function(e){setTimeout(_a(Aa,e,1),0)});var Ta={set:xa,clear:Ea},Pa=Hn,Na=Ta.set,Ma=Pa.MutationObserver||Pa.WebKitMutationObserver,$a=Pa.process,Ra=Pa.Promise,Da="process"==Mr($a),Fa=Or,La=Hn,Ba=dr,Ua=Yn,Va=Po("species"),za=Po("iterator"),Wa=!1;try{var qa=[7][za]();qa.return=function(){Wa=!0},Array.from(qa,function(){throw 2})}catch(e){}var Ja,Ha,Ga,Xa=Hn,Ka=Er,Za=Do,Qa=Pr,Ya=Xn,es=Sr,ts=ta,ns=da,rs=ma,os=Ta.set,is=function(){var e,t,n,r=function(){var r,o;for(Da&&(r=$a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Da)n=function(){$a.nextTick(r)};else if(Ma){var o=!0,i=document.createTextNode("");new Ma(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(Ra&&Ra.resolve){var a=Ra.resolve();n=function(){a.then(r)}}else n=function(){Na.call(Pa,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}(),as=Xa.TypeError,ss=Xa.process,us=Xa.Promise,ss=Xa.process,cs="process"==Za(ss),ls=function(){},fs=!!function(){try{var e=us.resolve(1),t=(e.constructor={})[Po("species")]=function(e){e(ls,ls)};return(cs||"function"==typeof PromiseRejectionEvent)&&e.then(ls)instanceof t}catch(e){}}(),ds=function(e,t){return e===t||e===us&&t===Ga},ps=function(e){var t;return!(!Ya(e)||"function"!=typeof(t=e.then))&&t},hs=function(e){return ds(us,e)?new vs(e):new Ha(e)},vs=Ha=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw as("Bad Promise constructor");t=e,n=r}),this.resolve=es(t),this.reject=es(n)},ms=function(e){try{e()}catch(e){return{error:e}}},ys=function(e,t){if(!e._n){e._n=!0;var n=e._c;is(function(){for(var r=e._v,o=1==e._s,i=0;n.length>i;)!function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&bs(e),e._h=1),!0===a?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(as("Promise-chain cycle")):(i=ps(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}}(n[i++]);e._c=[],e._n=!1,t&&!e._h&&_s(e)})}},_s=function(e){os.call(Xa,function(){var t,n,r,o=e._v;if(gs(e)&&(t=ms(function(){cs?ss.emit("unhandledRejection",o,e):(n=Xa.onunhandledrejection)?n({promise:e,reason:o}):(r=Xa.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=cs||gs(e)?2:1),e._a=void 0,t)throw t.error})},gs=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!gs(t.promise))return!1;return!0},bs=function(e){os.call(Xa,function(){var t;cs?ss.emit("rejectionHandled",e):(t=Xa.onrejectionhandled)&&t({promise:e,reason:e._v})})},ws=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),ys(t,!0))},Os=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw as("Promise can't be resolved itself");(t=ps(e))?is(function(){var r={_w:n,_d:!1};try{t.call(e,Ka(Os,r,1),Ka(ws,r,1))}catch(e){ws.call(r,e)}}):(n._v=e,n._s=1,ys(n,!1))}catch(e){ws.call({_w:n,_d:!1},e)}}};fs||(us=function(e){ts(this,us,"Promise","_h"),es(e),Ja.call(this);try{e(Ka(Os,this,1),Ka(ws,this,1))}catch(e){ws.call(this,e)}},Ja=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},Ja.prototype=function(e,t,n){for(var r in t)Fa(e,r,t[r],n);return e}(us.prototype,{then:function(e,t){var n=hs(rs(this,us));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=cs?ss.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&ys(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),vs=function(){var e=new Ja;this.promise=e,this.resolve=Ka(Os,e,1),this.reject=Ka(ws,e,1)}),Qa(Qa.G+Qa.W+Qa.F*!fs,{Promise:us}),oi(us,"Promise"),function(e){var t=La[e];Ua&&t&&!t[Va]&&Ba.f(t,Va,{configurable:!0,get:function(){return this}})}("Promise"),Ga=Gn.Promise,Qa(Qa.S+Qa.F*!fs,"Promise",{reject:function(e){var t=hs(this);return(0,t.reject)(e),t.promise}}),Qa(Qa.S+Qa.F*!fs,"Promise",{resolve:function(e){if(e instanceof us&&ds(e.constructor,this))return e;var t=hs(this);return(0,t.resolve)(e),t.promise}}),Qa(Qa.S+Qa.F*!(fs&&function(e,t){if(!t&&!Wa)return!1;var n=!1;try{var r=[7],o=r[za]();o.next=function(){return{done:n=!0}},r[za]=function(){return o},e(r)}catch(e){}return n}(function(e){us.all(e).catch(ls)})),"Promise",{all:function(e){var t=this,n=hs(t),r=n.resolve,o=n.reject,i=ms(function(){var n=[],i=0,a=1;ns(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=hs(t),r=n.reject,o=ms(function(){ns(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var Ss=["off","error","warn","info","log","debug"],xs={},Es=global.console,ks=global.setTimeout,Cs=global.setTimeoutNative;s();var js=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};js.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},js.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},js.prototype.consume=function(e,t,n){var r=this.callbacks[e];return void 0!==n&&!1!==n||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},js.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var As={},Is=1;C.prototype.destroy=function(){var e=h(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var Ts,Ps={},Ns="div";A.prototype=Object.create(C.prototype),A.prototype.constructor=A,function(e){Ts=e}(A),Object.assign(A.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(E(e,this.children,this.children.length,!0),1===e.nodeType){var t=E(e,this.pureChildren,this.pureChildren.length),n=m(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(w(e,this),x(e,this.children,this.children.length,!0),this.docId&&I(this.docId,e),1===e.nodeType){x(e,this.pureChildren,this.pureChildren.length);var r=m(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(E(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=O(t),r=E(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=m(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(w(e,this),x(e,this.children,this.children.indexOf(t),!0),this.docId&&I(this.docId,e),1===e.nodeType){var i=O(t),a=x(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=m(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(E(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=E(e,this.pureChildren,this.pureChildren.indexOf(S(t))+1),r=m(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(w(e,this),x(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&I(this.docId,e),1===e.nodeType){var o=x(e,this.pureChildren,this.pureChildren.indexOf(S(t))+1),i=m(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(k(e,this.children,!0),1===e.nodeType)){k(e,this.pureChildren);var n=m(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=m(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||!1===n){this.attr[e]=t;var r=m(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||!1===n){this.style[e]=t;var r=m(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=m(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=m(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=m(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}});var Ms=function(){},$s=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new js}),Ms=t||function(){}};$s.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},$s.prototype.destroyCallback=function(){return this.callbackManager.close()},$s.prototype.typof=function(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()},$s.prototype.normalize=function(e){switch(this.typof(e)){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof A?e.ref:e;case"function":return this.callbackManager.add(e).toString();default:return JSON.stringify(e)}},$s.prototype.send=function(e,t,n){var r=this,o=t.action,i=t.component,a=t.ref,s=t.module,u=t.method;switch(n=n.map(function(e){return r.normalize(e)}),e){case"dom":return this[o](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,a,u,n,{component:i});default:return this.moduleHandler(this.instanceId,s,u,n,{})}},$s.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},$s.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},$s.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var Rs,Ds,Fs=[],Ls=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,Bs={},Us={createInstance:F,registerService:P,unregisterService:N};W.prototype=Object.create(C.prototype),W.prototype.constructor=W,W.prototype.toString=function(){return"\x3c!-- "+this.value+" --\x3e"},Object.assign(q.prototype,{createFinish:function(e){return(0,this.handler)([J("createFinish")],e)},updateFinish:function(e){return(0,this.handler)([J("updateFinish")],e)},refreshFinish:function(e){return(0,
+this.handler)([J("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[J("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return J("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(J("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return J("removeElement",[e])});return this.addActions(t)}return this.addActions(J("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(J("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(J("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(J("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(J("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(J("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(J("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;if(Array.isArray(e)||(e=[e]),!this.batched)return n(e);t.push.apply(t,e)}});var Vs={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};K.handler=null,Object.assign(K.prototype,{getRef:function(e){return this.nodeMap[e]},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new A("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){_(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){_(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){b(this,new A(e,t))}return this.body},createElement:function(e,t){return new A(e,t)},createComment:function(e){return new W(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&Z(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,v(this.id)}});var zs={Document:K,Element:A,Comment:W,Listener:q,TaskCenter:$s,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return global.callNative.apply(global,e)}};K.handler=zs.sendTasks;var Ws,qs={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:P,unregister:N,has:M},freezePrototype:Q,init:z,config:zs},Js={},Hs={},Gs=Y,Xs=ee,Ks=te,Zs=ne,Qs=re,Ys=oe,eu=ie,tu=ae,nu=se,ru=ue,ou={init:Gs,registerComponents:Xs,registerModules:Ks,registerMethods:Zs,prepareInstance:Qs,createInstance:Ys,refreshInstance:eu,destroyInstance:tu,getRoot:nu,receiveTasks:ru},iu=Object.freeze({default:ou,__moduleExports:ou,init:Gs,registerComponents:Xs,registerModules:Ks,registerMethods:Zs,prepareInstance:Qs,createInstance:Ys,refreshInstance:eu,destroyInstance:tu,getRoot:nu,receiveTasks:ru}),au=function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e);return isNaN(t)?e:t}function o(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return an.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function c(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return ln.call(e)===fn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e,t){var n=d(e),r=d(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){return e===t}}function y(e,t){for(var n=0;n<e.length;n++)if(m(e[n],t))return n;return-1}function _(e){var t=!1;return function(){t||(t=!0,e())}}function g(e){return/native code/.test(e.toString())}function b(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function w(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function O(e){if(!En.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function S(e){jn.target&&An.push(jn.target),jn.target=e}function x(){jn.target=An.pop()}function E(e,t){e.__proto__=t}function k(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];w(e,i,t[i])}}function C(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof Mn?n=e.__ob__:Nn.shouldConvert&&!bn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Mn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new jn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||!1!==i.configurable){var a=i&&i.get,s=i&&i.set,u=C(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return jn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,u=C(t),o.notify())}})}}function A(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(j(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function I(e,t){if(Array.isArray(e))return void e.splice(t,1);var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&T(t)}function P(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&P(r,o):A(e,n,o);return e}function N(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function M(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)"string"==typeof(r=t[n])&&(o=sn(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=sn(a),i[o]=p(r)?r:{type:r};e.props=i}}function R(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function D(e,t,n){function r(r){var o=$n[r]||Rn;l[r]=o(e[r],t[r],n,r)}$(t),R(t);var o=t.extends;if(o&&(e="function"==typeof o?D(e,o.options,n):D(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof rt&&(u=u.options),e=D(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=sn(n);if(a(o,i))return o[i];var s=un(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function L(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(V(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:V(String,o.type)||""!==s&&s!==cn(e)||(s=!0)),void 0===s){s=B(r,o,e);var u=Nn.shouldConvert;Nn.shouldConvert=!0,C(s),Nn.shouldConvert=u}return s}function B(e,t,n){if(a(t,"default")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==U(t.type)?r.call(e):r}}function U(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function V(e,t){if(!Array.isArray(t))return U(t)===U(e);for(var n=0,r=t.length;n<r;n++)if(U(t[n])===U(e))return!0;return!1}function z(e,t,n){if(hn.errorHandler)hn.errorHandler.call(null,e,t,n);else{if(!mn||"undefined"==typeof console)throw e;console.error(e)}}function W(e){return new Dn(void 0,void 0,void 0,String(e))}function q(e){var t=new Dn(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function J(e){for(var t=e.length,n=new Array(t),r=0;r<t;r++)n[r]=q(e[r]);return n}function H(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,e)}return t.fns=e,t}function G(e,t,n,r,o){var i,a,s,u;for(i in e)a=e[i],s=t[i],u=Un(i),a&&(s?a!==s&&(s.fns=a,e[i]=s):(a.fns||(a=e[i]=H(a)),n(u.name,a,u.once,u.capture)));for(i in t)e[i]||(u=Un(i),r(u.name,t[i],u.capture))}function X(e,t,n){function r(){n.apply(this,arguments),i(o.fns,r)}var o,a=e[t];a?a.fns&&a.merged?(o=a,o.fns.push(r)):o=H([a,r]):o=H([r]),o.merged=!0,e[t]=o}function K(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function Z(e){return s(e)?[W(e)]:Array.isArray(e)?Q(e):void 0}function Q(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)null!=(r=e[n])&&"boolean"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,Q(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(W(r)):r.text&&o&&o.text?i[i.length-1]=W(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function Y(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function ee(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&re(e,t)}function te(e,t,n){n?Ln.$once(e,t):Ln.$on(e,t)}function ne(e,t){Ln.$off(e,t)}function re(e,t,n){Ln=e,G(t,n||{},te,ne,e)}function oe(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.every(ie)||(n.default=i),n}function ie(e){return e.isComment||" "===e.text}function ae(e){for(var t={},n=0;n<e.length;n++)t[e[n][0]]=e[n][1];return t}function se(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function ue(e,t,n){e.$el=t,e.$options.render||(e.$options.render=Bn),pe(e,"beforeMount");var r;return r=function(){e._update(e._render(),n)},e._watcher=new Kn(e,r,v),n=!1,null==e.$vnode&&(e._isMounted=!0,pe(e,"mounted")),e}function ce(e,t,n,r,o){var i=!!(o||e.$options._renderChildren||r.data.scopedSlots||e.$scopedSlots!==xn);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=o,t&&e.$options.props){Nn.shouldConvert=!1;for(var a=e._props,s=e.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=L(c,e.$options.props,t,e)}Nn.shouldConvert=!0,e.$options.propsData=t}if(n){var l=e.$options._parentListeners;e.$options._parentListeners=n,re(e,n,l)}i&&(e.$slots=oe(o,r.context),e.$forceUpdate())}function le(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function fe(e,t){if(t){if(e._directInactive=!1,le(e))return}else if(e._directInactive)return;if(e._inactive||null==e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)fe(e.$children[n]);pe(e,"activated")}}function de(e,t){if(!(t&&(e._directInactive=!0,le(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)de(e.$children[n]);pe(e,"deactivated")}}function pe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(e)}catch(n){z(n,e,t+" hook")}e._hasHookEvent&&e.$emit("hook:"+t)}function he(){zn.length=0,Wn={},qn=Hn=!1}function ve(){Hn=!0;var e,t,n;for(zn.sort(function(e,t){return e.id-t.id}),Gn=0;Gn<zn.length;Gn++)e=zn[Gn],t=e.id,Wn[t]=null,e.run();for(Gn=zn.length;Gn--;)e=zn[Gn],n=e.vm,n._watcher===e&&n._isMounted&&pe(n,"updated");wn&&hn.devtools&&wn.emit("flush"),he()}function me(e){var t=e.id;if(null==Wn[t]){if(Wn[t]=!0,Hn){for(var n=zn.length-1;n>=0&&zn[n].id>e.id;)n--;zn.splice(Math.max(n,Gn)+1,0,e)}else zn.push(e);qn||(qn=!0,Sn(ve))}}function ye(e){Zn.clear(),_e(e,Zn)}function _e(e,t){var n,r,o=Array.isArray(e);if((o||d(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)_e(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)_e(e[r[n]],t)}}function ge(e,t,n){Qn.get=function(){return this[t][n]},Qn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Qn)}function be(e){e._watchers=[];var t=e.$options;t.props&&we(e,t.props),t.methods&&ke(e,t.methods),t.data?Oe(e):C(e._data={},!0),t.computed&&Se(e,t.computed),t.watch&&Ce(e,t.watch)}function we(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;Nn.shouldConvert=i;for(var a in t)!function(i){o.push(i);var a=L(i,t,n,e);j(r,i,a),i in e||ge(e,"_props",i)}(a);Nn.shouldConvert=!0}function Oe(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||b(n[o])||ge(e,"_data",n[o]);C(t,!0)}function Se(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var o=t[r],i="function"==typeof o?o:o.get;n[r]=new Kn(e,i,v,Yn),r in e||xe(e,r,o)}}function xe(e,t,n){"function"==typeof n?(Qn.get=Ee(t),Qn.set=v):(Qn.get=n.get?!1!==n.cache?Ee(t):n.get:v,Qn.set=n.set?n.set:v),Object.defineProperty(e,t,Qn)}function Ee(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),jn.target&&t.depend(),t.value}}function ke(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function Ce(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)je(e,n,r[o]);else je(e,n,r)}}function je(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Ae(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(!(e=Pe(e,i,function(){n.$forceUpdate()})))return;et(e),t=t||{},t.model&&De(e.options,t);var a=Ne(t,e);if(e.options.functional)return Ie(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),$e(t);var u=e.options.name||o;return new Dn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r})}}}function Ie(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=L(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return Fe(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return oe(o,r)}});return l instanceof Dn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function Te(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function Pe(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function Ne(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=cn(s);Me(r,i,s,u,!0)||Me(r,o,s,u)||Me(r,a,s,u)}return r}}function Me(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function $e(e){e.hook||(e.hook={});for(var t=0;t<tr.length;t++){var n=tr[t],r=e.hook[n],o=er[n];e.hook[n]=r?Re(o,r):o}}function Re(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function De(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var o=t.on||(t.on={});o[r]?o[r]=[t.model.callback].concat(o[r]):o[r]=t.model.callback}function Fe(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=rr),Le(e,t,n,r,o)}function Le(e,t,n,r,o){if(n&&n.__ob__)return Bn();if(!t)return Bn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===rr?r=Z(r):o===nr&&(r=K(r));var i,a;if("string"==typeof t){var s;a=hn.getTagNamespace(t),i=hn.isReservedTag(t)?new Dn(hn.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?Ae(s,n,e,r,t):new Dn(t,n,r,void 0,void 0,e)}else i=Ae(t,n,e,r);return i?(a&&Be(i,a),i):Bn()}function Be(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&Be(o,t)}}function Ue(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n}function Ve(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t}function ze(e){return F(this.$options,"filters",e,!0)||pn}function We(e,t,n){var r=hn.keyCodes[t]||n;return Array.isArray(r)?-1===r.indexOf(e):r!==e}function qe(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));var o;for(var i in n){if("class"===i||"style"===i)o=e;else{var a=e.attrs&&e.attrs.type;o=r||hn.mustUseProp(t,a,i)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}i in o||(o[i]=n[i])}}else;return e}function Je(e,t){var n=this._staticTrees[e];return n&&!t?Array.isArray(n)?J(n):q(n):(n=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),Ge(n,"__static__"+e,!1),n)}function He(e,t,n){return Ge(e,"__once__"+t+(n?"_"+n:""),!0),e}function Ge(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Xe(e[r],t+"_"+r,n);else Xe(e,t,n)}function Xe(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Ke(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=oe(e.$options._renderChildren,n),e.$scopedSlots=xn,e._c=function(t,n,r,o){return Fe(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Fe(e,t,n,r,o,!0)}}function Ze(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Qe(e){var t=e.$options.inject;if(t)for(var n=Array.isArray(t),r=n?t:On?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++)for(var i=r[o],a=n?i:t[i],s=e;s;){if(s._provided&&a in s._provided){e[i]=s._provided[a];break}s=s.$parent}}function Ye(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function et(e){var t=e.options;if(e.super){var n=et(e.super);if(n!==e.superOptions){e.superOptions=n;var r=tt(e);r&&f(e.extendOptions,r),t=e.options=D(n,e.extendOptions),t.name&&(t.components[t.name]=e)}}return t}function tt(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=nt(n[o],r[o]));return t}function nt(e,t){if(Array.isArray(e)){var n=[];t=Array.isArray(t)?t:[t];for(var r=0;r<e.length;r++)t.indexOf(e[r])<0&&n.push(e[r]);return n}return e}function rt(e){this._init(e)}function ot(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):"function"==typeof e&&e.apply(null,t),e.installed=!0,this}}}function it(e){e.mixin=function(e){this.options=D(this.options,e)}}function at(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=D(n.options,e),a.super=n,a.options.props&&st(a),a.options.computed&&ut(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,hn._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=f({},a.options),o[r]=a,a}}function st(e){var t=e.options.props;for(var n in t)ge(e.prototype,"_props",n)}function ut(e){var t=e.options.computed;for(var n in t)xe(e.prototype,n,t[n])}function ct(e){hn._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function lt(e){return e&&(e.Ctor.options.name||e.tag)}function ft(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e instanceof RegExp&&e.test(t)}function dt(e,t){for(var n in e){var r=e[n];if(r){var o=lt(r.componentOptions);o&&!t(o)&&(pt(r),e[n]=null)}}}function pt(e){e&&(e.componentInstance._inactive||pe(e.componentInstance,"deactivated"),e.componentInstance.$destroy())}function ht(e){return new t.Element(e)}function vt(e,n){return new t.Element(e+":"+n)}function mt(e){return new t.TextNode(e)}function yt(e){return new t.Comment(e)}function _t(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=ht("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function gt(e,t){if(3===t.nodeType)return void e.setAttr("value","");e.removeChild(t)}function bt(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=ht("text");n.setAttr("value",t.text),e.appendChild(n)}}function wt(e){return e.parentNode}function Ot(e){return e.nextSibling}function St(e){return e.type}function xt(e,t){e.parentNode.setAttr("value",t)}function Et(e,t,n){e.setAttr(t,n)}function kt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function Ct(e){return null==e}function jt(e){return null!=e}function At(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function It(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,jt(o)&&(i[o]=r);return i}function Tt(e,t){(e.data.directives||t.data.directives)&&Pt(e,t)}function Pt(e,t){var n,r,o,i=e===dr,a=t===dr,s=Nt(e.data.directives,e.context),u=Nt(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,$t(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):($t(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)$t(c[n],"inserted",t,e)};i?X(t.data.hook||(t.data.hook={}),"insert",f):f()}if(l.length&&X(t.data.hook||(t.data.hook={}),"postpatch",function(){for(var n=0;n<l.length;n++)$t(l[n],"componentUpdated",t,e)}),!i)for(n in s)u[n]||$t(s[n],"unbind",e,e,a)}function Nt(e,t){var n=Object.create(null);if(!e)return n;var r,o;for(r=0;r<e.length;r++)o=e[r],o.modifiers||(o.modifiers=vr),n[Mt(o)]=o,o.def=F(t.$options,"directives",o.name,!0);return n}function Mt(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function $t(e,t,n,r,o){var i=e.def&&e.def[t];i&&i(n.elm,e,n,r,o)}function Rt(e,t){if(e.data.attrs||t.data.attrs){var n,r,o=t.elm,i=e.data.attrs||{},a=t.data.attrs||{};a.__ob__&&(a=t.data.attrs=f({},a));for(n in a)r=a[n],i[n]!==r&&o.setAttr(n,r);for(n in i)null==a[n]&&o.setAttr(n)}}function Dt(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u=[],c=o.staticClass;c&&u.push.apply(u,c),o.class&&u.push.apply(u,o.class);var l=Ft(a,u,r);for(var f in l)n.setStyle(f,l[f])}}function Ft(e,t,n){var r=n.$options.style||{},o={};return t.forEach(function(e){f(o,r[e])}),e.forEach(function(e){var t=r[e];for(var n in t)o.hasOwnProperty(n)||(o[n]="")}),o}function Lt(e,t,n,r){if(r)return void console.log("Weex do not support event in bubble phase.");if(n){var o=t,i=ur;t=function(t){null!==(1===arguments.length?o(t):o.apply(null,arguments))&&Bt(e,null,null,i)}}ur.addEvent(e,t)}function Bt(e,t,n,r){(r||ur).removeEvent(e)}function Ut(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};ur=t.elm,G(n,r,Lt,Bt,t.context)}}function Vt(e,t){if(!t.data.staticStyle)return void zt(e,t);var n=t.elm,r=t.data.staticStyle;for(var o in r)r[o]&&n.setStyle(br(o),r[o]);zt(e,t)}function zt(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=Wt(a)),s&&(a=t.data.style=f({},a));for(r in i)a[r]||o.setStyle(br(r),"");for(r in a)n=a[r],o.setStyle(br(r),n)}}function Wt(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function qt(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&f(t,Or(e.name||"v")),f(t,e),t}return"string"==typeof e?Or(e):void 0}}function Jt(e,t){var n=t.elm;n._leaveCb&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=qt(t.data.transition);if(r&&!n._enterCb){for(var o=r.enterClass,i=r.enterToClass,a=r.enterActiveClass,s=r.appearClass,u=r.appearToClass,c=r.appearActiveClass,l=r.beforeEnter,f=r.enter,d=r.afterEnter,p=r.enterCancelled,h=r.beforeAppear,m=r.appear,y=r.afterAppear,g=r.appearCancelled,b=Vn,w=Vn.$vnode;w&&w.parent;)w=w.parent,b=w.context;var O=!b._isMounted||!t.isRootInsert;if(!O||m||""===m){var S=O?s:o,x=O?u:i,E=O?c:a,k=O?h||l:l,C=O&&"function"==typeof m?m:f,j=O?y||d:d,A=O?g||p:p,I=C&&(C._length||C.length)>1,T=t.context.$options.style||{},P=T[S],N=T["@TRANSITION"]&&T["@TRANSITION"][E]||{},M=Gt(n,T,S,x,E,t.context),$=Object.keys(M).length>0,R=n._enterCb=_(function(){R.cancelled?A&&A(n):j&&j(n),n._enterCb=null});if(setTimeout(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];if(r&&r.context===t.context&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),C&&C(n,R),$){t.context.$requireWeexModule("animation").transition(n.ref,{styles:M,duration:N.duration||0,delay:N.delay||0,timingFunction:N.timingFunction||"linear"},I?v:R)}else I||R()},16),k&&k(n),P)for(var D in P)n.setStyle(D,P[D]);$||I||R()}}}function Ht(e,t){function n(){function t(){n.transition(r.ref,{styles:y,duration:g.duration||0,delay:g.delay||0,timingFunction:g.timingFunction||"linear"},p?v:b)}var n=e.context.$requireWeexModule("animation");b.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),u&&u(r),m?n.transition(r.ref,{styles:m},t):t(),c&&c(r,b),y||p||b())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var o=qt(e.data.transition);if(!o)return t();if(!r._leaveCb){var i=o.leaveClass,a=o.leaveToClass,s=o.leaveActiveClass,u=o.beforeLeave,c=o.leave,l=o.afterLeave,f=o.leaveCancelled,d=o.delayLeave,p=c&&(c._length||c.length)>1,h=e.context.$options.style||{},m=h[i],y=h[a]||h[s],g=h["@TRANSITION"]&&h["@TRANSITION"][s]||{},b=r._leaveCb=_(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),b.cancelled?f&&f(r):(t(),l&&l(r)),r._leaveCb=null});d?d(n):n()}}function Gt(e,t,n,r,o,i){var a={},s=t[n],u=t[r],c=t[o];if(s)for(var l in s)a[l]=e.style[l];if(c)for(var d in c)0!==d.indexOf("transition")&&(a[d]=c[d]);return u&&f(a,u),a}function Xt(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Xt(Y(t.children)):e}function Kt(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[sn(i)]=o[i];return t}function Zt(e,t){return/\d-keep-alive$/.test(t.tag)?e("keep-alive"):null}function Qt(e){for(;e=e.parent;)if(e.data.transition)return!0}function Yt(e,t){return t.key===e.key&&t.tag===e.tag}function en(){}function tn(){}function nn(e,n){var r=new t.Comment("root");return r.hasAttribute=r.removeAttribute=function(){},n.documentElement.appendChild(r),r}var rn,on,an=(o("slot,component",!0),Object.prototype.hasOwnProperty),sn=u(function(e){return e.replace(/-(\w)/g,function(e,t){return t?t.toUpperCase():""})}),un=u(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),cn=u(function(e){return e.replace(/([^-])([A-Z])/g,"$1-$2").replace(/([^-])([A-Z])/g,"$1-$2").toLowerCase()}),ln=Object.prototype.toString,fn="[object Object]",dn=function(){return!1},pn=function(e){return e},hn={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:dn,isUnknownElement:dn,getTagNamespace:v,parsePlatformTagName:pn,mustUseProp:dn,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100},vn="__proto__"in{},mn="undefined"!=typeof window,yn=mn&&window.navigator.userAgent.toLowerCase(),_n=(yn&&/msie|trident/.test(yn),yn&&yn.indexOf("msie 9.0"),yn&&yn.indexOf("edge/")>0),gn=(yn&&yn.indexOf("android"),yn&&/iphone|ipad|ipod|ios/.test(yn)),bn=(yn&&/chrome\/\d+/.test(yn),function(){return void 0===rn&&(rn=!mn&&void 0!==Jn&&"server"===Jn.process.env.VUE_ENV),rn}),wn=mn&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,On="undefined"!=typeof Symbol&&g(Symbol)&&"undefined"!=typeof Reflect&&g(Reflect.ownKeys),Sn=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&g(Promise)){var o=Promise.resolve(),i=function(e){console.error(e)};t=function(){o.then(e).catch(i),gn&&setTimeout(v)}}else if("undefined"==typeof MutationObserver||!g(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var a=1,s=new MutationObserver(e),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),t=function(){a=(a+1)%2,u.data=String(a)}}return function(e,o){var i;if(n.push(function(){e&&e.call(o),i&&i(o)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){i=e})}}();on="undefined"!=typeof Set&&g(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var xn=Object.freeze({}),En=/[^\w.$]/,kn=v,Cn=0,jn=function(){this.id=Cn++,this.subs=[]};jn.prototype.addSub=function(e){this.subs.push(e)},jn.prototype.removeSub=function(e){i(this.subs,e)},jn.prototype.depend=function(){jn.target&&jn.target.addDep(this)},jn.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},jn.target=null;var An=[],In=Array.prototype,Tn=Object.create(In);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=In[e];w(Tn,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var Pn=Object.getOwnPropertyNames(Tn),Nn={shouldConvert:!0,isSettingProps:!1},Mn=function(e){if(this.value=e,this.dep=new jn,this.vmCount=0,w(e,"__ob__",this),Array.isArray(e)){(vn?E:k)(e,Tn,Pn),this.observeArray(e)}else this.walk(e)};Mn.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)j(e,t[n],e[t[n]])},Mn.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)C(e[t])};var $n=hn.optionMergeStrategies;$n.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,o="function"==typeof e?e.call(n):void 0;return r?P(r,o):o}:void 0:t?"function"!=typeof t?e:e?function(){
+return P(t.call(this),e.call(this))}:t:e},hn._lifecycleHooks.forEach(function(e){$n[e]=N}),hn._assetTypes.forEach(function(e){$n[e+"s"]=M}),$n.watch=function(e,t){if(!t)return Object.create(e||null);if(!e)return t;var n={};f(n,e);for(var r in t){var o=n[r],i=t[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):[i]}return n},$n.props=$n.methods=$n.computed=function(e,t){if(!t)return Object.create(e||null);if(!e)return t;var n=Object.create(null);return f(n,e),f(n,t),n};var Rn=function(e,t){return void 0===t?e:t},Dn=function(e,t,n,r,o,i,a){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},Fn={child:{}};Fn.child.get=function(){return this.componentInstance},Object.defineProperties(Dn.prototype,Fn);var Ln,Bn=function(){var e=new Dn;return e.text="",e.isComment=!0,e},Un=u(function(e){var t="~"===e.charAt(0);e=t?e.slice(1):e;var n="!"===e.charAt(0);return e=n?e.slice(1):e,{name:e,once:t,capture:n}}),Vn=null,zn=[],Wn={},qn=!1,Hn=!1,Gn=0,Xn=0,Kn=function(e,t,n,r){this.vm=e,e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Xn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new on,this.newDepIds=new on,this.expression="","function"==typeof t?this.getter=t:(this.getter=O(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Kn.prototype.get=function(){S(this);var e,t=this.vm;if(this.user)try{e=this.getter.call(t,t)}catch(e){z(e,t,'getter for watcher "'+this.expression+'"')}else e=this.getter.call(t,t);return this.deep&&ye(e),x(),this.cleanupDeps(),e},Kn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Kn.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Kn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():me(this)},Kn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||d(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){z(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Kn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Kn.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Kn.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||i(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Zn=new on,Qn={enumerable:!0,configurable:!0,get:v,set:v},Yn={lazy:!0},er={init:function(e,t,n,r){if(!e.componentInstance||e.componentInstance._isDestroyed){(e.componentInstance=Te(e,Vn,n,r)).$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var o=e;er.prepatch(o,o)}},prepatch:function(e,t){var n=t.componentOptions;ce(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){e.componentInstance._isMounted||(e.componentInstance._isMounted=!0,pe(e.componentInstance,"mounted")),e.data.keepAlive&&fe(e.componentInstance,!0)},destroy:function(e){e.componentInstance._isDestroyed||(e.data.keepAlive?de(e.componentInstance,!0):e.componentInstance.$destroy())}},tr=Object.keys(er),nr=1,rr=2,or=0;!function(e){e.prototype._init=function(e){var t=this;t._uid=or++,t._isVue=!0,e&&e._isComponent?Ye(t,e):t.$options=D(et(t.constructor),e||{},t),t._renderProxy=t,t._self=t,se(t),ee(t),Ke(t),pe(t,"beforeCreate"),Qe(t),be(t),Ze(t),pe(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(rt),function(e){var t={};t.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=A,e.prototype.$delete=I,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Kn(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}(rt),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this,o=this;if(Array.isArray(e))for(var i=0,a=e.length;i<a;i++)r.$on(e[i],n);else(o._events[e]||(o._events[e]=[])).push(n),t.test(e)&&(o._hasHookEvent=!0);return o},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(e)){for(var o=0,i=e.length;o<i;o++)n.$off(e[o],t);return r}var a=r._events[e];if(!a)return r;if(1===arguments.length)return r._events[e]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===t||s.fn===t){a.splice(u,1);break}return r},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}(rt),function(e){e.prototype._update=function(e,t){var n=this;n._isMounted&&pe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=Vn;Vn=n,n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),Vn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){pe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,pe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}(rt),function(e){e.prototype.$nextTick=function(e){return Sn(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=J(e.$slots[i]);e.$scopedSlots=o&&o.data.scopedSlots||xn,r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){z(t,e,"render function"),a=e._vnode}return a instanceof Dn||(a=Bn()),a.parent=o,a},e.prototype._o=He,e.prototype._n=r,e.prototype._s=n,e.prototype._l=Ue,e.prototype._t=Ve,e.prototype._q=m,e.prototype._i=y,e.prototype._m=Je,e.prototype._f=ze,e.prototype._k=We,e.prototype._b=qe,e.prototype._v=W,e.prototype._e=Bn,e.prototype._u=ae}(rt);var ir=[String,RegExp],ar={name:"keep-alive",abstract:!0,props:{include:ir,exclude:ir},created:function(){this.cache=Object.create(null)},destroyed:function(){var e=this;for(var t in e.cache)pt(e.cache[t])},watch:{include:function(e){dt(this.cache,function(t){return ft(e,t)})},exclude:function(e){dt(this.cache,function(t){return!ft(e,t)})}},render:function(){var e=Y(this.$slots.default),t=e&&e.componentOptions;if(t){var n=lt(t);if(n&&(this.include&&!ft(this.include,n)||this.exclude&&ft(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.componentInstance=this.cache[r].componentInstance:this.cache[r]=e,e.data.keepAlive=!0}return e}},sr={KeepAlive:ar};!function(e){var t={};t.get=function(){return hn},Object.defineProperty(e,"config",t),e.util={warn:kn,extend:f,mergeOptions:D,defineReactive:j},e.set=A,e.delete=I,e.nextTick=Sn,e.options=Object.create(null),hn._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,sr),ot(e),it(e),at(e),ct(e)}(rt),Object.defineProperty(rt.prototype,"$isServer",{get:bn}),rt.version="2.2.2";var ur,cr={},lr=Object.freeze({namespaceMap:cr,createElement:ht,createElementNS:vt,createTextNode:mt,createComment:yt,insertBefore:_t,removeChild:gt,appendChild:bt,parentNode:wt,nextSibling:Ot,tagName:St,setTextContent:xt,setAttribute:Et}),fr={create:function(e,t){kt(t)},update:function(e,t){e.data.ref!==t.data.ref&&(kt(e,!0),kt(t))},destroy:function(e){kt(e,!0)}},dr=new Dn("",{},[]),pr=["create","activate","update","remove","destroy"],hr={create:Tt,update:Tt,destroy:function(e){Tt(e,dr)}},vr=Object.create(null),mr=[fr,hr],yr={create:Rt,update:Rt},_r={create:Dt,update:Dt},gr={create:Ut,update:Ut},br=u(sn),wr={create:Vt,update:zt},Or=u(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),Sr=(mn&&window.requestAnimationFrame&&window.requestAnimationFrame.bind(window),{create:Jt,activate:Jt,remove:Ht}),xr=[yr,_r,gr,wr,Sr],Er=xr.concat(mr),kr=function(e){function t(e){return new Dn(C.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0==--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=C.parentNode(e);t&&C.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(jt(u)){e.elm=e.ns?C.createElementNS(e.ns,u):C.createElement(u,e),h(e);var c=i&&i.appendAsTree;c||(jt(i)&&p(e,t),l(n,e.elm,r)),f(e,s,t),c&&(jt(i)&&p(e,t),l(n,e.elm,r))}else e.isComment?(e.elm=C.createComment(e.text),l(n,e.elm,r)):(e.elm=C.createTextNode(e.text),l(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(jt(o)){var i=jt(e.componentInstance)&&o.keepAlive;if(jt(o=o.hook)&&jt(o=o.init)&&o(e,!1,n,r),jt(e.componentInstance))return u(e,t),i&&c(e,t,n,r),!0}}function u(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.componentInstance.$el,d(e)?(p(e,t),h(e)):(kt(e),t.push(e))}function c(e,t,n,r){for(var o,i=e;i.componentInstance;)if(i=i.componentInstance._vnode,jt(o=i.data)&&jt(o=o.transition)){for(o=0;o<E.activate.length;++o)E.activate[o](dr,i);t.push(i);break}l(n,e.elm,r)}function l(e,t,n){e&&(n?C.insertBefore(e,t,n):C.appendChild(e,t))}function f(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&C.appendChild(e.elm,C.createTextNode(e.text))}function d(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return jt(e.tag)}function p(e,t){for(var n=0;n<E.create.length;++n)E.create[n](dr,e);S=e.data.hook,jt(S)&&(S.create&&S.create(dr,e),S.insert&&t.push(e))}function h(e){for(var t,n=e;n;)jt(t=n.context)&&jt(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,""),n=n.parent;jt(t=Vn)&&t!==e.context&&jt(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(jt(r))for(jt(t=r.hook)&&jt(t=t.destroy)&&t(e),t=0;t<E.destroy.length;++t)E.destroy[t](e);if(jt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];jt(i)&&(jt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||jt(e.data)){var o=E.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),jt(S=e.componentInstance)&&jt(S=S._vnode)&&jt(S.data)&&_(S,t),S=0;S<E.remove.length;++S)E.remove[S](e,t);jt(S=e.data.hook)&&jt(S=S.remove)?S(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(var a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)Ct(p)?p=t[++l]:Ct(h)?h=t[--d]:At(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):At(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):At(p,g)?(b(p,g,r),w&&C.insertBefore(e,p.elm,C.nextSibling(h.elm)),p=t[++l],g=n[--m]):At(h,_)?(b(h,_,r),w&&C.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(Ct(a)&&(a=It(t,l,d)),s=jt(_.key)?a[_.key]:null,Ct(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],At(u,_)?(b(u,_,r),t[s]=void 0,w&&C.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=Ct(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.componentInstance=e.componentInstance);var o,i=t.data,a=jt(i);a&&jt(o=i.hook)&&jt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&d(t)){for(o=0;o<E.update.length;++o)E.update[o](e,t);jt(o=i.hook)&&jt(o=o.update)&&o(e,t)}Ct(t.text)?jt(u)&&jt(c)?u!==c&&g(s,u,c,n,r):jt(c)?(jt(e.text)&&C.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):jt(u)?y(s,u,0,u.length-1):jt(e.text)&&C.setTextContent(s,""):e.text!==t.text&&C.setTextContent(s,t.text),a&&jt(o=i.hook)&&jt(o=o.postpatch)&&o(e,t)}}function w(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function O(e,t,n){t.elm=e;var r=t.tag,o=t.data,i=t.children;if(jt(o)&&(jt(S=o.hook)&&jt(S=S.init)&&S(t,!0),jt(S=t.componentInstance)))return u(t,n),!0;if(jt(r)){if(jt(i))if(e.hasChildNodes()){for(var a=!0,s=e.firstChild,c=0;c<i.length;c++){if(!s||!O(s,i[c],n)){a=!1;break}s=s.nextSibling}if(!a||s)return!1}else f(t,i,n);if(jt(o))for(var l in o)if(!j(l)){p(t,n);break}}else e.data!==t.text&&(e.data=t.text);return!0}var S,x,E={},k=e.modules,C=e.nodeOps;for(S=0;S<pr.length;++S)for(E[pr[S]]=[],x=0;x<k.length;++x)void 0!==k[x][pr[S]]&&E[pr[S]].push(k[x][pr[S]]);var j=o("attrs,style,class,staticClass,staticStyle,key");return function(e,n,r,o,a,s){if(!n)return void(e&&m(e));var u=!1,c=[];if(e){var l=jt(e.nodeType);if(!l&&At(e,n))b(e,n,c,o);else{if(l){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&O(e,n,c))return w(n,c,!0),e;e=t(e)}var f=e.elm,p=C.parentNode(f);if(i(n,c,f._leaveCb?null:p,C.nextSibling(f)),n.parent){for(var h=n.parent;h;)h.elm=n.elm,h=h.parent;if(d(n))for(var v=0;v<E.create.length;++v)E.create[v](dr,n.parent)}null!==p?y(p,[e],0,0):jt(e.tag)&&m(e)}}else u=!0,i(n,c,a,s);return w(n,c,u),n.elm}}({nodeOps:lr,modules:Er,LONG_LIST_THRESHOLD:10}),Cr={},jr={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},Ar={name:"transition",props:jr,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag}),n.length)){var r=this.mode,o=n[0];if(Qt(this.$vnode))return o;var i=Xt(o);if(!i)return o;if(this._leaving)return Zt(e,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var u=(i.data||(i.data={})).transition=Kt(this),c=this._vnode,l=Xt(c);if(i.data.directives&&i.data.directives.some(function(e){return"show"===e.name})&&(i.data.show=!0),l&&l.data&&!Yt(i,l)){var d=l&&(l.data.transition=f({},u));if("out-in"===r)return this._leaving=!0,X(d,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),Zt(e,o);if("in-out"===r){var p,h=function(){p()};X(u,"afterEnter",h),X(u,"enterCancelled",h),X(d,"delayLeave",function(e){p=e})}}return o}}},Ir=f({tag:String,moveClass:String},jr);delete Ir.mode;var Tr={props:Ir,created:function(){var e=this.$requireWeexModule("dom");this.getPosition=function(t){return new Promise(function(n,r){e.getComponentRect(t.ref,function(e){e.result?n(e.size):r(new Error("failed to get rect for element: "+t.tag))})})};var t=this.$requireWeexModule("animation");this.animate=function(e,n){return new Promise(function(r){t.transition(e.ref,n,r)})}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Kt(this),s=0;s<o.length;s++){var u=o[s];u.tag&&null!=u.key&&0!==String(u.key).indexOf("__vlist")&&(i.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a)}if(r){var c=[],l=[];r.forEach(function(e){e.data.transition=a,n[e.key]?c.push(e):l.push(e)}),this.kept=e(t,null,c),this.removed=l}return e(t,null,i)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.getMoveData(e[0].context,t)},methods:{getMoveData:function(e,t){var n=e.$options.style||{};return n["@TRANSITION"]&&n["@TRANSITION"][t]}}},Pr={Transition:Ar,TransitionGroup:Tr},Nr=o("div,img,image,input,switch,indicator,list,scroller,cell,template,text,slider,image");rt.config.mustUseProp=en,rt.config.isReservedTag=Nr,rt.config.isUnknownElement=tn,rt.options.directives=Cr,rt.options.components=Pr,rt.prototype.__patch__=kr,rt.prototype.$mount=function(e,t){return ue(this,e&&nn(e,this.$document),t)},e.Vue=rt},su=t(function(e,t){function n(e){this.instanceId="",this.nodeId=b++,this.parentNode=null,this.nodeType=3,this.text=e}function r(e){E.Document=e.Document,E.Element=e.Element,E.Comment=e.Comment,E.compileBundle=e.compileBundle}function o(){i(O),i(S),i(x),delete E.Document,delete E.Element,delete E.Comment,delete E.compileBundle}function i(e){for(var t in e)delete e[t]}function a(e,t,n,r,o){void 0===t&&(t=""),void 0===n&&(n={}),void 0===o&&(o={});var i=new E.Document(e,n.bundleUrl),a=O[e]={instanceId:e,config:n,data:r,document:i},s=m(e),u=y(e,s),c={config:n,document:i,requireModule:s};Object.freeze(c);var l=a.Vue=v(e,s),f=Object.assign({Vue:l,weex:c,__weex_require_module__:c.requireModule},u);g(f,t)||_(f,t),a.document.taskCenter.send("dom",{action:"createFinish"},[])}function s(e){var t=O[e];t&&t.app instanceof t.Vue&&(t.document.destroy(),t.app.$destroy()),delete O[e]}function u(e,t){var n=O[e];if(!(n&&n.app instanceof n.Vue))return new Error("refreshInstance: instance "+e+" not found!");for(var r in t)n.Vue.set(n.app,r,t[r]);n.document.taskCenter.send("dom",{action:"refreshFinish"},[])}function c(e){var t=O[e];return t&&t.app instanceof t.Vue?t.app.$el.toJSON():new Error("getRoot: instance "+e+" not found!")}function l(e,t,n,r,o){var i=e.document.getRef(t);return i?e.document.fireEvent(i,n,r,o):new Error('invalid element reference "'+t+'"')}function f(e,t,n,r){var o=e.document.taskCenter.callback(t,n,r);return e.document.taskCenter.send("dom",{action:"updateFinish"},[]),o}function d(e,t){if(O[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=k[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function p(e){for(var t in e)!function(t){S[t]||(S[t]={}),e[t].forEach(function(e){"string"==typeof e?S[t][e]=!0:S[t][e.name]=e.args})}(t)}function h(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?x[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(x[e.type]=e))})}function v(e,t){var n={};w(n,E);var r=n.Vue,o=O[e],i=r.config.isReservedTag||function(){return!1};return r.config.isReservedTag=function(e){return x[e]||i(e)},r.prototype.$instanceId=e,r.prototype.$document=o.document,r.prototype.$requireWeexModule=t,r.mixin({beforeCreate:function(){var e=this.$options;if(e.el){var t=e.data,n=("function"==typeof t?t():t)||{};e.data=Object.assign(n,o.data),o.app=this}}}),r.prototype.$getConfig=function(){if(o.app instanceof r)return o.config},r}function m(e){var t=O[e];return function(e){var n=S[e]||[],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:function(){return function(){for(var r=arguments,o=[],i=arguments.length;i--;)o[i]=r[i];return t.document.taskCenter.send("module",{module:e,method:n},o)}},set:function(r){if("function"==typeof r)return t.document.taskCenter.send("module",{module:e,method:n},[r])}})}(o);return r}}function y(e,t){var n=O[e],r=t("timer");return{setTimeout:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setTimeout(i,t[1]),n.document.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setInterval(i,t[1]),n.document.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){r.clearTimeout(e)},clearInterval:function(e){r.clearInterval(e)}}}function _(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function g(e,t){if("function"!=typeof E.compileBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=E.compileBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}Object.defineProperty(t,"__esModule",{value:!0});var b=1,w=au,O={},S={},x={},E={TextNode:n,instances:O,modules:S,components:x},k={fireEvent:function(e){for(var t=arguments,n=[],r=arguments.length-1;r-- >0;)n[r]=t[r+1];return l.apply(void 0,[O[e]].concat(n))},callback:function(e){for(var t=arguments,n=[],r=arguments.length-1;r-- >0;)n[r]=t[r+1];return f.apply(void 0,[O[e]].concat(n))}};t.init=r,t.reset=o,t.createInstance=a,t.destroyInstance=s,t.refreshInstance=u,t.getRoot=c,t.receiveTasks=d,t.registerModules=p,t.registerComponents=h}),uu=e(su),cu=su.registerComponents,lu=su.registerModules,fu=su.receiveTasks,du=su.getRoot,pu=su.refreshInstance,hu=su.destroyInstance,vu=su.createInstance,mu=su.reset,yu=su.init,_u=Object.freeze({default:uu,__moduleExports:su,registerComponents:cu,registerModules:lu,receiveTasks:fu,getRoot:du,refreshInstance:pu,destroyInstance:hu,createInstance:vu,reset:mu,init:yu}),gu=Object.freeze({$:ce,$el:le,$vm:fe,$renderThen:de,$scrollTo:pe,$transition:he,$getConfig:ve,$sendHttp:me,$openURL:ye,$setTitle:_e,$call:ge}),bu=Object.prototype.hasOwnProperty,wu=Object.prototype.toString,Ou="[object Object]",Su="__proto__"in{};"undefined"!=typeof Set&&Set.toString().match(/native code/)?Ws=Set:(Ws=function(){this.set=Object.create(null)},Ws.prototype.has=function(e){return void 0!==this.set[e]},Ws.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},Ws.prototype.clear=function(){this.set=Object.create(null)});var xu=/^@weex-component\//,Eu=/^@weex-module\//,ku=/\.js$/,Cu=function(e){return!!e.match(xu)},ju=function(e){return!!e.match(Eu)},Au=function(e){return!!e.match(/^\.{1,2}\//)},Iu=function(e){return!Cu(e)&&!ju(e)&&!Au(e)},Tu=0;Pe.target=null;var Pu=[];Pe.prototype.addSub=function(e){this.subs.push(e)},Pe.prototype.removeSub=function(e){Oe(this.subs,e)},Pe.prototype.depend=function(){Pe.target&&Pe.target.addDep(this)},Pe.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var Nu=0;Re.prototype.get=function(){Ne(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&De(e),Me(),this.cleanupDeps(),e},Re.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Re.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Re.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},Re.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(Ee(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},Re.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Re.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Re.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||Oe(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1,this.vm=this.cb=this.value=null}};var Mu=je(),$u=Array.prototype,Ru=Object.create($u);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=$u[e];we(Ru,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})}),we($u,"$set",function(e,t){return e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),we($u,"$remove",function(e){this.length&&("number"!=typeof e&&(e=this.indexOf(e)),e>-1&&this.splice(e,1))});var Du=Object.getOwnPropertyNames(Ru);Fe.prototype.walk=function(e){var t=this;for(var n in e)t.convert(n,e[n])},Fe.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ue(e[t])},Fe.prototype.convert=function(e,t){Ve(this.value,e,t)},Fe.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},Fe.prototype.removeVm=function(e){Oe(this.vms,e)};var Fu=["$index","$value","$event"],Lu={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},Bu=Lu.nativeComponentMap,Uu={attr:"setAttr",style:"setStyle",event:"addEvent"},Vu=1,zu=["init","created","ready","destroyed"];!function(e){e.$emit=Gt,e.$dispatch=Xt,e.$broadcast=Kt,e.$on=Zt,e.$off=Qt}(en.prototype),en.prototype.$watch=function(e,t){vt(this,e,t)},en.set=ze,en.delete=We;var Wu={},qu=t(function(e,t){function n(e,t){if(e instanceof i)return e;if("string"!=typeof e)return null;if(e.length>G)return null;if(!(t?K[pe]:K[le]).test(e))return null;try{return new i(e,t)}catch(e){return null}}function r(e,t){var r=n(e,t);return r?r.version:null}function o(e,t){var r=n(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null}function i(e,t){if(e instanceof i){if(e.loose===t)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>G)throw new TypeError("version is longer than "+G+" characters");if(!(this instanceof i))return new i(e,t);H("SemVer",e,t),this.loose=t;var n=e.trim().match(t?K[pe]:K[le]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>X||this.major<0)throw new TypeError("Invalid major version");if(this.minor>X||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>X||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<X)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}function a(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new i(e,n).inc(t,r).version}catch(e){return null}}function s(e,t){if(b(e,t))return null;var r=n(e),o=n(t);if(r.prerelease.length||o.prerelease.length){for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return"pre"+i;return"prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return i}function u(e,t){var n=Re.test(e),r=Re.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function c(e,t){return u(t,e)}function l(e,t){return new i(e,t).major}function f(e,t){return new i(e,t).minor}function d(e,t){return new i(e,t).patch}function p(e,t,n){return new i(e,n).compare(t)}function h(e,t){return p(e,t,!0)}function v(e,t,n){return p(t,e,n)}function m(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})}function y(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})}function _(e,t,n){return p(e,t,n)>0}function g(e,t,n){return p(e,t,n)<0}function b(e,t,n){return 0===p(e,t,n)}function w(e,t,n){return 0!==p(e,t,n)}function O(e,t,n){return p(e,t,n)>=0}function S(e,t,n){return p(e,t,n)<=0}function x(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=b(e,n,r);break;case"!=":o=w(e,n,r);break;case">":o=_(e,n,r);break;case">=":o=O(e,n,r);break;case"<":o=g(e,n,r);break;case"<=":o=S(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function E(e,t){if(e instanceof E){if(e.loose===t)return e;e=e.value}if(!(this instanceof E))return new E(e,t);H("comparator",e,t),this.loose=t,this.parse(e),this.semver===De?this.value="":this.value=this.operator+this.semver.version,H("comp",this)}function k(e,t){if(e instanceof k&&e.loose===t)return e;if(!(this instanceof k))return new k(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function C(e,t){return new k(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function j(e,t){return H("comp",e),e=P(e,t),H("caret",e),e=I(e,t),H("tildes",e),e=M(e,t),H("xrange",e),e=R(e,t),H("stars",e),e}function A(e){return!e||"x"===e.toLowerCase()||"*"===e}function I(e,t){return e.trim().split(/\s+/).map(function(e){return T(e,t)}).join(" ")}function T(e,t){var n=t?K[xe]:K[Se];return e.replace(n,function(t,n,r,o,i){H("tilde",e,t,n,r,o,i);var a;return A(n)?a="":A(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":A(o)?a=">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":i?(H("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),a=">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0"):a=">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0",H("tilde return",a),a})}function P(e,t){return e.trim().split(/\s+/).map(function(e){return N(e,t)}).join(" ")}function N(e,t){H("caret",e,t);var n=t?K[je]:K[Ce];return e.replace(n,function(t,n,r,o,i){H("caret",e,t,n,r,o,i);var a;return A(n)?a="":A(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":A(o)?a="0"===n?">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":">="+n+"."+r+".0 <"+(+n+1)+".0.0":i?(H("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),a="0"===n?"0"===r?">="+n+"."+r+"."+o+i+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+i+" <"+(+n+1)+".0.0"):(H("no pr"),a="0"===n?"0"===r?">="+n+"."+r+"."+o+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+" <"+(+n+1)+".0.0"),H("caret return",a),a})}function M(e,t){return H("replaceXRanges",e,t),e.split(/\s+/).map(function(e){return $(e,t)}).join(" ")}function $(e,t){e=e.trim();var n=t?K[be]:K[ge];return e.replace(n,function(t,n,r,o,i,a){H("xRange",e,t,n,r,o,i,a);var s=A(r),u=s||A(o),c=u||A(i),l=c;return"="===n&&l&&(n=""),s?t=">"===n||"<"===n?"<0.0.0":"*":n&&l?(u&&(o=0),c&&(i=0),">"===n?(n=">=",u?(r=+r+1,o=0,i=0):c&&(o=+o+1,i=0)):"<="===n&&(n="<",u?r=+r+1:o=+o+1),t=n+r+"."+o+"."+i):u?t=">="+r+".0.0 <"+(+r+1)+".0.0":c&&(t=">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0"),H("xRange return",t),t})}function R(e,t){return H("replaceStars",e,t),e.trim().replace(K[Me],"")}function D(e,t,n,r,o,i,a,s,u,c,l,f,d){return t=A(n)?"":A(r)?">="+n+".0.0":A(o)?">="+n+"."+r+".0":">="+t,s=A(u)?"":A(c)?"<"+(+u+1)+".0.0":A(l)?"<"+u+"."+(+c+1)+".0":f?"<="+u+"."+c+"."+l+"-"+f:"<="+s,(t+" "+s).trim()}function F(e,t){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length){for(var n=0;n<e.length;n++)if(H(e[n].semver),e[n].semver!==De&&e[n].semver.prerelease.length>0){var r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}function L(e,t,n){try{t=new k(t,n)}catch(e){return!1}return t.test(e)}function B(e,t,n){return e.filter(function(e){return L(e,t,n)}).sort(function(e,t){return v(e,t,n)})[0]||null}function U(e,t,n){return e.filter(function(e){return L(e,t,n)}).sort(function(e,t){return p(e,t,n)})[0]||null}function V(e,t){try{return new k(e,t).range||"*"}catch(e){return null}}function z(e,t,n){return q(e,t,"<",n)}function W(e,t,n){return q(e,t,">",n)}function q(e,t,n,r){e=new i(e,r),t=new k(t,r);var o,a,s,u,c;switch(n){case">":o=_,a=S,s=g,u=">",c=">=";break;case"<":o=g,a=O,s=_,u="<",c="<=";break;default:
+throw new TypeError('Must provide a hilo val of "<" or ">"')}if(L(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var f=t.set[l],d=null,p=null;if(f.forEach(function(e){e.semver===De&&(e=new E(">=0.0.0")),d=d||e,p=p||e,o(e.semver,d.semver,r)?d=e:s(e.semver,p.semver,r)&&(p=e)}),d.operator===u||d.operator===c)return!1;if((!p.operator||p.operator===u)&&a(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}function J(e,t){var r=n(e,t);return r&&r.prerelease.length?r.prerelease:null}t=e.exports=i;var H;"object"==typeof process&&process.env,H=function(){},t.SEMVER_SPEC_VERSION="2.0.0";var G=256,X=Number.MAX_SAFE_INTEGER||9007199254740991,K=t.re=[],Z=t.src=[],Q=0,Y=Q++;Z[Y]="0|[1-9]\\d*";var ee=Q++;Z[ee]="[0-9]+";var te=Q++;Z[te]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var ne=Q++;Z[ne]="("+Z[Y]+")\\.("+Z[Y]+")\\.("+Z[Y]+")";var re=Q++;Z[re]="("+Z[ee]+")\\.("+Z[ee]+")\\.("+Z[ee]+")";var oe=Q++;Z[oe]="(?:"+Z[Y]+"|"+Z[te]+")";var ie=Q++;Z[ie]="(?:"+Z[ee]+"|"+Z[te]+")";var ae=Q++;Z[ae]="(?:-("+Z[oe]+"(?:\\."+Z[oe]+")*))";var se=Q++;Z[se]="(?:-?("+Z[ie]+"(?:\\."+Z[ie]+")*))";var ue=Q++;Z[ue]="[0-9A-Za-z-]+";var ce=Q++;Z[ce]="(?:\\+("+Z[ue]+"(?:\\."+Z[ue]+")*))";var le=Q++,fe="v?"+Z[ne]+Z[ae]+"?"+Z[ce]+"?";Z[le]="^"+fe+"$";var de="[v=\\s]*"+Z[re]+Z[se]+"?"+Z[ce]+"?",pe=Q++;Z[pe]="^"+de+"$";var he=Q++;Z[he]="((?:<|>)?=?)";var ve=Q++;Z[ve]=Z[ee]+"|x|X|\\*";var me=Q++;Z[me]=Z[Y]+"|x|X|\\*";var ye=Q++;Z[ye]="[v=\\s]*("+Z[me]+")(?:\\.("+Z[me]+")(?:\\.("+Z[me]+")(?:"+Z[ae]+")?"+Z[ce]+"?)?)?";var _e=Q++;Z[_e]="[v=\\s]*("+Z[ve]+")(?:\\.("+Z[ve]+")(?:\\.("+Z[ve]+")(?:"+Z[se]+")?"+Z[ce]+"?)?)?";var ge=Q++;Z[ge]="^"+Z[he]+"\\s*"+Z[ye]+"$";var be=Q++;Z[be]="^"+Z[he]+"\\s*"+Z[_e]+"$";var we=Q++;Z[we]="(?:~>?)";var Oe=Q++;Z[Oe]="(\\s*)"+Z[we]+"\\s+",K[Oe]=new RegExp(Z[Oe],"g");var Se=Q++;Z[Se]="^"+Z[we]+Z[ye]+"$";var xe=Q++;Z[xe]="^"+Z[we]+Z[_e]+"$";var Ee=Q++;Z[Ee]="(?:\\^)";var ke=Q++;Z[ke]="(\\s*)"+Z[Ee]+"\\s+",K[ke]=new RegExp(Z[ke],"g");var Ce=Q++;Z[Ce]="^"+Z[Ee]+Z[ye]+"$";var je=Q++;Z[je]="^"+Z[Ee]+Z[_e]+"$";var Ae=Q++;Z[Ae]="^"+Z[he]+"\\s*("+de+")$|^$";var Ie=Q++;Z[Ie]="^"+Z[he]+"\\s*("+fe+")$|^$";var Te=Q++;Z[Te]="(\\s*)"+Z[he]+"\\s*("+de+"|"+Z[ye]+")",K[Te]=new RegExp(Z[Te],"g");var Pe=Q++;Z[Pe]="^\\s*("+Z[ye]+")\\s+-\\s+("+Z[ye]+")\\s*$";var Ne=Q++;Z[Ne]="^\\s*("+Z[_e]+")\\s+-\\s+("+Z[_e]+")\\s*$";var Me=Q++;Z[Me]="(<|>)?=?\\s*\\*";for(var $e=0;$e<Q;$e++)H($e,Z[$e]),K[$e]||(K[$e]=new RegExp(Z[$e]));t.parse=n,t.valid=r,t.clean=o,t.SemVer=i,i.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},i.prototype.toString=function(){return this.version},i.prototype.compare=function(e){return H("SemVer.compare",this.version,this.loose,e),e instanceof i||(e=new i(e,this.loose)),this.compareMain(e)||this.comparePre(e)},i.prototype.compareMain=function(e){return e instanceof i||(e=new i(e,this.loose)),u(this.major,e.major)||u(this.minor,e.minor)||u(this.patch,e.patch)},i.prototype.comparePre=function(e){var t=this;if(e instanceof i||(e=new i(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var n=0;do{var r=t.prerelease[n],o=e.prerelease[n];if(H("prerelease compare",n,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return u(r,o)}while(++n)},i.prototype.inc=function(e,t){var n=this;switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof n.prerelease[r]&&(n.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=a,t.diff=s,t.compareIdentifiers=u;var Re=/^[0-9]+$/;t.rcompareIdentifiers=c,t.major=l,t.minor=f,t.patch=d,t.compare=p,t.compareLoose=h,t.rcompare=v,t.sort=m,t.rsort=y,t.gt=_,t.lt=g,t.eq=b,t.neq=w,t.gte=O,t.lte=S,t.cmp=x,t.Comparator=E;var De={};E.prototype.parse=function(e){var t=this.loose?K[Ae]:K[Ie],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new i(n[2],this.loose):this.semver=De},E.prototype.toString=function(){return this.value},E.prototype.test=function(e){return H("Comparator.test",e,this.loose),this.semver===De||("string"==typeof e&&(e=new i(e,this.loose)),x(e,this.operator,this.semver,this.loose))},t.Range=k,k.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},k.prototype.toString=function(){return this.range},k.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),H("range",e,t);var n=t?K[Ne]:K[Pe];e=e.replace(n,D),H("hyphen replace",e),e=e.replace(K[Te],"$1$2$3"),H("comparator trim",e,K[Te]),e=e.replace(K[Oe],"$1~"),e=e.replace(K[ke],"$1^"),e=e.split(/\s+/).join(" ");var r=t?K[Ae]:K[Ie],o=e.split(" ").map(function(e){return j(e,t)}).join(" ").split(/\s+/);return this.loose&&(o=o.filter(function(e){return!!e.match(r)})),o=o.map(function(e){return new E(e,t)})},t.toComparators=C,k.prototype.test=function(e){var t=this;if(!e)return!1;"string"==typeof e&&(e=new i(e,this.loose));for(var n=0;n<this.set.length;n++)if(F(t.set[n],e))return!0;return!1},t.satisfies=L,t.maxSatisfying=B,t.minSatisfying=U,t.validRange=V,t.ltr=z,t.gtr=W,t.outside=q,t.prerelease=J}),Ju=function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.debug("[JS Framework] define a component "+t);var o,i;if(i=n.length>1?n[1]:n[0],"function"==typeof i&&(o=i,i=null),o){var a=function(t){if(Cu(t)){var n=Ie(t);return on(e,n)}if(ju(t)){var r=Ie(t);return e.requireModule(r)}if(Au(t)||Iu(t)){var o=Te(t);return e.commonModules[o]}},s={exports:{}};o(a,s.exports,s),i=s.exports}if(Cu(t)){var u=Ie(t);an(e,u,i)}else if(ju(t)){var c,l=Ie(t);tn((c={},c[l]=i,c))}else if(Au(t)){var f=Te(t);e.commonModules[f]=i}else if(Iu(t)){var d=Te(t);i.template||i.style||i.methods?an(e,d,i):e.commonModules[d]=i}},Hu=function(e){this.id=e,this.map=[],this.hooks=[]};Hu.prototype.isEmpty=function(){return 0===this.map.length},Hu.prototype.append=function(e,t,n,r){var o=this;this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},Hu.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){xn(e,"repeat"),xn(e,"shown"),En(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},Hu.prototype.then=function(e){this.hooks.push(e)},kn.prototype.requireModule=function(e){return rn(this,e)},kn.prototype.updateActions=function(){return gn(this)},kn.prototype.callTasks=function(e){return bn(this,e)},Object.freeze(kn),Object.freeze(kn.prototype);var Gu={},Xu=Lu.nativeComponentMap;global.registerMethods=Nn;var Ku={fireEvent:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return yn.apply(void 0,[Gu[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return _n.apply(void 0,[Gu[e]].concat(t))}};Nn(gu),Object.freeze(en);var Zu=Object.freeze({registerComponents:Tn,registerModules:Pn,registerMethods:Nn,createInstance:Cn,init:jn,refreshInstance:An,destroyInstance:In,receiveTasks:Mn,getRoot:$n}),Qu=t(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=15)}([function(e,t,n){var r=e.exports.createUniqueKey="undefined"!=typeof Symbol?Symbol:function(e){return"[["+e+"_"+Math.random().toFixed(8).slice(2)+"]]"},o=e.exports.isObject=function(e){return"object"==typeof e&&null!==e};e.exports.LISTENERS=r("listeners"),e.exports.CAPTURE=1,e.exports.BUBBLE=2,e.exports.ATTRIBUTE=3,e.exports.newNode=function(e,t,n){var r=o(n);return{listener:e,kind:t,once:r&&Boolean(n.once),passive:r&&Boolean(n.passive),next:null}}},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(){r(this,e),this._listeners={}}return o(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length?t?(this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}),this):(delete this._listeners[e],this):this}},{key:"emit",value:function(e,t){var n=this;return this._listeners[e]?(this._listeners[e].forEach(function(r){r.listener.apply(n,[t]),r.once&&n.removeListener(e,r.listener)}),this):this}}]),e}();t.default=i,e.exports=t.default},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=10)}([function(e,t,n){function r(e){return!!e&&("symbol"===(void 0===e?"undefined":s(e))||!!e.constructor&&("Symbol"===e.constructor.name&&"Symbol"===e[e.constructor.toStringTag]))}function o(e){if(!r(e))throw new TypeError(e+" is not a symbol");return e}var i,a,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u=Object.defineProperties,c=Object.defineProperty,l=Object.create(null),f=function(){var e=Object.create(null);return function(t){for(var n=0;e[t+(n||"")];)++n;return t+=n||"",e[t]=!0,"@@"+t}}();a=function(e){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return i(e)},e.exports=i=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return n=Object.create(a.prototype),t=void 0===t?"":String(t),u(n,{__description__:{value:t},__name__:{value:f(t)}})},u(i,{for:{value:function(e){return l[e]?l[e]:l[e]=i(String(e))}},keyFor:{value:function(e){var t;o(e);for(t in l)if(l[t]===e)return t}},hasInstance:{value:i("hasInstance")},isConcatSpreadable:{value:i("isConcatSpreadable")},iterator:{value:i("iterator")},match:{value:i("match")},replace:{value:i("replace")},search:{value:i("search")},species:{value:i("species")},split:{value:i("split")},toPrimitive:{value:i("toPrimitive")},toStringTag:{value:i("toStringTag")},unscopables:{value:i("unscopables")}}),u(a.prototype,{constructor:{value:i},toString:{value:function(){return this.__name__}}}),u(i.prototype,{toString:{value:function(){return"Symbol ("+o(this).__description__+")"}},valueOf:{value:function(){return o(this)}}}),c(i.prototype,i.toPrimitive,{value:function(){var e=o(this);return"symbol"===(void 0===e?"undefined":s(e))?e:e.toString()}}),c(i.prototype,i.toStringTag,{value:"Symbol"}),c(a.prototype,i.toStringTag,{value:i.prototype[i.toStringTag]}),c(a.prototype,i.toPrimitive,{value:i.prototype[i.toPrimitive]})},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){return encodeURIComponent(e).replace(s,l)}function i(e){return decodeURIComponent(e.replace(u," "))}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=/[!'\(\)~]|%20|%00/g,u=/\+/g,c={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},l=function(e){return c[e]},f=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),d="__URLSearchParams__",p=function(){function e(t){var n=this;if(r(this,e),this[d]=Object.create(null),t){"?"===t.charAt(0)&&(t=t.slice(1));for(var o,a,s=(t||"").split("&"),u=0,c=s.length;u<c;u++)a=s[u],o=a.indexOf("="),-1<o?n.append(i(a.slice(0,o)),i(a.slice(o+1))):a.length&&n.append(i(a),"")}}return a(e,[{key:"append",value:function(e,t){var n=this[d];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[d][e]}},{key:"get",value:function(e){var t=this[d];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[d];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[d]}},{key:"set",value:function(e,t){this[d][e]=[""+t]}},{key:"forEach",value:function(e,t){var n=this[d];Object.getOwnPropertyNames(n).forEach(function(r){n[r].forEach(function(n){e.call(t,n,r,this)},this)},this)}},{key:"keys",value:function(){var e=[];this.forEach(function(t,n){e.push(n)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"values",value:function(){var e=[];this.forEach(function(t){e.push(t)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"entries",value:function(){var e=[];this.forEach(function(t,n){e.push([n,t])});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"toString",value:function(){var e,t,n,r,i=this[d],a=[];for(t in i)for(n=o(t),e=0,r=i[t];e<r.length;e++)a.push(n+"="+o(r[e]));return a.join("&")}}]),e}();f&&(p.prototype[Symbol.iterator]=p.prototype.entries),e.exports=p},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function e(t,n){r(this,e),this.family=t,this.source=n};e.exports=o},function(e,t,n){function r(e){return Number.isNaN(e)?f:e}function o(e){return e===f?NaN:e}function i(e,t){var n=0,r=!1;return{next:function(){if(n===e._keys.length&&(r=!0),r)return{value:void 0,done:!0};for(;e._keys[n]===l;)n++;return{value:t.call(e,n++),done:!1}}}}function a(e){for(var t=0,n=0,r=e._keys.length;n<r;n++)e._keys[n]!==l&&t++;return t}function s(e,t){return"function"==typeof e[t]}var u=n(0),c=function(e){return e&&e.__esModule?e:{default:e}}(u),l=(0,c.default)("undef"),f=(0,c.default)("NaN"),d=!0,p=function e(t){this._keys=[],this._values=[],t&&s(t,"forEach")&&(t instanceof e||s(t,"clear")&&s(t,"delete")&&s(t,"entries")&&s(t,"forEach")&&s(t,"get")&&s(t,"has")&&s(t,"keys")&&s(t,"set")&&s(t,"values")?t.forEach(function(e,t){this.set.apply(this,[t,e])},this):t.forEach(function(e){this.set.apply(this,e)},this)),d||(this.size=a(this))};p.prototype={};try{Object.defineProperty(p.prototype,"size",{get:function(){return a(this)}})}catch(e){d=!1}p.prototype.get=function(e){var t=this._keys.indexOf(r(e));return-1!==t?this._values[t]:void 0},p.prototype.set=function(e,t){var n=this._keys.indexOf(r(e));return-1!==n?this._values[n]=t:(this._keys.push(r(e)),this._values.push(t),d||(this.size=a(this))),this},p.prototype.has=function(e){return-1!==this._keys.indexOf(r(e))},p.prototype.delete=function(e){var t=this._keys.indexOf(r(e));return-1!==t&&(this._keys[t]=l,this._values[t]=l,d||(this.size=a(this)),!0)},p.prototype.clear=function(){this._keys=this._values=[],d||(this.size=0)},p.prototype.values=function(){return i(this,function(e){return this._values[e]})},p.prototype.keys=function(){return i(this,function(e){return o(this._keys[e])})},p.prototype.entries=p.prototype[c.default.iterator]=function(){return i(this,function(e){return[o(this._keys[e]),this._values[e]]})},p.prototype.forEach=function(e,t){var n=this;t=t||Jn;for(var r=this.entries(),o=r.next();!1===o.done;)e.call(t,o.value[1],o.value[0],n),o=r.next()},p.prototype[c.default.species]=p,Object.defineProperty(p,"constructor",{value:p});try{Object.defineProperty(p,"length",{value:0})}catch(e){}e.exports=p},function(e,t,n){function r(e,t){return o(e).some(function(e){var n=e.inverse,r="all"===e.type||t.type===e.type;if(r&&n||!r&&!n)return!1;var o=e.expressions.every(function(e){var n=e.feature,r=e.modifier,o=e.value,i=t[n];if(!i)return!1;switch(n){case"width":case"height":o=parseFloat(o),i=parseFloat(i)}switch(r){case"min":return i>=o;case"max":return i<=o;default:return i===o}});return o&&!n||!o&&n})}function o(e){return e.split(",").map(function(e){e=e.trim();var t=e.match(a);if(!t)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var n=t[1],r=t[2],o=((t[3]||"")+(t[4]||"")).trim(),i={};if(i.inverse=!!n&&"not"===n.toLowerCase(),i.type=r?r.toLowerCase():"all",!o)return i.expressions=[],i;if(!(o=o.match(/\([^\)]+\)/g)))throw new SyntaxError('Invalid CSS media query: "'+e+'"');return i.expressions=o.map(function(t){var n=t.match(s);if(!n)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var r=n[1].toLowerCase().match(u);return{modifier:r[1],feature:r[2],value:n[2]}}),i})}function i(e){var t={matches:!1,media:e};return""===e?(t.matches=!0,t):(t.matches=r(e,{type:"screen",width:window.screen.width,height:window.screen.height}),t)}var a=/^(?:(only|not)?\s*([_a-z][_a-z0-9-]*)|(\([^\)]+\)))(?:\s*and\s*(.*))?$/i,s=/^\(\s*([_a-z-][_a-z0-9-]*)\s*(?:\:\s*([^\)]+))?\s*\)$/,u=/^(?:(min|max)-)?(.+)/;e.exports=i},function(e,t,n){function r(){}function o(e,t){return function(){e.apply(t,arguments)}}function i(e){if("object"!==d(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(e,t){for(;3===e._state;)e=e._value;if(0===e._state)return void e._deferreds.push(t);e._handled=!0,p(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?s:u)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void u(t.promise,e)}s(t.promise,r)})}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":d(t))||"function"==typeof t)){var n=t.then;if(t instanceof i)return e._state=3,e._value=t,void c(e);if("function"==typeof n)return void f(o(n,t),e)}e._state=1,e._value=t,c(e)}catch(t){u(e,t)}}function u(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&p(function(){e._handled||h(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function l(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e(function(e){n||(n=!0,s(t,e))},function(e){n||(n=!0,u(t,e))})}catch(e){if(n)return;n=!0,u(t,e)}}var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},h=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};i.prototype.catch=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=new this.constructor(r);return a(this,new l(e,t,n)),n},i.all=function(e){var t=Array.prototype.slice.call(e);return new i(function(e,n){function r(i,a){try{if(a&&("object"===(void 0===a?"undefined":d(a))||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(i,e)},n)}t[i]=a,0==--o&&e(t)}catch(e){n(e)}}if(0===t.length)return e([]);for(var o=t.length,i=0;i<t.length;i++)r(i,t[i])})},i.resolve=function(e){return e&&"object"===(void 0===e?"undefined":d(e))&&e.constructor===i?e:new i(function(t){t(e)})},i.reject=function(e){return new i(function(t,n){n(e)})},i.race=function(e){return new i(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},i._setImmediateFn=function(e){p=e},i._setUnhandledRejectionFn=function(e){h=e},e.exports=i},function(e,t,n){function r(e){return Number.isNaN(e)?l:e}function o(e){return e===l?NaN:e}function i(e,t){var n=0;return{next:function(){for(;e._values[n]===c;)n++;return n===e._values.length?{value:void 0,done:!0}:{value:t.call(e,n++),done:!1}}}}function a(e){for(var t=0,n=0,r=e._values.length;n<r;n++)e._values[n]!==c&&t++;return t}var s=n(0),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=(0,u.default)("undef"),l=(0,u.default)("NaN"),f=!0,d=function(e){this._values=[],e&&"function"==typeof e.forEach&&e.forEach(function(e){this.add.call(this,e)},this),f||(this.size=a(this))};try{Object.defineProperty(d.prototype,"size",{get:function(){return a(this)}})}catch(e){f=!1}d.prototype.add=function(e){return e=r(e),-1===this._values.indexOf(e)&&(this._values.push(e),f||(this.size=a(this))),this},d.prototype.has=function(e){return-1!==this._values.indexOf(r(e))},d.prototype.delete=function(e){var t=this._values.indexOf(r(e));return-1!==t&&(this._values[t]=c,f||(this.size=a(this)),!0)},d.prototype.clear=function(){this._values=[],f||(this.size=0)},d.prototype.values=d.prototype.keys=function(){return i(this,function(e){return o(this._values[e])})},d.prototype.entries=d.prototype[u.default.iterator]=function(){return i(this,function(e){return[o(this._values[e]),o(this._values[e])]})},d.prototype.forEach=function(e,t){var n=this;t=t||Jn;for(var r=this.entries(),o=r.next();!1===o.done;)e.call(t,o.value[1],o.value[0],n),o=r.next()},d.prototype[u.default.species]=d,Object.defineProperty(d,"constructor",{value:d});try{Object.defineProperty(d,"length",{value:0})}catch(e){}e.exports=d},function(e,t,n){function r(e){return void 0!==d[e]}function o(){c.call(this),this._isInvalid=!0}function i(e){return""==e&&o.call(this),e.toLowerCase()}function a(e){var t=e.charCodeAt(0);return t>32&&t<127&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}function s(e){var t=e.charCodeAt(0);return t>32&&t<127&&-1==[34,35,60,62,96].indexOf(t)?e:encodeURIComponent(e)}function u(e,t,n){function u(e){b.push(e)}var c=this,l=t||"scheme start",f=0,y="",_=!1,g=!1,b=[];e:for(;(e[f-1]!=h||0==f)&&!this._isInvalid;){var w=e[f];switch(l){case"scheme start":if(!w||!v.test(w)){if(t){u("Invalid scheme.");break e}y="",l="no scheme";continue}y+=w.toLowerCase(),l="scheme";break;case"scheme":if(w&&m.test(w))y+=w.toLowerCase();else{if(":"!=w){if(t){if(h==w)break e;u("Code point not allowed in scheme: "+w);break e}y="",f=0,l="no scheme";continue}if(c._scheme=y,y="",t)break e;r(c._scheme)&&(c._isRelative=!0),l="file"==c._scheme?"relative":c._isRelative&&n&&n._scheme==c._scheme?"relative or authority":c._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==w?l="query":"#"==w?(c._fragment="#",l="fragment"):h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._schemeData+=a(w));break;case"no scheme":if(n&&r(n._scheme)){l="relative";continue}u("Missing scheme."),o.call(c);break;case"relative or authority":if("/"!=w||"/"!=e[f+1]){u("Expected /, got: "+w),l="relative";continue}l="authority ignore slashes";break;case"relative":if(c._isRelative=!0,"file"!=c._scheme&&(c._scheme=n._scheme),h==w){c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query=n._query,c._username=n._username,c._password=n._password;break e}if("/"==w||"\\"==w)"\\"==w&&u("\\ is an invalid code point."),l="relative slash";else if("?"==w)c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query="?",c._username=n._username,c._password=n._password,l="query";else{if("#"!=w){var O=e[f+1],S=e[f+2];("file"!=c._scheme||!v.test(w)||":"!=O&&"|"!=O||h!=S&&"/"!=S&&"\\"!=S&&"?"!=S&&"#"!=S)&&(c._host=n._host,c._port=n._port,c._username=n._username,c._password=n._password,c._path=n._path.slice(),c._path.pop()),l="relative path";continue}c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query=n._query,c._fragment="#",c._username=n._username,c._password=n._password,l="fragment"}break;case"relative slash":if("/"!=w&&"\\"!=w){"file"!=c._scheme&&(c._host=n._host,c._port=n._port,c._username=n._username,c._password=n._password),l="relative path";continue}"\\"==w&&u("\\ is an invalid code point."),l="file"==c._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=w){u("Expected '/', got: "+w),l="authority ignore slashes";continue}l="authority second slash";break;case"authority second slash":if(l="authority ignore slashes","/"!=w){u("Expected '/', got: "+w);continue}break;case"authority ignore slashes":if("/"!=w&&"\\"!=w){l="authority";continue}u("Expected authority, got: "+w);break;case"authority":if("@"==w){_&&(u("@ already seen."),y+="%40"),_=!0;for(var x=0;x<y.length;x++){var E=y[x];if("\t"!=E&&"\n"!=E&&"\r"!=E)if(":"!=E||null!==c._password){var k=a(E);null!==c._password?c._password+=k:c._username+=k}else c._password="";else u("Invalid whitespace in authority.")}y=""}else{if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){f-=y.length,y="",l="host";continue}y+=w}break;case"file host":if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){2!=y.length||!v.test(y[0])||":"!=y[1]&&"|"!=y[1]?0==y.length?l="relative path start":(c._host=i.call(c,y),y="",l="relative path start"):l="relative path";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid whitespace in file host."):y+=w;break;case"host":case"hostname":if(":"!=w||g){if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){if(c._host=i.call(c,y),y="",l="relative path start",t)break e;continue}"\t"!=w&&"\n"!=w&&"\r"!=w?("["==w?g=!0:"]"==w&&(g=!1),y+=w):u("Invalid code point in host/hostname: "+w)}else if(c._host=i.call(c,y),y="",l="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(w))y+=w;else{if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w||t){if(""!=y){var C=parseInt(y,10);C!=d[c._scheme]&&(c._port=C+""),y=""}if(t)break e;l="relative path start";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid code point in port: "+w):o.call(c)}break;case"relative path start":if("\\"==w&&u("'\\' not allowed in path."),l="relative path","/"!=w&&"\\"!=w)continue;break;case"relative path":if(h!=w&&"/"!=w&&"\\"!=w&&(t||"?"!=w&&"#"!=w))"\t"!=w&&"\n"!=w&&"\r"!=w&&(y+=a(w));else{"\\"==w&&u("\\ not allowed in relative path.");var j;(j=p[y.toLowerCase()])&&(y=j),".."==y?(c._path.pop(),"/"!=w&&"\\"!=w&&c._path.push("")):"."==y&&"/"!=w&&"\\"!=w?c._path.push(""):"."!=y&&("file"==c._scheme&&0==c._path.length&&2==y.length&&v.test(y[0])&&"|"==y[1]&&(y=y[0]+":"),c._path.push(y)),y="","?"==w?(c._query="?",l="query"):"#"==w&&(c._fragment="#",l="fragment")}break;case"query":t||"#"!=w?h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._query+=s(w)):(c._fragment="#",l="fragment");break;case"fragment":h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._fragment+=w)}f++}}function c(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function l(e,t){void 0===t||t instanceof l||(t=new l(String(t))),this._url=e,c.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");u.call(this,n,null,t)}var f=n(1),d=Object.create(null);d.ftp=21,d.file=0,d.gopher=70,d.http=80,d.https=443,d.ws=80,d.wss=443;var p=Object.create(null);p["%2e"]=".",p[".%2e"]="..",p["%2e."]="..",p["%2e%2e"]="..";var h=void 0,v=/[a-zA-Z]/,m=/[a-zA-Z0-9\+\-\.]/;l.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){c.call(this),u.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||u.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],u.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&(this._query="?","?"==e[0]&&(e=e.slice(1)),u.call(this,e,"query"))},get searchParams(){return new f(this.search)},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||(this._fragment="#","#"==e[0]&&(e=e.slice(1)),u.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return e=this.host,e?this._scheme+"://"+e:""}},e.exports=l},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.defineProperty,i=Date.now()%1e9,a=function(e){this.name="__st"+(1e9*Math.random()>>>0)+i+++"__",e&&e.forEach&&e.forEach(function(e){this.set.apply(this,e)},this)};a.prototype.set=function(e,t){if("object"!==(void 0===e?"undefined":r(e))&&"function"!=typeof e)throw new TypeError("Invalid value used as weak map key");var n=e[this.name];return n&&n[0]===e?n[1]=t:o(e,this.name,{value:[e,t],writable:!0}),this},a.prototype.get=function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},a.prototype.delete=function(e){var t=e[this.name];return!(!t||t[0]!==e)&&(t[0]=t[1]=void 0,!0)},a.prototype.has=function(e){var t=e[this.name];return!!t&&t[0]===e},e.exports=a},function(e,t,n){var r=Date.now()%1e9,o=function(e){this.name="__st"+(1e9*Math.random()>>>0)+r+++"__",e&&e.forEach&&e.forEach(this.add,this)};o.prototype.add=function(e){var t=this.name;return e[t]||Object.defineProperty(e,t,{value:!0,writable:!0}),this},o.prototype.delete=function(e){return!!e[this.name]&&(e[this.name]=void 0,!0)},o.prototype.has=function(e){return!!e[this.name]},e.exports=o},function(e,t,n){e.exports={
+get Promise(){return n(5)},get Symbol(){return n(0)},get Map(){return n(3)},get Set(){return n(6)},get WeakMap(){return n(8)},get WeakSet(){return n(9)},get FontFace(){return n(2)},get URL(){return n(7)},get URLSearchParams(){return n(1)},get matchMedia(){return n(4)}}}])}},function(e,t,n){e.exports=function(){var e={},t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.btoa=function(e){for(var n,r,o=String(e),i=0,a=t,s="";o.charAt(0|i)||(a="=",i%1);s+=a.charAt(63&n>>8-i%1*8)){if((r=o.charCodeAt(i+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");n=n<<8|r}return s},e.atob=function(e){var n=String(e).replace(/=+$/,"");if(n.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,i=0,a=0,s="";o=n.charAt(a++);~o&&(r=i%4?64*r+o:o,i++%4)?s+=String.fromCharCode(255&r>>(-2*i&6)):0)o=t.indexOf(o);return s},e}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(14)}},function(e,t,n){e.exports=function(e){function t(t,n,r){n instanceof Function&&(r=n,n=[]),e[t]={factory:r,deps:n,module:{exports:{}},isInitialized:!1,hasError:!1}}return t}},function(e,t,n){function r(e){e.body.addEvent("viewappear",function(t){e.visibilityState=s,t.type=c,e.dispatchEvent(t)}),e.body.addEvent("viewdisappear",function(t){e.visibilityState=u,t.type=c,e.dispatchEvent(t)})}function o(e){e.body&&(e.body.removeEvent("viewappear"),e.body.removeEvent("viewdisappear"))}var i=n(1),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s="visible",u="hidden",c="visibilitychange";e.exports=function(e,t){var n=new a.default,i=!1;try{t.addEventListener=function(e,o){e===c&&(t.body?r(t):i=!0),n.on(e,o)},t.removeEventListener=function(e,r){e===c&&o(t),n.off(e,r)},t.dispatchEvent=function(e){n.emit(e.type,e)},t.fonts={add:function(t){e("@weex-module/dom").addRule("fontFace",{fontFamily:t.family,src:t.source})}},t.visibilityState=s;var u=t.createBody;Object.defineProperty(t,"createBody",{value:function(){var e=u.call(t);return i&&r(t),e}})}catch(e){console.log(e)}return t}},function(e,t,n){function r(e){if("*"==e)return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function o(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n}(e,t,n),r}function i(e){var t={isDowngrade:!1},n=WXEnvironment,i=n.platform||"unknow",a=i.toLowerCase(),u=e[a]||{};for(var c in n){var l=c,f=l.toLowerCase(),d=n[c],p=f.indexOf("version")>=0,h=f.indexOf("devicemodel")>=0,v=u[c];if(v&&p){var m=r(v),y=r(n[c]);if(s.default.satisfies(y,m)){t=o(l,d,v);break}}else if(h){var _=Array.isArray(v)?v:[v];if(_.indexOf(d)>=0){t=o(l,d,v);break}}}return t}var a=n(16),s=function(e){return e&&e.__esModule?e:{default:e}}(a);e.exports=function(e){return function(t){var n=e("@weex-module/instanceWrap"),r=i(t);return!!r.isDowngrade&&(n.error(r.errorType,r.code,r.errorMessage),!0)}}},function(e,t,n){function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}e.exports=function(){var e=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this.type=t,this.bubbles=Boolean(n.bubbles),this.cancelable=Boolean(n.cancelable)};return{Event:e,CustomEvent:function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var o=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return o.detail=n.detail,o}return o(t,e),t}(e)}}},function(e,t,n){e.exports=function(e,t){function n(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function r(e){return"string"!=typeof e&&(e=String(e)),e}function o(e){this.originHeaders=e,this.map={},e instanceof o?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(e){if(e.bodyUsed)return t.reject(new TypeError("Already read"));e.bodyUsed=!0}function a(){return this.bodyUsed=!1,this._initBody=function(e,t){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=i(this);return e||t.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}function s(e){var t=e.toUpperCase();return l.indexOf(t)>-1?t:e}function u(e,t){t=t||{};var n=t.body;if(u.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=s(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n,t)}function c(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e,t)}o.prototype.append=function(e,t){e=n(e),t=r(t);var o=this.map[e];this.map[e]=o?o+","+t:t},o.prototype.delete=function(e){delete this.map[n(e)]},o.prototype.get=function(e){return e=n(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(n(e))},o.prototype.set=function(e,t){this.map[n(e)]=[r(t)]},o.prototype.forEach=function(e,t){var n=this;for(var r in this.map)n.map.hasOwnProperty(r)&&e.call(t,n.map[r],r,n)};var l=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this)},a.call(u.prototype),a.call(c.prototype),c.prototype.clone=function(){return new c(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},c.error=function(){var e=new c(null,{status:0,statusText:""});return e.type="error",e};var f=[301,302,303,307,308];return c.redirect=function(e,t){if(-1===f.indexOf(t))throw new RangeError("Invalid status code");return new c(null,{status:t,headers:{location:e}})},{fetch:function(n,r){return new t(function(t,o){var i;i=u.prototype.isPrototypeOf(n)&&!r?n:new u(n,r);var a={url:i.url,method:i.method,headers:i.headers&&i.headers.originHeaders};void 0!==i._bodyInit&&(a.body=i._bodyInit),a.type=r&&r.dataType?r.dataType:"json",(0,e("@weex-module/stream").fetch)(a,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var n="string"==typeof e.data?e.data:JSON.stringify(e.data),r=new c(n,{status:e.status,statusText:e.statusText,headers:e.headers,url:i.url});t(r)}catch(e){o(e)}},function(e){})})},Headers:o,Request:u,Response:c}}},function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.exports=function(e){var t,n={};return n.timing=(t={unloadEventStart:0,unloadEventEnd:0,navigationStart:e,redirectStart:0,redirectEnd:0,fetchStart:e,domainLookupStart:e,domainLookupEnd:e,connectStart:e,secureConnectionStart:e},r(t,"connectStart",e),r(t,"requestStart",e),r(t,"responseStart",e),r(t,"responseEnd",e),r(t,"domLoading",0),r(t,"domInteractive",0),r(t,"domComplete",0),r(t,"domContentLoadedEventStart",0),r(t,"domContentLoadedEventEnd",0),r(t,"loadEventStart",0),r(t,"loadEventEnd",0),t),n.now=function(){return Date.now()-n.timing.navigationStart},n}},function(e,t,n){e.exports=function(e){function t(n){var r=e[n];if(r&&r.isInitialized)return r.module.exports;if(!r)throw new Error('Requiring unknown module "'+n+'"');if(r.hasError)throw new Error('Requiring module "'+n+'" which threw an exception');try{r.isInitialized=!0,r.factory(t,r.module.exports,r.module)}catch(e){throw r.hasError=!0,r.isInitialized=!1,e}return r.module.exports}return t}},function(e,t,n){var r="@weex-module/timer";e.exports=function(e,t){var n=function(n,o){return e(r).setTimeout(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()},o=function(n,o){return e(r).setInterval(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()};return{setTimeout:n,clearTimeout:function(t){e(r).clearTimeout(t)},setInterval:o,clearInterval:function(t){e(r).clearInterval(t)},requestAnimationFrame:function(t){return e(r).setTimeout(t,16)},cancelAnimationFrame:function(t){e(r).clearTimeout(t)}}}},function(e,t,n){function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(18),u=0,c=1,l=3,f=["close","error","message","open"],d=function e(t,n){i(this,e),this.type=t.toString(),Object.assign(this,n)};e.exports=function(e){var t,n;return n=t=function(t){function n(t,o){i(this,n);var a=r(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s=e("@weex-module/webSocket");return s.WebSocket(t,o),a.readyState=u,a.websocket=s,s.onmessage(function(e){a.dispatchEvent(new d("message",e))}),s.onopen(function(e){a.readyState=c,a.dispatchEvent(new d("open"))}),s.onclose(function(e){a.readyState=l,a.dispatchEvent(new d("close",{code:e.code,reason:e.reason}))}),s.onerror(function(e){a.dispatchEvent(new d("error",e))}),a}return o(n,t),a(n,[{key:"close",value:function(e,t){2!==this.readyState&&this.readyState!==l&&(this.readyState=2,this.websocket.close(e,t),this.websocket.removeAllEventListeners())}},{key:"send",value:function(e){if("string"==typeof e)return void this.websocket.send(e);throw new Error("Unsupported data type")}}]),n}(s(f)),t.CONNECTING=u,t.OPEN=c,t.CLOSING=2,t.CLOSED=l,n}},function(e,t){e.exports=function(e,t,n){var r=this.__weex_document__,o=this.document;n.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=24)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{},hook:null,driver:null,monitor:null},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),a=r(i),s=n(6),u=n(9),c=r(u),l=n(2),f=r(l),d=n(4),p=r(d),h=n(30),v=r(h),m=n(5),y="$$instance";t.default={set:function(e,t){e[y]||(e[y]=t,t.rootID&&(a.default.rootInstances[t.rootID]=t,a.default.rootComponents[t.rootID]=t._internal))},get:function(e){return e[y]},remove:function(e){var t=this.get(e);t&&(e[y]=null,t.rootID&&(delete a.default.rootComponents[t.rootID],delete a.default.rootInstances[t.rootID]))},render:function(e,t){a.default.driver.beforeRender&&a.default.driver.beforeRender(),null==t&&(t=a.default.driver.createBody());var n=this.get(t);if(n&&n.isRootComponent){var r=n.getRenderedComponent(),i=r._currentElement;if((0,p.default)(i,e)){var u=r._context;return r.updateComponent(i,e,u,u),n}a.default.hook.Reconciler.unmountComponent(n),(0,c.default)(t)}if(m.isWeb&&t.childNodes)for(var l=[].concat(o(t.childNodes)),d=0;d<l.length;d++){var h=l[d];h.hasAttribute&&h.hasAttribute("data-rendered")&&a.default.driver.removeChild(h,t)}var y=(0,s.createElement)(v.default,null,e),_=(0,f.default)(y),g={},b=_.mountComponent(t,g);return this.set(t,b),a.default.driver.afterRender&&a.default.driver.afterRender(b),a.default.hook.Mount._renderNewRootComponent(b._internal),b}},e.exports=t.default},function(e,t,n){function r(e){var t=void 0;if(void 0===e||null===e||!1===e||!0===e)t=new a.default.EmptyComponent;else if(Array.isArray(e))t=new a.default.FragmentComponent(e);else if("object"===(void 0===e?"undefined":o(e))&&e.type)t="string"==typeof e.type?new a.default.NativeComponent(e):new a.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw Error("Invalid element type "+JSON.stringify(e));t=new a.default.TextComponent(e)}return t._mountIndex=0,t}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i);t.default=r,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n,o){r(this,e),this.props=t,this.context=n,this.refs={},this.updater=o}return o(e,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),e}();t.default=i,e.exports=t.default},function(e,t,n){function r(e,t){var n=null===e,r=null===t;if(n||r)return n===r;var i=void 0===e?"undefined":o(e),a=void 0===t?"undefined":o(t);return"string"===i||"number"===i?"string"===a||"number"===a:"object"===i&&"object"===a&&e.type===t.type&&e.key===t.key}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=r,e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":o(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode=void 0!==process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig},function(e,t,n){function r(){if(h.default.component){var e=h.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)o(e[n],t);else t.push(e)}function i(e){if(null==e)return e;var t=[];return o(e,t),1===t.length&&(t=t[0]),t}function a(e){if(e){if(Array.isArray(e)){for(var t={},n=0;n<e.length;++n){var r=a(e[n]);if(r)for(var o in r)t[o]=r[o]}return t}return e}}function s(e,t){if(v.isWeex&&"text"===e){var n=t.children;n&&(Array.isArray(n)&&(n=n.join("")),t.children=null,t.value=n)}return t}function u(e,t){var n=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+r());var o={},s=void 0,u=null,c=null;if(null!=t){c=void 0===t.ref?null:t.ref,u=void 0===t.key?null:String(t.key);for(s in t)t.hasOwnProperty(s)&&!m.hasOwnProperty(s)&&(o[s]=t[s])}for(var l=arguments.length,f=Array(l>2?l-2:0),p=2;p<l;p++)f[p-2]=n[p];if(f.length&&(o.children=i(f)),e&&e.defaultProps){var v=e.defaultProps;for(s in v)void 0===o[s]&&(o[s]=v[s])}return o.style&&(Array.isArray(o.style)||"object"===d(o.style))&&(o.style=a(o.style)),new y(e,u,c,o,h.default.component)}function c(e){var t=u.bind(null,e);return t.type=e,t}function l(e,t){var n=arguments,r=Object.assign({},e.props),o=e.key,a=e.ref,s=e._owner;if(t){void 0!==t.ref&&(a=t.ref,s=h.default.component),void 0!==t.key&&(o=String(t.key));var u=void 0;e.type&&e.type.defaultProps&&(u=e.type.defaultProps);var c=void 0;for(c in t)t.hasOwnProperty(c)&&!m.hasOwnProperty(c)&&(void 0===t[c]&&void 0!==u?r[c]=u[c]:r[c]=t[c])}for(var l=arguments.length,f=Array(l>2?l-2:0),d=2;d<l;d++)f[d-2]=n[d];return f.length&&(r.children=i(f)),new y(e.type,o,a,r,s)}function f(e){return"object"===(void 0===e?"undefined":d(e))&&null!==e&&e.type&&e.props}Object.defineProperty(t,"__esModule",{value:!0});var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.createElement=u,t.createFactory=c,t.cloneElement=l,t.isValidElement=f;var p=n(0),h=function(e){return e&&e.__esModule?e:{default:e}}(p),v=n(5),m={key:!0,ref:!0},y=function(e,t,n,r,o){return r=s(e,r),{type:e,key:t,ref:n,props:r,_owner:o}};t.default=y},function(e,t,n){function r(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("Appears to be neither Component nor DOMNode.");var t=e._internal;if(t){for(;!t._nativeNode;)if(null==(t=t._renderedComponent))return null;return t._nativeNode}throw new Error("findDOMNode was called on an unmounted component.")}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=r,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){e=(0,u.default)(e);for(var r in t){var o=t[r];if(r!==l&&null!=o)if(r===c){if(n)continue;a.default.driver.setStyles(e,o)}else if(f.test(r)){var i=r.slice(2).toLowerCase();a.default.driver.addEventListener(e,i,o)}else a.default.driver.setAttribute(e,r,o)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var i=n(0),a=r(i),s=n(7),u=r(s),c="style",l="children",f=/on[A-Z]/;e.exports=t.default},function(e,t,n){function r(e){var t=i.default.get(e);return!!t&&(i.default.remove(e),t._internal.unmountComponent(),!0)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(1),i=function(e){return e&&e.__esModule?e:{default:e}}(o);e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(0),s=r(a);t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return i.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:s.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}},monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,s=void 0===e[a];return s||console.warn('Encountered two children with the same key "'+r+'".'),s?a:i}return i},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(0),s=r(a),u=n(13),c=r(u),l=n(2),f=r(l),d=n(4),p=r(d),h=n(11),v=r(h),m=n(1),y=r(m),_=/on[A-Z]/,g=function(){function e(t){o(this,e),this._currentElement=t}return i(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=s.default.mountID++;var r=this._currentElement.props,o=this._currentElement.type,i={_internal:this,type:o,props:r},a=r.append;this._instance=i,this._prevStyleCopy=Object.assign({},r.style);var u=this.getNativeNode();"tree"!==a&&(n?n(u,e):s.default.driver.appendChild(u,e)),this._currentElement&&this._currentElement.ref&&c.default.attach(this._currentElement._owner,this._currentElement.ref,this);var l=r.children;return null!=l&&this.mountChildren(l,t),"tree"===a&&(n?n(u,e):s.default.driver.appendChild(u,e)),s.default.hook.Reconciler.mountComponent(this),i}},{key:"mountChildren",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r={},o=e.map(function(e,o){var i=(0,f.default)(e),a=(0,v.default)(r,e,o);return r[a]=i,i._mountIndex=o,i.mountComponent(n.getNativeNode(),t)});return this._renderedChildren=r,o}},{key:"unmountChildren",value:function(e){var t=this._renderedChildren;if(t){for(var n in t){t[n].unmountComponent(e)}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&c.default.detach(this._currentElement._owner,t,this),y.default.remove(this._nativeNode),e||s.default.driver.removeChild(this._nativeNode,this._parent),s.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(e),s.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,c.default.update(e,t,this);var o=e.props,i=t.props;this.updateProperties(o,i),this.updateChildren(i.children,r),s.default.hook.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,o=void 0,i=void 0;for(r in e)if("children"!==r&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if("style"===r){var a=n._prevStyleCopy;for(o in a)a.hasOwnProperty(o)&&(i=i||{},i[o]="");n._prevStyleCopy=null}else _.test(r)?"function"==typeof e[r]&&s.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):s.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],c="style"===r?n._prevStyleCopy:null!=e?e[r]:void 0;if("children"!==r&&t.hasOwnProperty(r)&&u!==c&&(null!=u||null!=c))if("style"===r)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=c){for(o in c)!c.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in u)u.hasOwnProperty(o)&&c[o]!==u[o]&&(i=i||{},i[o]=u[o])}else i=u;else if(_.test(r))"function"==typeof c&&s.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),c),"function"==typeof u&&s.default.driver.addEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),u);else{var l={};l[r]=u,null!=u?s.default.driver.setAttribute(n.getNativeNode(),r,u):s.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}}i&&s.default.driver.setStyles(this.getNativeNode(),i)}},{key:"updateChildren",value:function(e,t){var n=this,r=this._renderedChildren;if(null!=e||null!=r){var o={},i={};if(null!=e){Array.isArray(e)||(e=[e]);for(var a=0,u=e.length;a<u;a++){var c=e[a],l=(0,v.default)(o,c,a),d=r&&r[l],h=d&&d._currentElement;if(null!=d&&(0,p.default)(h,c))d.updateComponent(h,c,t,t),o[l]=d;else{if(d){var m=d.getNativeNode();d.unmountComponent(!0),i[l]=m}o[l]=(0,f.default)(c)}}}var y=void 0,_=void 0;if(null!=r)for(var g in r)if(r.hasOwnProperty(g)){var b=r[g],w=!o[g];y?w&&b.unmountComponent():(y=b,_=w)}null!=o&&function(){var e=0,a=0,u=null,c=[];for(var l in o){(function(l){if(!o.hasOwnProperty(l))return"continue";var f=o[l],d=r&&r[l];if(d===f){var p=d.getNativeNode();if(Array.isArray(p)||(p=[p]),d._mountIndex<e){Array.isArray(u)&&(u=u[u.length-1]);for(var h=p.length-1;h>=0;h--)s.default.driver.insertAfter(p[h],u)}c=c.concat(p),e=Math.max(d._mountIndex,e),d._mountIndex=a}else{null!=d&&(e=Math.max(d._mountIndex,e));var v=n.getNativeNode();Array.isArray(v)&&(v=n._parent),f.mountComponent(v,t,function(e,t){var n=i[l];if(Array.isArray(e)||(e=[e]),n){Array.isArray(n)||(n=[n]);for(var r=void 0,o=0;o<e.length;o++){var a=e[o];n[o]?s.default.driver.replaceChild(a,n[o]):s.default.driver.insertAfter(a,r),r=a}if(e.length<n.length)for(var f=e.length;f<n.length;f++)s.default.driver.removeChild(n[f])}else{Array.isArray(u)&&(u=u[u.length-1]);var d=void 0;y&&!u&&(d=y.getNativeNode(),Array.isArray(d)&&(d=d[0]));for(var p=e.length-1;p>=0;p--){var h=e[p];u?s.default.driver.insertAfter(h,u):d?s.default.driver.insertBefore(h,d):s.default.driver.appendChild(h,t)}}c=c.concat(e)}),f._mountIndex=a}a++,u=f.getNativeNode()})(l)}if(Array.isArray(n._nativeNode)){n._nativeNode.splice(0,n._nativeNode.length);for(var f=0;f<c.length;f++)n._nativeNode.push(c[f])}}(),_&&y.unmountComponent(),this._renderedChildren=o}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=s.default.driver.createElement(this._instance),y.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),e}();t.default=g,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){if("function"==typeof t)t(null);else{var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}},e.exports=t.default},function(e,t,n){function r(e){return"string"==typeof e&&-1!==e.indexOf(l)}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;return e.replace(f,function(e){return parseFloat(e)*t+"px"})}function i(){return d}function a(e){d=e}function s(e,t){return"number"==typeof e&&!c[t]}function u(e,t){return t&&s(e,t)?e*d+"px":r(e)?o(e):e}Object.defineProperty(t,"__esModule",{value:!0}),t.isRem=r,t.calcRem=o,t.getRem=i,t.setRem=a,t.isUnitNumber=s,t.convertUnit=u;var c={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},l="rem",f=/[-+]?\d*\.?\d+rem/g,d=void 0},function(e,t,n){function r(e,t){return e.style=e.style||{},t.forEach(function(t){e[t]&&!e.style[t]&&(e.style[t]=e[t],delete e[t])}),e}function o(e,t,n){return e[t]&&!e[n]&&(e[n]=e[t],delete e[t]),e}Object.defineProperty(t,"__esModule",{value:!0}),t.transformPropsAttrsToStyle=r,t.renamePropsAttr=o},function(e,t,n){var r=n(10),o=function(e){return e&&e.__esModule?e:{default:e}}(r);"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(o.default)},function(e,t,n){function r(e){return null==e?null:i.default.get(e)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=r,e.exports=t.default},function(e,t,n){function r(e){function t(e,t,n,r,i,a){return o}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(e,t,n,r,o){}return r(t)}();t.default={array:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,element:o,node:o,any:o,arrayOf:o,instanceOf:o,objectOf:o,oneOf:o,oneOfType:o,shape:o},e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(3),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=function(e){function t(e,n){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n))}return i(t,e),a(t,[{key:"isPureComponentClass",value:function(){}}]),t}(u.default);t.default=c,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n,r){"function"==typeof n&&(r=n,n=null),(0,a.default)(n||{});var o=u.default.render(e,t),i=o.getPublicInstance();return r&&r.call(i),i}Object.defineProperty(t,"__esModule",{value:!0});var i=n(25),a=r(i),s=n(1),u=r(s),c=n(0);r(c);t.default=o,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.2.11",e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(8),a=r(i),s=n(14),u=n(26),c=r(u),l={getElementById:function(e){return o.getElementById(e)},getParentNode:function(e){return e.parentNode},createBody:function(){return o.body},createComment:function(e){return o.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return o.createTextNode(e)},updateText:function(e,t){e["textContent"in o?"textContent":"nodeValue"]=t},createElement:function(e){var t=o.createElement(e.type),n=e.props;return(0,a.default)(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){(t=t||e.parentNode)&&t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode,n.replaceChild(e,t)},insertAfter:function(e,t,n){n=n||t.parentNode
+;var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){n=n||t.parentNode,n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEventListener(t,n)},removeEventListener:function(e,t,n){return e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){if("dangerouslySetInnerHTML"===t)return e.innerHTML=null;"className"===t&&(t="class"),t in e&&(e[t]=null),e.removeAttribute(t)},setAttribute:function(e,t,n){if("dangerouslySetInnerHTML"===t)return e.innerHTML=n.__html;"className"===t&&(t="class"),t in e?e[t]=n:e.setAttribute(t,n)},setStyles:function(e,t){var n={};for(var r in t){var o=t[r];c.default.isFlexProp(r)?c.default[r](o,n):n[r]=(0,s.convertUnit)(o,r)}for(var i in n){var a=n[i];if(Array.isArray(a))for(var u=0;u<a.length;u++)e.style[i]=a[u];else e.style[i]=a}},beforeRender:function(){(0,s.setRem)(this.getWindowWidth()/750)},getWindowWidth:function(){return o.documentElement.clientWidth}};t.default=l,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(44),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=o.default,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0;var o=n(6);Object.defineProperty(t,"createElement",{enumerable:!0,get:function(){return o.createElement}}),Object.defineProperty(t,"cloneElement",{enumerable:!0,get:function(){return o.cloneElement}}),Object.defineProperty(t,"isValidElement",{enumerable:!0,get:function(){return o.isValidElement}}),Object.defineProperty(t,"createFactory",{enumerable:!0,get:function(){return o.createFactory}}),n(16);var i=n(3),a=r(i),s=n(19),u=r(s),c=n(18),l=r(c),f=n(20),d=r(f),p=n(7),h=r(p),v=n(9),m=r(v),y=n(17),_=r(y),g=n(8),b=r(g),w=n(21),O=r(w);t.Component=a.default,t.PureComponent=u.default,t.PropTypes=l.default,t.render=d.default,t.findDOMNode=h.default,t.unmountComponentAtNode=m.default,t.findComponentInstance=_.default,t.setNativeProps=b.default,t.version=O.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){var t=e.driver,n=e.hook,r=e.measurer;if(s.default.EmptyComponent=c.default,s.default.NativeComponent=f.default,s.default.TextComponent=p.default,s.default.FragmentComponent=y.default,s.default.CompositeComponent=v.default,s.default.hook=n||S.default,s.default.measurer=r,!s.default.driver){if(!t)if(i.isWeex)t=g.default;else{if(!i.isWeb)throw Error("No builtin driver matched");t=w.default}s.default.driver=t}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var i=n(5),a=n(0),s=r(a),u=n(28),c=r(u),l=n(12),f=r(l),d=n(33),p=r(d),h=n(27),v=r(h),m=n(29),y=r(m),_=n(23),g=r(_),b=n(22),w=r(b),O=n(10),S=r(O);e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},o={row:"horizontal",column:"vertical"},i={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},a={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},s={isFlexProp:function(e){return a[e]},display:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.display="flex"===e?["-webkit-box","-webkit-flex","flex"]:e,t},flex:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.flexWrap=e,t},alignItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=r[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=o[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=i[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=s,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){try{return e()}catch(e){if(t)t(e);else{if(!d.default.sandbox)throw e;setTimeout(function(){throw e},0)}}}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(32),u=r(s),c=n(34),l=r(c),f=n(0),d=r(f),p=n(13),h=r(p),v=n(2),m=r(v),y=n(4),_=r(y),g=n(31),b=r(g),w=function(){function e(t){o(this,e),this._currentElement=t}return a(e,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=d.default.mountID++,this._updateCount=0;var r=this._currentElement.type,o=this._currentElement.props,a=r.prototype,s=a&&r.prototype.isComponentClass,c=a&&r.prototype.render,f=this._processContext(t),p=void 0,v=void 0;if(s||c)p=new r(o,f,l.default);else{if("function"!=typeof r)throw Error("Invalid component type "+JSON.stringify(r));p=new u.default(r)}p.props=o,p.context=f,p.refs={},p.updater=l.default,p._internal=this,this._instance=p;var y=p.state;if(void 0===y&&(p.state=y=null),i(function(){p.componentWillMount&&p.componentWillMount()}),null==v){d.default.component=this,p.state=this._processPendingState(o,f);var _=void 0;"function"==typeof p.handleError&&(_=function(e){p.handleError(e)}),i(function(){v=p.render()},_),d.default.component=null}return this._renderedComponent=(0,m.default)(v),this._renderedComponent.mountComponent(this._parent,this._processChildContext(t),n),this._currentElement&&this._currentElement.ref&&h.default.attach(this._currentElement._owner,this._currentElement.ref,this),i(function(){p.componentDidMount&&p.componentDidMount()}),d.default.hook.Reconciler.mountComponent(this),p}},{key:"unmountComponent",value:function(e){var t=this._instance;if(i(function(){t.componentWillUnmount&&t.componentWillUnmount()}),d.default.hook.Reconciler.unmountComponent(this),t._internal=null,null!=this._renderedComponent){var n=this._currentElement.ref;n&&h.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return{};var r={};for(var o in n)r[o]=e[o];return r}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,r){var o=this._instance;o||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var a=!1,s=void 0,u=void 0;this._context===r?s=o.context:(s=this._processContext(r),a=!0),e===t?u=t.props:(u=t.props,a=!0);var c=a&&o.componentWillReceiveProps;c&&(this._pendingState=!0,i(function(){o.componentWillReceiveProps(u,s)}),this._pendingState=!1),h.default.update(e,t,this);var f=!0,p=o.props,v=o.state,m=this._processPendingState(u,s);if(this._pendingForceUpdate||(o.shouldComponentUpdate?f=i(function(){return o.shouldComponentUpdate(u,m,s)}):o.isPureComponentClass&&(f=!(0,b.default)(p,u)||!(0,b.default)(v,m))),f){this._pendingForceUpdate=!1;var y=o.context;i(function(){o.componentWillUpdate&&o.componentWillUpdate(u,m,s)}),this._currentElement=t,this._context=r,o.props=u,o.state=m,o.context=s,this._updateRenderedComponent(r),i(function(){o.componentDidUpdate&&o.componentDidUpdate(p,v,y)}),this._updateCount++}else this._currentElement=t,this._context=r,o.props=u,o.state=m,o.context=s;if(c){var _=this._pendingCallbacks;this._pendingCallbacks=null,l.default.runCallbacks(_,o)}d.default.hook.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this._renderedComponent,n=t._currentElement,r=this._instance,o=void 0;if(d.default.component=this,i(function(){o=r.render()}),d.default.component=null,(0,_.default)(n,o))t.updateComponent(n,o,t._context,this._processChildContext(e));else{var a=t.getNativeNode();t.unmountComponent(!0),this._renderedComponent=(0,m.default)(o),this._renderedComponent.mountComponent(this._parent,this._processChildContext(e),function(e,t){Array.isArray(e)||(e=[e]),Array.isArray(a)||(a=[a]);for(var n=void 0,r=0;r<e.length;r++){var o=e[r];a[r]?d.default.driver.replaceChild(o,a[r]):d.default.driver.insertAfter(o,n),n=o}if(e.length<a.length)for(var i=e.length;i<a.length;i++)d.default.driver.removeChild(a[i])})}}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof u.default?null:e}}]),e}();t.default=w,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(){r(this,e),this._currentElement=null}return o(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t;var r={_internal:this},o=this.getNativeNode();return n?n(o,e):a.default.driver.appendChild(o,e),r}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(0),c=r(u),l=n(12),f=r(l),d=n(1),p=r(d),h=n(2),v=r(h),m=n(11),y=r(m),_=function(e){function t(e){return o(this,t),i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=c.default.mountID++;var r={_internal:this};this._instance=r;var o=this.getNativeNode(),i=this._currentElement;if(this.mountChildren(i,t),n)n(o,e);else for(var a=Array.isArray(e),s=0;s<o.length;s++){var u=o[s];a?e.push(u):c.default.driver.appendChild(u,e)}return r}},{key:"mountChildren",value:function(e,t){var n=this,r={},o=this.getNativeNode(),i=e.map(function(e,i){var a=(0,v.default)(e),s=(0,y.default)(r,e,i);return r[s]=a,a._mountIndex=i,a.mountComponent(n._parent,t,function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)o.push(e[t]);else o.push(e)})});return this._renderedChildren=r,i}},{key:"unmountComponent",value:function(e){var t=this;if(this._nativeNode&&(p.default.remove(this._nativeNode),!e))for(var n=0;n<this._nativeNode.length;n++)c.default.driver.removeChild(t._nativeNode[n]);this.unmountChildren(!0),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=[]),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return"fragment"}}]),t}(f.default);t.default=_,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(3),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=1,l=function(e){function t(){var e,n,i,a,s=arguments;r(this,t);for(var u=arguments.length,l=Array(u),f=0;f<u;f++)l[f]=s[f];return n=i=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),i.rootID=c++,a=n,o(i,a)}return i(t,e),a(t,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),t}(u.default);t.default=l,e.exports=t.default},function(e,t,n){function r(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==(void 0===e?"undefined":i(e))||null===e||"object"!==(void 0===t?"undefined":i(t))||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var s=0;s<n.length;s++)if(!a.call(t,n[s])||!r(e[n[s]],t[n[s]]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.prototype.hasOwnProperty;t.default=o,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=(function(e){e&&e.__esModule}(i),function(){function e(t){r(this,e),this.pureRender=t}return o(e,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),e}());t.default=a,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(t){r(this,e),this._currentElement=t,this._stringText=String(t)}return o(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=a.default.mountID++;var r=this.getNativeNode();n?n(r,e):a.default.driver.appendChild(r,e);var o={_internal:this};return a.default.hook.Reconciler.mountComponent(this),o}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),a.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),a.default.driver.updateText(this.getNativeNode(),t),a.default.hook.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createText(this._stringText)),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){function r(e,t){if(t){(e._pendingCallbacks||(e._pendingCallbacks=[])).push(t)}}function o(e,t){if(t){(e._pendingStateQueue||(e._pendingStateQueue=[])).push(t)}}Object.defineProperty(t,"__esModule",{value:!0});var i={setState:function(e,t,n){var i=e._internal;i&&(o(i,t),r(i,n),i._pendingState||this.runUpdate(e))},forceUpdate:function(e,t){var n=e._internal;n&&(n._pendingForceUpdate=!0,r(n,t),this.runUpdate(e))},runUpdate:function(e){var t=e._internal;if(t&&t._renderedComponent){var n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),this.runCallbacks(n,e)}},runCallbacks:function(e,t){if(e)for(var n=0;n<e.length;n++)e[n].call(t)}};t.default=i,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){return e.type="div",e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};t.default={parse:function(e){var t=e.props;e.type="text";var n=t.style,o=t.disabled,i=t.children,a=r({textAlign:"center",fontSize:22,paddingTop:4,paddingRight:12,paddingBottom:6,paddingLeft:12,borderWidth:4,borderStyle:"solid",borderColor:"#000000",backgroudColor:"#c0c0c0"},n);return o&&(t.onClick=null,a=r({},a,{color:"#7f7f7f",borderColor:"#7f7f7f"})),"string"==typeof i&&(t.value=i,t.children=null),e}},e.exports=t.default},function(e,t,n){function r(e,t,n){return{fontSize:e*t,marginTop:e*t*n,marginBottom:e*t*n,fontWeight:"bold"}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},i={h1:r(28,2,.67),h2:r(28,1.5,.83),h3:r(28,1.17,1),h4:r(28,1,1.33),h5:r(28,.83,1.67),h6:r(28,.67,2.33)};t.default={parse:function(e){var t=e.type,n=e.props;return e.type="text",n.style=o({},i[t]||i.h6,n.style),"string"!=typeof n.children||n.value||(n.value=n.children,n.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.type="image",e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(38),i=r(o),a=n(43),s=r(a),u=n(42),c=r(u),l=n(41),f=r(l),d=n(40),p=r(d),h=n(36),v=r(h),m=n(37),y=r(m),_=n(35),g=r(_);t.default={span:f.default,p:p.default,img:i.default,button:v.default,video:s.default,textarea:c.default,h1:y.default,h2:y.default,h3:y.default,h4:y.default,h5:y.default,h6:y.default,nav:g.default,article:g.default,section:g.default,footer:g.default,aside:g.default,main:g.default},e.exports=t.default},function(e,t,n){function r(e){return{type:"span",attr:{value:e}}}function o(e){var t=e.type,n=e.props,r=n.style,o=n.children;"img"===t&&(t="image"),l[t]&&(r=u({},l[t],r),t="span"),n.style=null,n.children=null;var a={type:t,style:r,attr:n||{}};return o&&("span"===t&&"string"==typeof o?a.attr.value=o:a.children=i(o)),a}function i(e){var t=[];Array.isArray(e)||(e=[e]);for(var n=0;n<e.length;n++){var i=e[n];"string"==typeof i?t.push(r(i)):"object"===(void 0===i?"undefined":s(i))&&t.push(o(i))}return t}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"===a(Symbol.iterator)?function(e){return void 0===e?"undefined":a(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":a(e)},u=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},c={fontSize:28,marginTop:28,marginBottom:28},l={u:{textDecoration:"underline"},s:{textDecoration:"line-through"},i:{fontStyle:"italic"},b:{fontWeight:"bold"},del:{textDecoration:"line-through"},em:{fontStyle:"italic"},strong:{fontWeight:"bold"},big:{fontSize:33.6},small:{fontSize:28*.8}};t.default={parse:function(e){var t=e.props,n=t.children;return e.type="richtext",t.style=u({},c,t.style),t.value=i(n),t.children=null,e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return e.type="text","string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return"string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e.props=(0,r.renamePropsAttr)(t,"autoplay","auto-play"),e}},e.exports=t.default},function(e,t,n){var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"===o(Symbol.iterator)?function(e){return void 0===e?"undefined":o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":o(e)},a=n(14),s=n(39),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=/on[A-Z]/,l={},f="object"===(void 0===r?"undefined":i(r))?r:"object"===(void 0===f?"undefined":i(f))?f:null,d={getElementById:function(e){return l[e]},getParentNode:function(e){return e.parentNode},createBody:function(){if(f.body)return f.body;var e=f.documentElement,t=f.createBody();return e.appendChild(t),t},createComment:function(e){return f.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return d.createElement({type:"text",props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=u.default[e.type];t&&(e=t.parse(e));var n=e.props,r={},o=n.style;for(var i in o)r[i]=(0,a.convertUnit)(o[i],i);var s=f.createElement(e.type,{style:r});return this.setNativeProps(s,n),s},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){t=t||e.parentNode;var n=e.attr&&e.attr.id;return null!=n&&(l[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode;var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){return n=n||t.parentNode,n.insertAfter(e,t)},insertBefore:function(e,t,n){return n=n||t.parentNode,n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEvent(t,n)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return"id"==t&&(l[n]=null),e.setAttr(t,void 0,!1)},setAttribute:function(e,t,n){return"id"==t&&(l[n]=e),e.setAttr(t,n,!1)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,a.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){f.open(),(0,a.setRem)(this.getWindowWidth()/750)},afterRender:function(){f.listener&&f.listener.createFinish&&f.listener.createFinish(),f.close()},getWindowWidth:function(){return 750},setNativeProps:function(e,t){var n=this;for(var r in t){var o=t[r];if("children"!==r&&null!=o)if(c.test(r)){var i=r.slice(2).toLowerCase();n.addEventListener(e,i,o)}else n.setAttribute(e,r,o)}}};t.default=d,e.exports=t.default}])}},function(e,t,n){function r(e,t){var n;for(var r in P)P.hasOwnProperty(r)&&(n=P[r],"*"!==t&&t!==n.origin||(e.target=n.window,n.window.dispatchEvent(e)))}function o(e){e.taskCenter.send("dom",{action:"updateFinish"},[])}function i(e){var t=P[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}function a(e){k=e.Document,C=e.Element,j=e.Comment}function s(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?x[e]=!0:"object"===(void 0===e?"undefined":b(e))&&"string"==typeof e.type&&(x[e.type]=e))})}function u(e){}function c(e){if("object"===(void 0===e?"undefined":b(e)))for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(E[t]=e[t])}function l(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1};return e}function f(e,t){if("object"===(void 0===E?"undefined":b(E))){for(var n in E)!function(n){var r=A+n;e[r]={module:{exports:{}},isInitialized:!0},E[n].forEach(function(o){"string"==typeof o&&(o={name:o});var i=o.name;e[r].module.exports[i]=function(){for(var e=arguments,r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=e[a];return t.taskCenter.send("module",{module:n,method:i},o)}})}(n)}return e}function d(e,t,o,i,a){var s=P[e];if(void 0!=s)throw new Error('Instance id "'+e+'" existed when create instance');var u=Date.now(),c="object"===("undefined"==typeof WXEnvironment?"undefined":b(WXEnvironment))&&WXEnvironment||{},d=n(2)(),p="function"==typeof p?p:d.Promise,h="function"==typeof h?h:d.Symbol,v="function"==typeof v?v:d.Set,m="function"==typeof m?m:d.Map,y="function"==typeof y?y:d.WeakMap,_="function"==typeof _?_:d.WeakSet,O=d.URL,x=d.URLSearchParams,E=d.FontFace,C=d.matchMedia,j=new k(e,o.bundleUrl),A=new O(o.bundleUrl),N={};s=P[e]={document:j,instanceId:e,modules:N,origin:A.origin,uid:0},f(N,j);var M=n(5)(N),$=n(11)(N),R=n(7)($);n(6)($,j);var D=n(9)($,p),F=D.fetch,L=D.Headers,B=D.Request,U=D.Response,V=n(13)($),z=n(12)($,j),W=z.setTimeout,q=z.clearTimeout,J=z.setInterval,H=z.clearInterval,G=z.requestAnimationFrame,X=z.cancelAnimationFrame,K=n(3)(),Z=K.atob,Q=K.btoa,Y=n(10)(u),ee=n(8)(),te=ee.Event,ne=ee.CustomEvent,re=new S.default,oe={Promise:p,Symbol:h,Map:m,Set:v,WeakMap:y,WeakSet:_,name:"",closed:!1,atob:Z,btoa:Q,performance:Y,document:j,location:A,navigator:{product:"Weex",platform:c.platform,appName:c.appName,appVersion:c.appVersion},screen:{width:c.deviceWidth,height:c.deviceHeight,availWidth:c.deviceWidth,availHeight:c.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:c.scale,fetch:F,Headers:L,Response:U,Request:B,URL:O,URLSearchParams:x,FontFace:E,WebSocket:V,Event:te,CustomEvent:ne,matchMedia:C,setTimeout:W,clearTimeout:q,setInterval:J,clearInterval:H,requestAnimationFrame:G,cancelAnimationFrame:X,alert:function(e){$(I).alert({message:e},function(){})},open:function(e){$(T).push({url:e,animated:"true"},function(e){})},postMessage:function(e,t){r({origin:A.origin,data:JSON.parse(JSON.stringify(e)),type:"message",source:oe},t)},addEventListener:function(e,t){re.on(e,t)},removeEventListener:function(e,t){re.off(e,t)},dispatchEvent:function(e){re.emit(e.type,e)},define:M,require:$,__weex_document__:j,__weex_define__:M,__weex_require__:$,__weex_downgrade__:R,__weex_env__:c,__weex_code__:t,__weex_options__:o,__weex_data__:i};s.window=oe.self=oe.window=oe;var ie={},ae={};try{ie=a.services.builtinGlobals,ae=a.services.builtinModules}catch(e){}if(Object.assign(oe,ie),l(N,g({},w.ModuleFactories,ae),oe),"Web"!==c.platform){var se=Y.timing;se.domLoading=Date.now(),new Function('with(this){(function(){"use strict";\n'+t+"\n}).call(this)}").call(oe),se.domInteractive=se.domComplete=se.domInteractive=Date.now()}else new Function('"use strict";\n'+t).call(oe)}function p(e,t){var n=i(e),r=n.document;r.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),r.taskCenter.send("dom",{action:"refreshFinish"},[])}function h(e){var t=i(e);t.window.closed=!0;var n=t.document;n.documentElement.fireEvent("destory",{timestamp:Date.now()}),n.destroy&&n.destroy(),n.taskCenter&&n.taskCenter.destroyCallback&&n.taskCenter.destroyCallback(),delete P[e]}function v(e){var t=i(e),n=t.document;return n.toJSON?n.toJSON():{}}function m(e,t,n,r,i){if(Array.isArray(t))return void t.some(function(t){return!1!==m(e,t,n,r)});var a=e.getRef(t);if(a){var s=e.fireEvent(a,n,r,i);return o(e),s}return new Error('Invalid element reference "'+t+'"')}function y(e,t){var n=i(e);if(Array.isArray(t)){var r=n.document,a=[];return t.forEach(function(e){var t=void 0;if("fireEvent"===e.method){var n=_(e.args,4),i=n[0],s=n[1],u=n[2],c=n[3];t=m(r,i,s,u,c)}else if("callback"===e.method){var l=_(e.args,3),f=l[0],d=l[1],p=l[2];t=r.taskCenter.callback(f,d,p),o(r)}a.push(t)}),a}}Object.defineProperty(t,"__esModule",{value:!0});var _=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),g=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getInstance=i,t.init=a,t.registerComponents=s,t.registerMethods=u,t.registerModules=c,t.createInstance=d,t.refreshInstance=p,t.destroyInstance=h,t.getRoot=v,t.receiveTasks=y;var w=n(4),O=n(1),S=function(e){return e&&e.__esModule?e:{default:e}}(O),x={},E={},k=void 0,C=void 0,j=void 0,A="@weex-module/",I=A+"modal",T=A+"navigator",P={};t.default=t},function(e,t,n){
+Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){if((void 0===e?"undefined":r(e))+(void 0===t?"undefined":r(t))!="stringstring")return!1;if("*"==t)return!0;for(var n=t.match(/(\W+)?([\d|.]+)/),o=e.split("."),i=n[2].split("."),a=Math.max(o.length,i.length),s=0,u=0;u<a;u++){if(o[u]&&!i[u]&&parseInt(o[u])>0||parseInt(o[u])>parseInt(i[u])){s=1;break}if(i[u]&&!o[u]&&parseInt(i[u])>0||parseInt(o[u])<parseInt(i[u])){s=-1;break}}switch(n[1]){case"<":if(-1===s)return!0;break;case"<=":if(1!==s)return!0;break;case">":if(1===s)return!0;break;case">=":if(-1!==s)return!0;break;default:if(0===s)return!0}return!1}},e.exports=t.default},function(e,t,n){function r(e,t){for(var n=e[a][t];null!=n;){if(n.kind===s)return n.listener;n=n.next}return null}function o(e,t,n){"function"!=typeof n&&"object"!=typeof n&&(n=null);for(var r=null,o=e[a][t];null!=o;)o.kind===s?null==r?e[a][t]=o.next:r.next=o.next:r=o,o=o.next;null!=n&&(null==r?e[a][t]=u(n,s):r.next=u(n,s))}var i=n(0),a=i.LISTENERS,s=i.ATTRIBUTE,u=i.newNode;e.exports.defineCustomEventTarget=function(e,t){function n(){e.call(this)}var i={constructor:{value:n,configurable:!0,writable:!0}};return t.forEach(function(e){i["on"+e]={get:function(){return r(this,e)},set:function(t){o(this,e,t)},configurable:!0,enumerable:!0}}),n.prototype=Object.create(e.prototype,i),n}},function(e,t,n){var r=n(0),o=n(17),i=n(19),a=r.isObject,s=r.LISTENERS,u=r.CAPTURE,c=r.BUBBLE,l=r.ATTRIBUTE,f=r.newNode,d=o.defineCustomEventTarget,p=i.createEventWrapper,h=i.STOP_IMMEDIATE_PROPAGATION_FLAG,v=i.PASSIVE_LISTENER_FLAG,m="undefined"!=typeof window&&void 0!==window.EventTarget,y=e.exports=function e(){var t=arguments;if(!(this instanceof e)){if(1===arguments.length&&Array.isArray(arguments[0]))return d(e,arguments[0]);if(arguments.length>0){for(var n=Array(arguments.length),r=0;r<arguments.length;++r)n[r]=t[r];return d(e,n)}throw new TypeError("Cannot call a class as a function")}Object.defineProperty(this,s,{value:Object.create(null)})};y.prototype=Object.create((m?window.EventTarget:Object).prototype,{constructor:{value:y,writable:!0,configurable:!0},addEventListener:{value:function(e,t,n){if(null==t)return!1;if("function"!=typeof t&&"object"!=typeof t)throw new TypeError('"listener" is not an object.');var r=a(n)?Boolean(n.capture):Boolean(n),o=r?u:c,i=this[s][e];if(null==i)return this[s][e]=f(t,o,n),console.log(this[s]),!0;for(var l=null;null!=i;){if(i.listener===t&&i.kind===o)return!1;l=i,i=i.next}return l.next=f(t,o,n),!0},configurable:!0,writable:!0},removeEventListener:{value:function(e,t,n){var r=this;if(null==t)return!1;for(var o=a(n)?Boolean(n.capture):Boolean(n),i=o?u:c,l=null,f=this[s][e];null!=f;){if(f.listener===t&&f.kind===i)return null==l?r[s][e]=f.next:l.next=f.next,!0;l=f,f=f.next}return!1},configurable:!0,writable:!0},dispatchEvent:{value:function(e){var t=this,n=e.type;console.log(n,this[s]);var r=this[s][n];if(console.log(n,r),null==r)return!0;for(var o=p(e,this),i=null;null!=r&&(r.once?null==i?t[s][n]=r.next:i.next=r.next:i=r,o[v]=r.passive,"function"==typeof r.listener?r.listener.call(t,o):r.kind!==l&&"function"==typeof r.listener.handleEvent&&r.listener.handleEvent(o),!o[h]);)r=r.next;return!o.defaultPrevented},configurable:!0,writable:!0}})},function(e,t,n){var r=n(0).createUniqueKey,o=r("stop_immediate_propagation_flag"),i=r("canceled_flag"),a=r("passive_listener_flag"),s=r("original_event"),u=Object.freeze({stopPropagation:Object.freeze({value:function(){var e=this[s];"function"==typeof e.stopPropagation&&e.stopPropagation()},writable:!0,configurable:!0}),stopImmediatePropagation:Object.freeze({value:function(){this[o]=!0;var e=this[s];"function"==typeof e.stopImmediatePropagation&&e.stopImmediatePropagation()},writable:!0,configurable:!0}),preventDefault:Object.freeze({value:function(){if(!this[a]){!0===this.cancelable&&(this[i]=!0);var e=this[s];"function"==typeof e.preventDefault&&e.preventDefault()}},writable:!0,configurable:!0}),defaultPrevented:Object.freeze({get:function(){return this[i]},enumerable:!0,configurable:!0})});e.exports.STOP_IMMEDIATE_PROPAGATION_FLAG=o,e.exports.PASSIVE_LISTENER_FLAG=a,e.exports.createEventWrapper=function(e,t){var n="number"==typeof e.timeStamp?e.timeStamp:Date.now(),r={type:{value:e.type,enumerable:!0},target:{value:t,enumerable:!0},currentTarget:{value:t,enumerable:!0},eventPhase:{value:2,enumerable:!0},bubbles:{value:Boolean(e.bubbles),enumerable:!0},cancelable:{value:Boolean(e.cancelable),enumerable:!0},timeStamp:{value:n,enumerable:!0},isTrusted:{value:!1,enumerable:!0}};return r[o]={value:!1,writable:!0},r[i]={value:!1,writable:!0},r[a]={value:!1,writable:!0},r[s]={value:e},void 0!==e.detail&&(r.detail={value:e.detail,enumerable:!0}),Object.create(Object.create(e,u),r)}}])}),Yu=e(Qu),ec={Vanilla:iu,Vue:_u,Rax:Yu,Weex:Zu},tc={},nc={};Dn.prototype.postMessage=function(e){var t=this;if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var n=tc[this.name];if(n&&n.length)for(var r=0;r<n.length;++r){var o=n[r];o._closed||o===t||"function"==typeof o.onmessage&&o.onmessage(new Rn("message",{data:e}))}},Dn.prototype.close=function(){var e=this;if(!this._closed&&(this._closed=!0,tc[this.name])){var t=tc[this.name].filter(function(t){return t!==e});t.length?tc[this.name]=t:delete tc[this.name]}};var rc={create:function(e,t,n){if(nc[e]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(t){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(t)}),this._closed=!1,this.onmessage=null,tc[this.name]||(tc[this.name]=[]),tc[this.name].push(this),nc[e].push(this)}};return r.BroadcastChannel.prototype=Dn.prototype,{instance:r}},destroy:function(e,t){nc[e].forEach(function(e){return e.close()}),delete nc[e]}},oc={BroadcastChannel:rc},ic=qs.init,ac=qs.config;ac.frameworks=ec;var sc=qn.native,uc=qn.transformer;for(var cc in oc)qs.service.register(cc,oc[cc]);qs.freezePrototype(),qs.setNativeConsole(),global.frameworkVersion=sc,global.transformerVersion=uc;var lc=ic(ac);for(var fc in lc)!function(e){global[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=lc[e].apply(lc,t);return r instanceof Error&&console.error(r.toString()),r}}(fc);var dc=Object.freeze({$userTrack:Fn,$sendMtop:Ln,$callWindvane:Bn,$setSpm:Un,$getUserInfo:Vn,$login:zn,$logout:Wn});global.registerMethods(dc)});
\ No newline at end of file
diff --git a/android/sdk/build.gradle b/android/sdk/build.gradle
index b4c0eac..9e76745 100755
--- a/android/sdk/build.gradle
+++ b/android/sdk/build.gradle
@@ -54,19 +54,22 @@
     resourcePrefix "weex"
 
     useLibrary 'org.apache.http.legacy'
+    def line
+    new File(projectDir,"assets/main.js").withReader { line = it.readLine() }
+    def m = line =~ /[A-Z\s]+\s+([0-9\.]+),\s+Build\s+[0-9]+/;
+    def jsfmVersion = m[0][1]
+    println jsfmVersion
 
-    def jsfmVersion = "0.15.2"
-    try{
-        def line
-        new File("assets/main.js").withReader { line = it.readLine() }
-        def m = line =~ /[A-Z\s]+\:\s+([0-9\.]+)\s+Build\s+[0-9]+/;
-        jsfmVersion = m[0][1]
-        println jsfmVersion
-    } catch (java.lang.Exception e) {
 
-    }
+    def ARMEABI_Size = new File(projectDir,"libs/armeabi/libweexjsc.so").length();
+    def X86_Size = new File(projectDir,"libs/x86/libweexjsc.so").length();
+    println "ARMEABI_Size: "+ARMEABI_Size;
+    println "X86_Size:" + X86_Size;
+
 
     defaultConfig {
+        buildConfigField "long", "ARMEABI_Size", "${ARMEABI_Size}"
+        buildConfigField "long", "X86_Size", "${X86_Size}"
         buildConfigField "String", "buildJavascriptFrameworkVersion", "\"${jsfmVersion}\""
         buildConfigField "String", "buildVersion", "\"${version}\""
         minSdkVersion 14
@@ -81,10 +84,12 @@
         release {
             minifyEnabled false
             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+            buildConfigField "boolean", "ENABLE_TRACE", "false"
         }
 
         debug {
             testCoverageEnabled true
+            buildConfigField "boolean", "ENABLE_TRACE", "true"
         }
     }
 
diff --git a/android/sdk/config/quality/checkstyle.xml b/android/sdk/config/quality/checkstyle.xml
index f06d27a..3d53a9d 100644
--- a/android/sdk/config/quality/checkstyle.xml
+++ b/android/sdk/config/quality/checkstyle.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <!DOCTYPE module PUBLIC
           "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
           "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
new file mode 100755
index 0000000..d7bcd1c
--- /dev/null
+++ b/android/sdk/libs/armeabi/libweexjsc.so
Binary files differ
diff --git a/android/sdk/libs/armeabi/libweexv8.so b/android/sdk/libs/armeabi/libweexv8.so
deleted file mode 100755
index cc7567b..0000000
--- a/android/sdk/libs/armeabi/libweexv8.so
+++ /dev/null
Binary files differ
diff --git a/android/sdk/libs/x86/libweexjsc.so b/android/sdk/libs/x86/libweexjsc.so
new file mode 100755
index 0000000..d60dce1
--- /dev/null
+++ b/android/sdk/libs/x86/libweexjsc.so
Binary files differ
diff --git a/android/sdk/libs/x86/libweexv8.so b/android/sdk/libs/x86/libweexv8.so
deleted file mode 100755
index c5d52fa..0000000
--- a/android/sdk/libs/x86/libweexv8.so
+++ /dev/null
Binary files differ
diff --git a/android/sdk/license/LICENSE b/android/sdk/license/LICENSE
index cfc27db..90705e0 100755
--- a/android/sdk/license/LICENSE
+++ b/android/sdk/license/LICENSE
@@ -1,202 +1,16 @@
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
 
-                                 Apache License
-                           Version 2.0, January 2004
-                        http://www.apache.org/licenses/
+  http://www.apache.org/licenses/LICENSE-2.0
 
-   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-   1. Definitions.
-
-      "License" shall mean the terms and conditions for use, reproduction,
-      and distribution as defined by Sections 1 through 9 of this document.
-
-      "Licensor" shall mean the copyright owner or entity authorized by
-      the copyright owner that is granting the License.
-
-      "Legal Entity" shall mean the union of the acting entity and all
-      other entities that control, are controlled by, or are under common
-      control with that entity. For the purposes of this definition,
-      "control" means (i) the power, direct or indirect, to cause the
-      direction or management of such entity, whether by contract or
-      otherwise, or (ii) ownership of fifty percent (50%) or more of the
-      outstanding shares, or (iii) beneficial ownership of such entity.
-
-      "You" (or "Your") shall mean an individual or Legal Entity
-      exercising permissions granted by this License.
-
-      "Source" form shall mean the preferred form for making modifications,
-      including but not limited to software source code, documentation
-      source, and configuration files.
-
-      "Object" form shall mean any form resulting from mechanical
-      transformation or translation of a Source form, including but
-      not limited to compiled object code, generated documentation,
-      and conversions to other media types.
-
-      "Work" shall mean the work of authorship, whether in Source or
-      Object form, made available under the License, as indicated by a
-      copyright notice that is included in or attached to the work
-      (an example is provided in the Appendix below).
-
-      "Derivative Works" shall mean any work, whether in Source or Object
-      form, that is based on (or derived from) the Work and for which the
-      editorial revisions, annotations, elaborations, or other modifications
-      represent, as a whole, an original work of authorship. For the purposes
-      of this License, Derivative Works shall not include works that remain
-      separable from, or merely link (or bind by name) to the interfaces of,
-      the Work and Derivative Works thereof.
-
-      "Contribution" shall mean any work of authorship, including
-      the original version of the Work and any modifications or additions
-      to that Work or Derivative Works thereof, that is intentionally
-      submitted to Licensor for inclusion in the Work by the copyright owner
-      or by an individual or Legal Entity authorized to submit on behalf of
-      the copyright owner. For the purposes of this definition, "submitted"
-      means any form of electronic, verbal, or written communication sent
-      to the Licensor or its representatives, including but not limited to
-      communication on electronic mailing lists, source code control systems,
-      and issue tracking systems that are managed by, or on behalf of, the
-      Licensor for the purpose of discussing and improving the Work, but
-      excluding communication that is conspicuously marked or otherwise
-      designated in writing by the copyright owner as "Not a Contribution."
-
-      "Contributor" shall mean Licensor and any individual or Legal Entity
-      on behalf of whom a Contribution has been received by Licensor and
-      subsequently incorporated within the Work.
-
-   2. Grant of Copyright License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      copyright license to reproduce, prepare Derivative Works of,
-      publicly display, publicly perform, sublicense, and distribute the
-      Work and such Derivative Works in Source or Object form.
-
-   3. Grant of Patent License. Subject to the terms and conditions of
-      this License, each Contributor hereby grants to You a perpetual,
-      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-      (except as stated in this section) patent license to make, have made,
-      use, offer to sell, sell, import, and otherwise transfer the Work,
-      where such license applies only to those patent claims licensable
-      by such Contributor that are necessarily infringed by their
-      Contribution(s) alone or by combination of their Contribution(s)
-      with the Work to which such Contribution(s) was submitted. If You
-      institute patent litigation against any entity (including a
-      cross-claim or counterclaim in a lawsuit) alleging that the Work
-      or a Contribution incorporated within the Work constitutes direct
-      or contributory patent infringement, then any patent licenses
-      granted to You under this License for that Work shall terminate
-      as of the date such litigation is filed.
-
-   4. Redistribution. You may reproduce and distribute copies of the
-      Work or Derivative Works thereof in any medium, with or without
-      modifications, and in Source or Object form, provided that You
-      meet the following conditions:
-
-      (a) You must give any other recipients of the Work or
-          Derivative Works a copy of this License; and
-
-      (b) You must cause any modified files to carry prominent notices
-          stating that You changed the files; and
-
-      (c) You must retain, in the Source form of any Derivative Works
-          that You distribute, all copyright, patent, trademark, and
-          attribution notices from the Source form of the Work,
-          excluding those notices that do not pertain to any part of
-          the Derivative Works; and
-
-      (d) If the Work includes a "NOTICE" text file as part of its
-          distribution, then any Derivative Works that You distribute must
-          include a readable copy of the attribution notices contained
-          within such NOTICE file, excluding those notices that do not
-          pertain to any part of the Derivative Works, in at least one
-          of the following places: within a NOTICE text file distributed
-          as part of the Derivative Works; within the Source form or
-          documentation, if provided along with the Derivative Works; or,
-          within a display generated by the Derivative Works, if and
-          wherever such third-party notices normally appear. The contents
-          of the NOTICE file are for informational purposes only and
-          do not modify the License. You may add Your own attribution
-          notices within Derivative Works that You distribute, alongside
-          or as an addendum to the NOTICE text from the Work, provided
-          that such additional attribution notices cannot be construed
-          as modifying the License.
-
-      You may add Your own copyright statement to Your modifications and
-      may provide additional or different license terms and conditions
-      for use, reproduction, or distribution of Your modifications, or
-      for any such Derivative Works as a whole, provided Your use,
-      reproduction, and distribution of the Work otherwise complies with
-      the conditions stated in this License.
-
-   5. Submission of Contributions. Unless You explicitly state otherwise,
-      any Contribution intentionally submitted for inclusion in the Work
-      by You to the Licensor shall be under the terms and conditions of
-      this License, without any additional terms or conditions.
-      Notwithstanding the above, nothing herein shall supersede or modify
-      the terms of any separate license agreement you may have executed
-      with Licensor regarding such Contributions.
-
-   6. Trademarks. This License does not grant permission to use the trade
-      names, trademarks, service marks, or product names of the Licensor,
-      except as required for reasonable and customary use in describing the
-      origin of the Work and reproducing the content of the NOTICE file.
-
-   7. Disclaimer of Warranty. Unless required by applicable law or
-      agreed to in writing, Licensor provides the Work (and each
-      Contributor provides its Contributions) on an "AS IS" BASIS,
-      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-      implied, including, without limitation, any warranties or conditions
-      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-      PARTICULAR PURPOSE. You are solely responsible for determining the
-      appropriateness of using or redistributing the Work and assume any
-      risks associated with Your exercise of permissions under this License.
-
-   8. Limitation of Liability. In no event and under no legal theory,
-      whether in tort (including negligence), contract, or otherwise,
-      unless required by applicable law (such as deliberate and grossly
-      negligent acts) or agreed to in writing, shall any Contributor be
-      liable to You for damages, including any direct, indirect, special,
-      incidental, or consequential damages of any character arising as a
-      result of this License or out of the use or inability to use the
-      Work (including but not limited to damages for loss of goodwill,
-      work stoppage, computer failure or malfunction, or any and all
-      other commercial damages or losses), even if such Contributor
-      has been advised of the possibility of such damages.
-
-   9. Accepting Warranty or Additional Liability. While redistributing
-      the Work or Derivative Works thereof, You may choose to offer,
-      and charge a fee for, acceptance of support, warranty, indemnity,
-      or other liability obligations and/or rights consistent with this
-      License. However, in accepting such obligations, You may act only
-      on Your own behalf and on Your sole responsibility, not on behalf
-      of any other Contributor, and only if You agree to indemnify,
-      defend, and hold each Contributor harmless for any liability
-      incurred by, or claims asserted against, such Contributor by reason
-      of your accepting any such warranty or additional liability.
-
-   END OF TERMS AND CONDITIONS
-
-   APPENDIX: How to apply the Apache License to your work.
-
-      To apply the Apache License to your work, attach the following
-      boilerplate notice, with the fields enclosed by brackets "[]"
-      replaced with your own identifying information. (Don't include
-      the brackets!)  The text should be enclosed in the appropriate
-      comment syntax for the file format. We also recommend that a
-      file or class name and description of purpose be included on the
-      same "printed page" as the copyright notice for easier
-      identification within third-party archives.
-
-   Copyright 2016 Alibaba Group
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
\ No newline at end of file
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
\ No newline at end of file
diff --git a/android/sdk/src/main/AndroidManifest.xml b/android/sdk/src/main/AndroidManifest.xml
index 54d5f21..9897b6a 100755
--- a/android/sdk/src/main/AndroidManifest.xml
+++ b/android/sdk/src/main/AndroidManifest.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.taobao.weappplus_sdk"
           android:versionCode="1"
diff --git a/android/sdk/src/main/java/com/taobao/weex/IWXActivityStateListener.java b/android/sdk/src/main/java/com/taobao/weex/IWXActivityStateListener.java
old mode 100755
new mode 100644
index 0e22ec4..cc2d413
--- a/android/sdk/src/main/java/com/taobao/weex/IWXActivityStateListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/IWXActivityStateListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/IWXRenderListener.java b/android/sdk/src/main/java/com/taobao/weex/IWXRenderListener.java
old mode 100755
new mode 100644
index e88dece..fd78d60
--- a/android/sdk/src/main/java/com/taobao/weex/IWXRenderListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/IWXRenderListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java b/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java
new file mode 100644
index 0000000..814edae
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/IWXStatisticsListener.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex;
+
+public interface IWXStatisticsListener {
+  /**
+   * Called when weex sdk engine begin to initialize.
+   */
+   void onSDKEngineInitialize();
+
+  /**
+   * Called when begin to load js framework.
+   */
+   void onJsFrameworkStart();
+
+  /**
+   * Called when finish loading js framework.
+   */
+   void onJsFrameworkReady();
+
+  /**
+   * Called when the render view phase of first view reached.
+   */
+   void onFirstView();
+
+  /**
+   * Called when the render view phase of first screen reached.
+   */
+  void onFirstScreen();
+
+  /**
+   * Called when to start a http request.
+   */
+  void onHttpStart();
+
+  /**
+   * Called when received a http response header data.
+   */
+  void onHeadersReceived();
+
+  /**
+   * Called when to finish a http request.
+   */
+  void onHttpFinish();
+
+  /**
+   * Called when an exception occured.
+   */
+  void onException(String instanceid, String errCode, String msg);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/InitConfig.java b/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
index c9b2857..0b0dedf 100644
--- a/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
+++ b/android/sdk/src/main/java/com/taobao/weex/InitConfig.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -209,6 +23,7 @@
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.adapter.URIAdapter;
 import com.taobao.weex.appfram.storage.IWXStorageAdapter;
@@ -224,6 +39,7 @@
   private IWXUserTrackAdapter utAdapter;
   private IWXDebugAdapter debugAdapter;
   private IWXStorageAdapter storageAdapter;
+  private IWXSoLoaderAdapter soLoader;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory webSocketAdapterFactory;
   private IWXJSExceptionAdapter mJSExceptionAdapter;
@@ -248,6 +64,11 @@
   public IWXDebugAdapter getDebugAdapter(){
     return debugAdapter;
   }
+
+  public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
+    return soLoader;
+  }
+
   public String getFramework() {
     return framework;
   }
@@ -278,6 +99,7 @@
     IWXUserTrackAdapter utAdapter;
     IWXDebugAdapter debugAdapter;
     IWXStorageAdapter storageAdapter;
+    IWXSoLoaderAdapter soLoader;
     URIAdapter mURIAdapter;
     IWXJSExceptionAdapter mJSExceptionAdapter;
     String framework;
@@ -326,6 +148,11 @@
       return this;
     }
 
+    public Builder setSoLoader(IWXSoLoaderAdapter loader) {
+      this.soLoader = loader;
+      return this;
+    }
+
     public Builder setFramework(String framework){
       this.framework=framework;
       return this;
@@ -344,6 +171,7 @@
       config.utAdapter = this.utAdapter;
       config.debugAdapter=this.debugAdapter;
       config.storageAdapter = this.storageAdapter;
+      config.soLoader=this.soLoader;
       config.framework=this.framework;
       config.mURIAdapter = this.mURIAdapter;
       config.webSocketAdapterFactory = this.webSocketAdapterFactory;
diff --git a/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java b/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java
index 129d516..2bcf330 100644
--- a/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
old mode 100755
new mode 100644
index 376a4d4..50449d4
--- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -219,6 +33,7 @@
 import com.taobao.weex.utils.WXSoInstallMgrSdk;
 import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -340,17 +155,29 @@
   /**
    * Tell whether Weex can run on current hardware.
    * @return true if weex can run on current hardware, otherwise false.
+   * Weex has removed the restrictions on the tablet, please use {@link #isCPUSupport()}
    */
+  @Deprecated
   public static boolean isHardwareSupport() {
+    if (WXEnvironment.isApkDebugable()) {
+      WXLogUtils.d("isTableDevice:" + WXUtils.isTabletDevice());
+    }
+    return isCPUSupport() && !WXUtils.isTabletDevice();
+  }
+
+  /**
+   * Determine whether Weex supports the current CPU architecture
+   * @return true when support
+   */
+  public static boolean isCPUSupport(){
     boolean excludeX86 = "true".equals(options.get(SETTING_EXCLUDE_X86SUPPORT));
     boolean isX86AndExcluded = WXSoInstallMgrSdk.isX86() && excludeX86;
     boolean isCPUSupport = WXSoInstallMgrSdk.isCPUSupport() && !isX86AndExcluded;
     if (WXEnvironment.isApkDebugable()) {
       WXLogUtils.d("WXEnvironment.sSupport:" + isCPUSupport
-                   + "isX86AndExclueded: "+ isX86AndExcluded
-                   + " !WXUtils.isTabletDevice():" + !WXUtils.isTabletDevice());
+                   + "isX86AndExclueded: "+ isX86AndExcluded);
     }
-    return isCPUSupport && !WXUtils.isTabletDevice();
+    return isCPUSupport;
   }
 
   public static boolean isApkDebugable() {
@@ -411,4 +238,21 @@
     return cachePath;
   }
 
+  public static String getFilesDir(Context context) {
+    if (context == null) {
+      return "";
+    }
+    File filesDir = context.getFilesDir();
+    String path = "";
+    if (filesDir != null) {
+      path = filesDir.getPath();
+    } else {
+      path = WXEnvironment.getApplication().getApplicationInfo().dataDir;
+      path += File.separator;
+      path += "files";
+    }
+
+    return path;
+  }
+
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventModule.java b/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventModule.java
index 4aeacd5..b487ba2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventModule.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventReceiver.java b/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventReceiver.java
index 622be6e..82e8363 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventReceiver.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXGlobalEventReceiver.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java
old mode 100755
new mode 100644
index 164e49e..a0feaf6
--- a/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
old mode 100755
new mode 100644
index 9992681..4f3335d
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -140,14 +48,14 @@
 import com.taobao.weex.common.WXModule;
 import com.taobao.weex.dom.BasicEditTextDomObject;
 import com.taobao.weex.dom.TextAreaEditTextDomObject;
+import com.taobao.weex.dom.WXCellDomObject;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.dom.WXDomRegistry;
 import com.taobao.weex.dom.WXListDomObject;
+import com.taobao.weex.dom.WXRecyclerDomObject;
 import com.taobao.weex.dom.WXScrollerDomObject;
 import com.taobao.weex.dom.WXSwitchDomObject;
 import com.taobao.weex.dom.WXTextDomObject;
-import com.taobao.weex.ui.component.list.SimpleListComponent;
-import com.taobao.weex.ui.module.WXModalUIModule;
 import com.taobao.weex.http.WXStreamModule;
 import com.taobao.weex.ui.ExternalLoaderComponentHolder;
 import com.taobao.weex.ui.IExternalComponentGetter;
@@ -176,9 +84,11 @@
 import com.taobao.weex.ui.component.WXVideo;
 import com.taobao.weex.ui.component.WXWeb;
 import com.taobao.weex.ui.component.list.HorizontalListComponent;
+import com.taobao.weex.ui.component.list.SimpleListComponent;
 import com.taobao.weex.ui.component.list.WXCell;
 import com.taobao.weex.ui.component.list.WXListComponent;
 import com.taobao.weex.ui.module.WXMetaModule;
+import com.taobao.weex.ui.module.WXModalUIModule;
 import com.taobao.weex.ui.module.WXTimerModule;
 import com.taobao.weex.ui.module.WXWebViewModule;
 import com.taobao.weex.utils.WXLogUtils;
@@ -193,7 +103,7 @@
 
   public static final String JS_FRAMEWORK_RELOAD="js_framework_reload";
 
-  private static final String V8_SO_NAME = "weexv8";
+  private static final String V8_SO_NAME = "weexjsc";
   private volatile static boolean mIsInit = false;
   private static final Object mLock = new Object();
   private static final String TAG = "WXSDKEngine";
@@ -261,13 +171,16 @@
       public void run() {
         long start = System.currentTimeMillis();
         WXSDKManager sm = WXSDKManager.getInstance();
+        sm.onSDKEngineInitialize();
         if(config != null ) {
           sm.setInitConfig(config);
           if(config.getDebugAdapter()!=null){
             config.getDebugAdapter().initDebug(application);
           }
         }
-        WXSoInstallMgrSdk.init(application);
+        WXSoInstallMgrSdk.init(application,
+                              sm.getIWXSoLoaderAdapter(),
+                              sm.getWXStatisticsListener());
         boolean isSoInitSuccess = WXSoInstallMgrSdk.initSo(V8_SO_NAME, 1, config!=null?config.getUtAdapter():null);
         if (!isSoInitSuccess) {
           return;
@@ -341,7 +254,8 @@
           new WXSlider.Creator()
         ),
         true,
-        WXBasicComponentType.SLIDER
+        WXBasicComponentType.SLIDER,
+        WXBasicComponentType.CYCLE_SLIDER
       );
       registerComponent(
         new SimpleComponentHolder(
@@ -351,8 +265,9 @@
         true,
         WXBasicComponentType.SLIDER_NEIGHBOR
       );
-      registerComponent(SimpleListComponent.class,false,"simplelist");
-      registerComponent(WXListComponent.class, false,WXBasicComponentType.LIST,WXBasicComponentType.VLIST);
+      String simpleList = "simplelist";
+      registerComponent(SimpleListComponent.class,false,simpleList);
+      registerComponent(WXListComponent.class, false,WXBasicComponentType.LIST,WXBasicComponentType.VLIST,WXBasicComponentType.RECYCLER,WXBasicComponentType.WATERFALL);
       registerComponent(HorizontalListComponent.class,false,WXBasicComponentType.HLIST);
       registerComponent(WXBasicComponentType.CELL, WXCell.class, true);
       registerComponent(WXBasicComponentType.INDICATOR, WXIndicator.class, true);
@@ -383,8 +298,11 @@
       registerModule("webSocket", WebSocketModule.class);
 
 
+      registerDomObject(simpleList, WXListDomObject.class);
       registerDomObject(WXBasicComponentType.INDICATOR, WXIndicator.IndicatorDomNode.class);
       registerDomObject(WXBasicComponentType.TEXT, WXTextDomObject.class);
+      registerDomObject(WXBasicComponentType.HEADER, WXCellDomObject.class);
+      registerDomObject(WXBasicComponentType.CELL, WXCellDomObject.class);
       registerDomObject(WXBasicComponentType.INPUT, BasicEditTextDomObject.class);
       registerDomObject(WXBasicComponentType.TEXTAREA, TextAreaEditTextDomObject.class);
       registerDomObject(WXBasicComponentType.SWITCH, WXSwitchDomObject.class);
@@ -392,6 +310,8 @@
       registerDomObject(WXBasicComponentType.VLIST, WXListDomObject.class);
       registerDomObject(WXBasicComponentType.HLIST, WXListDomObject.class);
       registerDomObject(WXBasicComponentType.SCROLLER, WXScrollerDomObject.class);
+      registerDomObject(WXBasicComponentType.RECYCLER, WXRecyclerDomObject.class);
+      registerDomObject(WXBasicComponentType.WATERFALL, WXRecyclerDomObject.class);
     } catch (WXException e) {
       WXLogUtils.e("[WXSDKEngine] register:", e);
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
old mode 100755
new mode 100644
index 70c6802..a056d2b
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -1,213 +1,28 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
 import android.content.Context;
 import android.content.Intent;
-import android.graphics.Color;
 import android.content.IntentFilter;
+import android.graphics.Color;
+import android.graphics.Paint;
 import android.net.Uri;
 import android.os.Message;
 import android.support.annotation.Nullable;
@@ -249,9 +64,9 @@
 import com.taobao.weex.ui.component.WXBasicComponentType;
 import com.taobao.weex.ui.component.WXComponent;
 import com.taobao.weex.ui.component.WXComponentFactory;
-import com.taobao.weex.ui.component.WXVContainer;
 import com.taobao.weex.ui.view.WXScrollView;
 import com.taobao.weex.ui.view.WXScrollView.WXScrollViewListener;
+import com.taobao.weex.utils.Trace;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXJsonUtils;
 import com.taobao.weex.utils.WXLogUtils;
@@ -280,6 +95,7 @@
   public static final String BUNDLE_URL = "bundleUrl";
   private IWXUserTrackAdapter mUserTrackAdapter;
   private IWXRenderListener mRenderListener;
+  private IWXStatisticsListener mStatisticsListener;
   /** package **/ Context mContext;
   private final String mInstanceId;
   private RenderContainer mRenderContainer;
@@ -294,18 +110,10 @@
   private boolean isCommit=false;
   private WXGlobalEventReceiver mGlobalEventReceiver=null;
   private boolean trackComponent;
-  /*
-   *  store custom ViewPort Width
-   */
-  public void setViewPortWidth(int mViewPortWidth) {
-    this.mViewPortWidth = mViewPortWidth;
-  }
-
-  public static int getViewPortWidth() {
-    return mViewPortWidth;
-  }
-
+  private boolean enableLayerType = true;
+  private boolean mNeedValidate = false;
   private static volatile int mViewPortWidth = 750;
+  private int mInstanceViewPortWidth = 750;
 
   /**
    * Render strategy.
@@ -350,6 +158,59 @@
     this.trackComponent = trackComponent;
   }
 
+  /**
+   * Tell whether it is enabled to change the layerType
+   * {@link android.view.View#setLayerType(int, Paint)}
+   * @return True for enable to change the layerType of component, false otherwise. The default
+   * is True
+   */
+  public boolean isLayerTypeEnabled() {
+    return enableLayerType;
+  }
+
+  /**
+   * Enable the ability of changing layerType. e.g. {@link android.view.View#setLayerType(int, Paint)}
+   * Disable the ability of changing layerType will have tremendous <strong>performance
+   * punishment</strong>.
+   *
+   * <strong>Do not</strong> set this to false unless you know exactly what you are doing.
+   * @param enable True for enable to change the layerType of component, false otherwise. The default
+   * is True
+   */
+  public void enableLayerType(boolean enable) {
+    enableLayerType = enable;
+  }
+
+  public boolean isNeedValidate() {
+    return mNeedValidate;
+  }
+
+  /*
+  *  Warning: use setInstanceViewPortWidth instead.
+  *  store custom ViewPort Width
+  */
+  @Deprecated
+  public void setViewPortWidth(int viewPortWidth) {
+    mViewPortWidth = viewPortWidth;
+  }
+
+  /**
+   * Warning: use getInstanceViewPortWidth instead.
+   * @return
+   */
+  @Deprecated
+  public static int getViewPortWidth() {
+    return mViewPortWidth;
+  }
+
+  public void setInstanceViewPortWidth(int instanceViewPortWidth) {
+    this.mInstanceViewPortWidth = instanceViewPortWidth;
+  }
+
+  public int getInstanceViewPortWidth(){
+    return mInstanceViewPortWidth;
+  }
+
   public interface OnInstanceVisibleListener{
     void onAppear();
     void onDisappear();
@@ -559,6 +420,9 @@
     ensureRenderArchor();
     pageName = wrapPageName(pageName, url);
     mBundleUrl = url;
+    if(WXSDKManager.getInstance().getValidateProcessor()!=null) {
+      mNeedValidate = WXSDKManager.getInstance().getValidateProcessor().needValidate(mBundleUrl);
+    }
 
     Map<String, Object> renderOptions = options;
     if (renderOptions == null) {
@@ -570,7 +434,7 @@
 
     Uri uri = Uri.parse(url);
     if (uri != null && TextUtils.equals(uri.getScheme(), "file")) {
-      render(pageName, WXFileUtils.loadAsset(assembleFilePath(uri), mContext), renderOptions, jsonInitData, flag);
+      render(pageName, WXFileUtils.loadFileOrAsset(assembleFilePath(uri), mContext), renderOptions, jsonInitData, flag);
       return;
     }
 
@@ -582,7 +446,10 @@
       wxRequest.paramMap = new HashMap<String, String>();
     }
     wxRequest.paramMap.put(KEY_USER_AGENT, WXHttpUtil.assembleUserAgent(mContext,WXEnvironment.getConfig()));
-    adapter.sendRequest(wxRequest, new WXHttpListener(pageName, renderOptions, jsonInitData, flag, System.currentTimeMillis()));
+    WXHttpListener httpListener =
+        new WXHttpListener(pageName, renderOptions, jsonInitData, flag, System.currentTimeMillis());
+    httpListener.setSDKInstance(this);
+    adapter.sendRequest(wxRequest, (IWXHttpAdapter.OnHttpListener) httpListener);
   }
 
   /**
@@ -742,6 +609,10 @@
     return WXSDKManager.getInstance().getIWXHttpAdapter();
   }
 
+  public IWXStatisticsListener getWXStatisticsListener() {
+    return mStatisticsListener;
+  }
+
   public @Nullable
   IWebSocketAdapter getWXWebSocketAdapter() {
     return WXSDKManager.getInstance().getIWXWebSocketAdapter();
@@ -766,6 +637,10 @@
 
   }
 
+  public void registerStatisticsListener(IWXStatisticsListener listener) {
+    mStatisticsListener = listener;
+  }
+
   /********************************
    * end register listener
    ********************************************************/
@@ -862,6 +737,8 @@
     mContext.sendBroadcast(intent);
 
     onViewAppear();
+
+    setViewPortWidth(mInstanceViewPortWidth);
   }
 
   @Override
@@ -923,7 +800,7 @@
     WXModuleManager.onActivityResult(getInstanceId(),requestCode,resultCode,data);
 
     if(mRootComp != null) {
-      mRootComp.onActivityResult(requestCode,requestCode,data);
+      mRootComp.onActivityResult(requestCode,resultCode,data);
     }else{
       WXLogUtils.w("Warning :Component tree has not build completely, onActivityResult can not be call!");
     }
@@ -982,6 +859,9 @@
             if(mRenderListener != null) {
               mRenderListener.onViewCreated(WXSDKInstance.this, wxView);
             }
+            if (mStatisticsListener != null) {
+              mStatisticsListener.onFirstView();
+            }
           }
         }
       });
@@ -1132,6 +1012,20 @@
        return;
 
     mEnd = true;
+
+    if (mStatisticsListener != null && mContext != null) {
+      runOnUiThread(new Runnable() {
+        @Override
+        public void run() {
+          if (mStatisticsListener != null && mContext != null) {
+            Trace.beginSection("onFirstScreen");
+            mStatisticsListener.onFirstScreen();
+            Trace.endSection();
+          }
+        }
+      });
+    }
+
     mWXPerformance.screenRenderTime = System.currentTimeMillis() - mRenderStartTime;
     WXLogUtils.renderPerformanceLog("firstScreenRenderFinished", mWXPerformance.screenRenderTime);
     WXLogUtils.renderPerformanceLog("   firstScreenJSFExecuteTime", mWXPerformance.firstScreenJSFExecuteTime);
@@ -1169,12 +1063,20 @@
    * UserTrack Log
    */
   public void commitUTStab(final String type, final WXErrorCode errorCode) {
-    if (mUserTrackAdapter == null || TextUtils.isEmpty(type) || errorCode==null) {
+    if (TextUtils.isEmpty(type) || errorCode == null) {
       return;
     }
+
     runOnUiThread(new Runnable() {
       @Override
       public void run() {
+        // Record exception if a render error happened.
+        if (mStatisticsListener != null && errorCode != WXErrorCode.WX_SUCCESS) {
+          mStatisticsListener.onException(mInstanceId,
+                                          errorCode.getErrorCode(),
+                                          errorCode.getErrorMsg());
+        }
+
         WXPerformance performance = new WXPerformance();
         performance.errCode = errorCode.getErrorCode();
         performance.args = errorCode.getArgs();
@@ -1237,14 +1139,18 @@
     mScrollView = null;
     mContext = null;
     mRenderListener = null;
-    isDestroy=true;
+    isDestroy = true;
+    mStatisticsListener = null;
   }
 
   public boolean isDestroy(){
     return isDestroy;
   }
 
-  public String getBundleUrl() {
+  /**
+   * @return If you use render () the return value may be empty
+   */
+  public @Nullable String getBundleUrl() {
     return mBundleUrl;
   }
 
@@ -1256,24 +1162,41 @@
     return mRenderContainer;
   }
 
+  @Deprecated
   public void setBundleUrl(String url){
     mBundleUrl = url;
+    if(WXSDKManager.getInstance().getValidateProcessor()!=null) {
+      mNeedValidate = WXSDKManager.getInstance().getValidateProcessor().needValidate(mBundleUrl);
+    }
   }
 
   public void onRootCreated(WXComponent root) {
     this.mRootComp = root;
     mRenderContainer.addView(root.getHostView());
+    setSize(mRenderContainer.getWidth(),mRenderContainer.getHeight());
   }
 
-  public void addFixedView(View fixedChild){
-    if(mRootComp instanceof WXVContainer){
-      ((WXVContainer)mRootComp).getRealView().addView(fixedChild);
+  /**
+   * Move fixed view to container ,except it's already moved.
+   * @param fixedChild
+   */
+  public void moveFixedView(View fixedChild){
+    if(mRenderContainer != null) {
+      ViewGroup parent;
+      if((parent = (ViewGroup) fixedChild.getParent()) != null){
+        if (parent != mRenderContainer) {
+          parent.removeView(fixedChild);
+          mRenderContainer.addView(fixedChild);
+        }
+      }else{
+        mRenderContainer.addView(fixedChild);
+      }
     }
   }
 
   public void removeFixedView(View fixedChild){
-    if(mRootComp instanceof WXVContainer){
-      ((WXVContainer)mRootComp).getRealView().removeView(fixedChild);
+    if(mRenderContainer != null) {
+      mRenderContainer.removeView(fixedChild);
     }
   }
 
@@ -1306,8 +1229,8 @@
     if (width < 0 || height < 0 || isDestroy || !mRendered) {
       return;
     }
-    float realWidth = WXViewUtils.getWebPxByWidth(width,getViewPortWidth());
-    float realHeight = WXViewUtils.getWebPxByWidth(height,getViewPortWidth());
+    float realWidth = WXViewUtils.getWebPxByWidth(width,getInstanceViewPortWidth());
+    float realHeight = WXViewUtils.getWebPxByWidth(height,getInstanceViewPortWidth());
 
     View godView = mRenderContainer;
     if (godView != null) {
@@ -1480,6 +1403,7 @@
     private Map<String, Object> options;
     private String jsonInitData;
     private WXRenderStrategy flag;
+    private WXSDKInstance instance;
     private long startRequestTime;
 
     private WXHttpListener(String pageName, Map<String, Object> options, String jsonInitData, WXRenderStrategy flag, long startRequestTime) {
@@ -1489,16 +1413,25 @@
       this.flag = flag;
       this.startRequestTime = startRequestTime;
     }
-
+    
+    public void setSDKInstance(WXSDKInstance instance) {
+      this.instance = instance;
+    }
 
     @Override
     public void onHttpStart() {
-
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHttpStart();
+      }
     }
 
     @Override
     public void onHeadersReceived(int statusCode,Map<String,List<String>> headers) {
-
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHeadersReceived();
+      }
     }
 
     @Override
@@ -1513,6 +1446,10 @@
 
     @Override
     public void onHttpFinish(WXResponse response) {
+      if (this.instance != null
+          && this.instance.getWXStatisticsListener() != null) {
+        this.instance.getWXStatisticsListener().onHttpFinish();
+      }
 
       mWXPerformance.networkTime = System.currentTimeMillis() - startRequestTime;
       if(response.extendParams!=null){
@@ -1557,7 +1494,9 @@
           }else {
             performance.errCode=WXErrorCode.WX_SUCCESS.getErrorCode();
           }
-          mUserTrackAdapter.commit(getContext(),null,IWXUserTrackAdapter.JS_DOWNLOAD,performance,null);
+          if (mUserTrackAdapter != null) {
+            mUserTrackAdapter.commit(getContext(), null, IWXUserTrackAdapter.JS_DOWNLOAD, performance, null);
+          }
         }
       }
       WXLogUtils.renderPerformanceLog("networkTime", mWXPerformance.networkTime);
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
old mode 100755
new mode 100644
index b5c9c4e..4718758
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -1,129 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
- * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- * 1. Definitions.
- * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined
- * by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License.
- * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are
- * controlled by, or are under common control with that entity. For the purposes of this definition,
- * "control" means (i) the power, direct or indirect, to cause the direction or management of such
- * entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
- * outstanding shares, or (iii) beneficial ownership of such entity.
- * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
- * License.
- * "Source" form shall mean the preferred form for making modifications, including but not limited
- * to software source code, documentation source, and configuration files.
- * "Object" form shall mean any form resulting from mechanical transformation or translation of a
- * Source form, including but not limited to compiled object code, generated documentation, and
- * conversions to other media types.
- * "Work" shall mean the work of authorship, whether in Source or Object form, made available under
- * the License, as indicated by a copyright notice that is included in or attached to the work (an
- * example is provided in the Appendix below).
- * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
- * derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
- * modifications represent, as a whole, an original work of authorship. For the purposes of this
- * License, Derivative Works shall not include works that remain separable from, or merely link (or
- * bind by name) to the interfaces of, the Work and Derivative Works thereof.
- * "Contribution" shall mean any work of authorship, including the original version of the Work and
- * any modifications or additions to that Work or Derivative Works thereof, that is intentionally
- * submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or
- * Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this
- * definition, "submitted" means any form of electronic, verbal, or written communication sent to
- * the Licensor or its representatives, including but not limited to communication on electronic
- * mailing lists, source code control systems, and issue tracking systems that are managed by, or on
- * behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding
- * communication that is conspicuously marked or otherwise designated in writing by the copyright
- * owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work.
- * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each
- * Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- * irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display,
- * publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or
- * Object form.
- * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * (except as stated in this section) patent license to make, have made, use, offer to sell, sell,
- * import, and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed.
- * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works
- * thereof in any medium, with or without modifications, and in Source or Object form, provided that
- * You meet the following conditions:
- * (a) You must give any other recipients of the Work or Derivative Works a copy of this License;
- * and
- * (b) You must cause any modified files to carry prominent notices stating that You changed the
- * files; and
- * (c) You must retain, in the Source form of any Derivative Works that You distribute, all
- * copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding
- * those notices that do not pertain to any part of the Derivative Works; and
- * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative
- * Works that You distribute must include a readable copy of the attribution notices contained
- * within such NOTICE file, excluding those notices that do not pertain to any part of the
- * Derivative Works, in at least one of the following places: within a NOTICE text file distributed
- * as part of the Derivative Works; within the Source form or documentation, if provided along with
- * the Derivative Works; or, within a display generated by the Derivative Works, if and wherever
- * such third-party notices normally appear. The contents of the NOTICE file are for informational
- * purposes only and do not modify the License. You may add Your own attribution notices within
- * Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the
- * Work, provided that such additional attribution notices cannot be construed as modifying the
- * License.
- * You may add Your own copyright statement to Your modifications and may provide additional or
- * different license terms and conditions for use, reproduction, or distribution of Your
- * modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and
- * distribution of the Work otherwise complies with the conditions stated in this License.
- * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
- * intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms
- * and conditions of this License, without any additional terms or conditions. Notwithstanding the
- * above, nothing herein shall supersede or modify the terms of any separate license agreement you
- * may have executed with Licensor regarding such Contributions.
- * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file.
- * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor
- * provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation,
- * any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- * PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or
- * redistributing the Work and assume any risks associated with Your exercise of permissions under
- * this License.
- * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages.
- * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works
- * thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty,
- * indemnity, or other liability obligations and/or rights consistent with this License. However, in
- * accepting such obligations, You may act only on Your own behalf and on Your sole responsibility,
- * not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each
- * Contributor harmless for any liability incurred by, or claims asserted against, such Contributor
- * by reason of your accepting any such warranty or additional liability.
- * END OF TERMS AND CONDITIONS
- * APPENDIX: How to apply the Apache License to your work.
- * To apply the Apache License to your work, attach the following boilerplate notice, with the
- * fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include
- * the brackets!)  The text should be enclosed in the appropriate comment syntax for the file
- * format. We also recommend that a file or class name and description of purpose be included on the
- * same "printed page" as the copyright notice for easier identification within third-party
- * archives.
- * Copyright 2016 Alibaba Group
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -139,6 +30,7 @@
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.IWXJSExceptionAdapter;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.adapter.URIAdapter;
 import com.taobao.weex.appfram.navigator.IActivityNavBarSetter;
@@ -148,6 +40,7 @@
 import com.taobao.weex.appfram.websocket.IWebSocketAdapterFactory;
 import com.taobao.weex.bridge.WXBridgeManager;
 import com.taobao.weex.bridge.WXModuleManager;
+import com.taobao.weex.bridge.WXValidateProcessor;
 import com.taobao.weex.common.WXRefreshData;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.common.WXThread;
@@ -156,6 +49,7 @@
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 
+import java.io.File;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -174,6 +68,7 @@
 
   private IWXUserTrackAdapter mIWXUserTrackAdapter;
   private IWXImgLoaderAdapter mIWXImgLoaderAdapter;
+  private IWXSoLoaderAdapter mIWXSoLoaderAdapter;
   private IDrawableLoader mDrawableLoader;
   private IWXHttpAdapter mIWXHttpAdapter;
   private IWXDebugAdapter mIWXDebugAdapter;
@@ -184,15 +79,74 @@
   private IWXJSExceptionAdapter mIWXJSExceptionAdapter;
 
   private IWXStorageAdapter mIWXStorageAdapter;
+  private IWXStatisticsListener mStatisticsListener;
   private URIAdapter mURIAdapter;
   private IWebSocketAdapterFactory mIWebSocketAdapterFactory;
+  private WXValidateProcessor mWXValidateProcessor;
+  // Tell weexv8 to initialize v8, default is true.
+  private boolean mNeedInitV8 = true;
+
+  private static final int DEFAULT_VIEWPORT_WIDTH = 750;
 
   private WXSDKManager() {
-    mWXRenderManager = new WXRenderManager();
+    this(new WXRenderManager());
+  }
+
+  private WXSDKManager(WXRenderManager renderManager) {
+    mWXRenderManager = renderManager;
     mWXDomManager = new WXDomManager(mWXRenderManager);
     mBridgeManager = WXBridgeManager.getInstance();
   }
 
+  /**
+   * Used in junit test
+   */
+  static void initInstance(WXRenderManager renderManager){
+    sManager = new WXSDKManager(renderManager);
+  }
+
+  public void registerStatisticsListener(IWXStatisticsListener listener) {
+    mStatisticsListener = listener;
+  }
+
+  public IWXStatisticsListener getWXStatisticsListener() {
+    return mStatisticsListener;
+  }
+
+  public void onSDKEngineInitialize() {
+    if (mStatisticsListener != null) {
+      mStatisticsListener.onSDKEngineInitialize();
+    }
+  }
+
+  public void setNeedInitV8(boolean need) {
+    mNeedInitV8 = need;
+  }
+
+  public boolean needInitV8() {
+    return mNeedInitV8;
+  }
+
+  public void takeJSHeapSnapshot(String path) {
+    File file = new File(path);
+    if (!file.exists()) {
+      if (!file.mkdir()) {
+        return;
+      }
+    }
+
+    String name = String.valueOf(sInstanceId.get());
+    String filename = path;
+
+    if (!path.endsWith(File.separator)) {
+      filename += File.separator;
+    }
+    filename += name;
+    filename += ".heapsnapshot";
+
+    mBridgeManager.takeJSHeapSnapshot(filename);
+  }
+
   public static WXSDKManager getInstance() {
     if (sManager == null) {
       synchronized (WXSDKManager.class) {
@@ -205,7 +159,11 @@
   }
 
   public static int getInstanceViewPortWidth(String instanceId){
-    return getInstance().getSDKInstance(instanceId).getViewPortWidth();
+    WXSDKInstance instance = getInstance().getSDKInstance(instanceId);
+    if (instance == null) {
+      return DEFAULT_VIEWPORT_WIDTH;
+    }
+    return instance.getInstanceViewPortWidth();
   }
 
   static void setInstance(WXSDKManager manager){
@@ -236,7 +194,7 @@
     return mWXRenderManager;
   }
 
-  public WXSDKInstance getSDKInstance(String instanceId) {
+  public @Nullable WXSDKInstance getSDKInstance(String instanceId) {
     return instanceId == null? null : mWXRenderManager.getWXSDKInstance(instanceId);
   }
 
@@ -342,7 +300,7 @@
     return mIWXJSExceptionAdapter;
   }
 
-   void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
+  void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
     mIWXJSExceptionAdapter = IWXJSExceptionAdapter;
   }
 
@@ -360,6 +318,10 @@
     return mURIAdapter;
   }
 
+  public IWXSoLoaderAdapter getIWXSoLoaderAdapter() {
+    return mIWXSoLoaderAdapter;
+  }
+
   void setInitConfig(InitConfig config){
     this.mIWXDebugAdapter = config.getDebugAdapter();
     this.mIWXHttpAdapter = config.getHttpAdapter();
@@ -370,6 +332,7 @@
     this.mURIAdapter = config.getURIAdapter();
     this.mIWebSocketAdapterFactory = config.getWebSocketAdapterFactory();
     this.mIWXJSExceptionAdapter = config.getJSExceptionAdapter();
+    this.mIWXSoLoaderAdapter = config.getIWXSoLoaderAdapter();
   }
 
   public IWXDebugAdapter getIWXDebugAdapter() {
@@ -404,6 +367,20 @@
   public void notifyTrimMemory() {
     mBridgeManager.notifyTrimMemory();
   }
+
+  /**
+   * Weex embedders can use <code>notifySerializeCodeCache</code> to
+   * serialize code caches if the jsfm has the alility to compile 'new Function'
+   * against js bundles on the weex native side.
+   *
+   * It's a good time to serialize a code cache after exiting a weex page.
+   * Then, the next time of entering the same weex page, V8 would compile
+   * 'new Function' against the code cache deseriazed from the js bundle.
+   */
+  public void notifySerializeCodeCache() {
+    mBridgeManager.notifySerializeCodeCache();
+  }
+
   public @Nullable
   IWebSocketAdapter getIWXWebSocketAdapter() {
     if (mIWebSocketAdapterFactory != null) {
@@ -412,4 +389,12 @@
     return null;
   }
 
+  public void registerValidateProcessor(WXValidateProcessor processor){
+    this.mWXValidateProcessor = processor;
+  }
+
+  public WXValidateProcessor getValidateProcessor(){
+    return mWXValidateProcessor;
+  }
+
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultUriAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultUriAdapter.java
index 64555a4..03a66f5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultUriAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultUriAdapter.java
@@ -1,214 +1,28 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
 import android.net.Uri;
 import android.support.annotation.NonNull;
+import android.text.TextUtils;
 
 import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.common.Constants;
 
 import java.util.List;
 
@@ -223,6 +37,10 @@
   @NonNull
   @Override
   public Uri rewrite(WXSDKInstance instance, String type, Uri uri) {
+    if (TextUtils.isEmpty(instance.getBundleUrl())) {
+      return uri;
+    }
+
     Uri base = Uri.parse(instance.getBundleUrl());
     Uri.Builder resultBuilder = uri.buildUpon();
 
@@ -231,8 +49,6 @@
       return resultBuilder.build();
     }
     return uri;
-
-
   }
 
   private Uri.Builder buildRelativeURI(Uri.Builder resultBuilder, Uri base, Uri uri) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
old mode 100755
new mode 100644
index 0a20a33..5546a89
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/DefaultWXHttpAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/DrawableStrategy.java b/android/sdk/src/main/java/com/taobao/weex/adapter/DrawableStrategy.java
index 60aee50..c6daa5a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/DrawableStrategy.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/DrawableStrategy.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.adapter;
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IDrawableLoader.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IDrawableLoader.java
index d27dd8c..81c8f1e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IDrawableLoader.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IDrawableLoader.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.adapter;
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXDebugAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXDebugAdapter.java
index 7174f9a..ca0c5e6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXDebugAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXDebugAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXHttpAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXHttpAdapter.java
old mode 100755
new mode 100644
index a659e04..3d6ea1f
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXHttpAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXHttpAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXImgLoaderAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXImgLoaderAdapter.java
old mode 100755
new mode 100644
index 36c5a7e..4b03ba8
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXImgLoaderAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXImgLoaderAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXJSExceptionAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXJSExceptionAdapter.java
index 9ba4288..12ea4d8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXJSExceptionAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXJSExceptionAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java
new file mode 100644
index 0000000..fb9614a
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXSoLoaderAdapter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.adapter;
+
+/**
+ * Interface for loading library.
+ */
+public interface IWXSoLoaderAdapter {
+  /**
+   * A method <code>doLoadLibrary</code> that
+   * helps embedders to load a shared library with a short name.
+   * <p>
+   *
+   * Embedders would have a chance to take charge of library loading,
+   * they could load libraries with different class loaders,
+   * or load libraries from specified library pathes.
+   *
+   * @param shortName the name of the library
+   */
+  void doLoadLibrary(String shortName);
+
+  /**
+   * A method <code>doLoad</code> that
+   * helps embedders to load a shared library.
+   * <p>
+   *
+   * Embedders would have a chance to take charge of library loading,
+   * they could load libraries with different class loaders,
+   * or load libraries from specified library pathes.
+   *
+   * @param name the file to load.
+   */
+  void doLoad(String name);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java
old mode 100755
new mode 100644
index 7327f6b..a5201c2
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/URIAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/URIAdapter.java
index 09acc4c..f2cdbde 100644
--- a/android/sdk/src/main/java/com/taobao/weex/adapter/URIAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/URIAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/annotation/Component.java b/android/sdk/src/main/java/com/taobao/weex/annotation/Component.java
index ad825fc..3f3414c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/annotation/Component.java
+++ b/android/sdk/src/main/java/com/taobao/weex/annotation/Component.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.annotation;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/annotation/JSMethod.java b/android/sdk/src/main/java/com/taobao/weex/annotation/JSMethod.java
index 487bf58..443dc37 100644
--- a/android/sdk/src/main/java/com/taobao/weex/annotation/JSMethod.java
+++ b/android/sdk/src/main/java/com/taobao/weex/annotation/JSMethod.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.annotation;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/IWXClipboard.java b/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/IWXClipboard.java
index 738d215..ccccd31 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/IWXClipboard.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/IWXClipboard.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.clipboard;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/WXClipboardModule.java b/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/WXClipboardModule.java
index c605c12..7ded68a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/WXClipboardModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/clipboard/WXClipboardModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.clipboard;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/IActivityNavBarSetter.java b/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/IActivityNavBarSetter.java
index 7130597..321991d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/IActivityNavBarSetter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/IActivityNavBarSetter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.navigator;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/WXNavigatorModule.java b/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/WXNavigatorModule.java
old mode 100755
new mode 100644
index 65ad86f..acd3333
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/WXNavigatorModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/navigator/WXNavigatorModule.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.navigator;
 
@@ -232,9 +140,7 @@
                     callback.invoke(MSG_FAILED);
                 }
             }
-        }
-
-        if (callback != null) {
+        } else if (callback != null) {
             callback.invoke(MSG_FAILED);
         }
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/DatePickerImpl.java b/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/DatePickerImpl.java
index ef25700..c6ccac3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/DatePickerImpl.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/DatePickerImpl.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.pickers;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/WXPickersModule.java b/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/WXPickersModule.java
index 8d92ca1..9209a4f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/WXPickersModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/pickers/WXPickersModule.java
@@ -1,216 +1,45 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.pickers;
 
+import android.content.Context;
 import android.content.DialogInterface;
+import android.graphics.Color;
+import android.os.Build;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v7.app.AlertDialog;
+import android.util.TypedValue;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.Checkable;
+import android.widget.ListView;
+import android.widget.TextView;
 
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.bridge.JSCallback;
 import com.taobao.weex.common.WXModule;
+import com.taobao.weex.utils.WXResourceUtils;
+import com.taobao.weex.utils.WXViewUtils;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -237,14 +66,26 @@
     private static final String KEY_MIN = "min";
     private static final String KEY_ITEMS = "items";
 
+    private static final String KEY_TITLE_COLOR = "titleColor";
+    private static final String KEY_CANCEL_TITLE_COLOR = "cancelTitleColor";
+    private static final String KEY_CONFIRM_TITLE = "confirmTitle";
+    private static final String KEY_CANCEL_TITLE = "cancelTitle";
+    private static final String KEY_CONFIRM_TITLE_COLOR = "confirmTitleColor";
+    private static final String KEY_TITLE_BACKGROUND_COLOR = "titleBackgroundColor";
+    private static final String KEY_TEXT_COLOR = "textColor";
+    private static final String KEY_SELECTION_COLOR = "selectionColor";
+
     private int selected;
+    private View selectedView;
 
     @JSMethod
     public void pick(Map<String, Object> options, JSCallback callback) {
         List<String> items = safeConvert(getOption(options, KEY_ITEMS, new ArrayList<String>()));
-        int index = getOption(options, KEY_INDEX, 0);
-        String title = getOption(options, KEY_TITLE, null);
-        performSinglePick(items, index, title, callback);
+        try {
+            performSinglePick(items, options, callback);
+        } catch (Throwable throwable) {
+            throwable.printStackTrace();
+        }
     }
 
     @JSMethod
@@ -279,6 +120,14 @@
         }
     }
 
+    private int getColor(Map<String, Object> options, String key, int defValue) {
+        Object value = getOption(options, key, null);
+        if (value == null) {
+            return defValue;
+        }
+        return WXResourceUtils.getColor(value.toString(), defValue);
+    }
+
     private void performPickTime(Map<String, Object> options, final JSCallback callback) {
         String value = getOption(options, KEY_VALUE, "");
         DatePickerImpl.pickTime(
@@ -331,16 +180,31 @@
 
     }
 
-    private void performSinglePick(List<String> items, int checked, String title, final JSCallback callback) {
-        selected = checked;
-        new AlertDialog.Builder(mWXSDKInstance.getContext())
-                .setTitle(title)
-                .setSingleChoiceItems(items.toArray(new String[items.size()]), checked, new DialogInterface.OnClickListener() {
-                    @Override
-                    public void onClick(DialogInterface dialog, int which) {
-                        selected = which;
-                    }
-                })
+    private void performSinglePick(List<String> items, final Map<String, Object> options, final JSCallback callback) {
+        selected = getOption(options, KEY_INDEX, 0);
+        final int textColor = getColor(options, KEY_TEXT_COLOR, Color.TRANSPARENT);
+
+        final AlertDialog dialog =  new AlertDialog.Builder(mWXSDKInstance.getContext())
+                .setAdapter(
+                        new ArrayAdapter<String>(
+                                mWXSDKInstance.getContext(),
+                                android.R.layout.simple_list_item_single_choice,
+                                items) {
+                            @NonNull
+                            @Override
+                            public View getView(int position, View convertView, @Nullable ViewGroup parent) {
+                                View itemView =  super.getView(position, convertView, parent);
+                                if (position == selected) {
+                                    selectedView = itemView;
+                                }
+
+                                if (itemView instanceof TextView && textColor != Color.TRANSPARENT) {
+                                    ((TextView) itemView).setTextColor(textColor);
+                                }
+
+                                return itemView;
+                            }
+                        } , null)
                 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int which) {
@@ -361,6 +225,102 @@
                         callback.invoke(ret);
                     }
                 })
-                .show();
+                .setCustomTitle(makeTitleView(mWXSDKInstance.getContext(), options))
+                .create();
+
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
+            //pre create the content view on dialog.
+            //if not , the content view will not be created until dialog.show() called
+            dialog.create();
+        }
+
+        final ListView listView = dialog.getListView();
+        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            private View previousView;
+            private int selectionColor = getColor(options, KEY_SELECTION_COLOR, Color.TRANSPARENT);
+
+            @Override
+            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+                selected = position;
+                if (previousView == view) {
+                    return;
+                }
+                if (previousView != null) {
+                    previousView.setBackgroundColor(Color.TRANSPARENT);
+                    if (previousView instanceof Checkable) {
+                        ((Checkable) previousView).toggle();
+                    }
+                }
+                if (view instanceof Checkable) {
+                    ((Checkable) view).toggle();
+                }
+                view.setBackgroundColor(selectionColor);
+                previousView = view;
+            }
+        });
+
+        listView.post(new Runnable() {
+            @Override
+            public void run() {
+                if (selectedView != null) {
+                    listView.performItemClick(selectedView, selected, selectedView.getId());
+                }
+            }
+        });
+
+        dialog.getWindow().getDecorView().post(new Runnable() {
+            @Override
+            public void run() {
+                Button confirm = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
+                Button cancel = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
+
+                if (confirm != null) {
+                    String confirmTitle = getOption(options, KEY_CONFIRM_TITLE, null);
+                    int confirmColor = getColor(options, KEY_CONFIRM_TITLE_COLOR, Color.TRANSPARENT);
+
+                    if (confirmTitle != null) {
+                        confirm.setText(confirmTitle);
+                        confirm.setAllCaps(false);
+                    }
+
+                    if (confirmColor != Color.TRANSPARENT) {
+                        confirm.setTextColor(confirmColor);
+                        confirm.setAllCaps(false);
+                    }
+                }
+
+                if (cancel != null) {
+                    String cancelTitle = getOption(options, KEY_CANCEL_TITLE, null);
+                    int cancelColor = getColor(options, KEY_CANCEL_TITLE_COLOR, Color.TRANSPARENT);
+
+                    if (cancelTitle != null) {
+                        cancel.setText(cancelTitle);
+                    }
+
+                    if (cancelColor != Color.TRANSPARENT) {
+                        cancel.setTextColor(cancelColor);
+                    }
+                }
+            }
+        });
+
+        dialog.show();
+    }
+
+    private TextView makeTitleView(Context context, Map<String, Object> options) {
+        String text = getOption(options, KEY_TITLE, null);
+        if (text == null) {
+            return null;
+        }
+        TextView textView = new TextView(context);
+        textView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
+        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 20);
+        int padding = WXViewUtils.dip2px(12);
+        textView.setPadding(padding, padding, padding, padding);
+        textView.getPaint().setFakeBoldText(true);
+        textView.setBackgroundColor(getColor(options, KEY_TITLE_BACKGROUND_COLOR, Color.TRANSPARENT));
+        textView.setTextColor(getColor(options, KEY_TITLE_COLOR, Color.BLACK));
+        textView.setText(text);
+        return textView;
     }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
index ec371d4..2898848 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/DefaultWXStorage.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorage.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorage.java
index c2ca419..c869d53 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorage.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorageAdapter.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorageAdapter.java
index be9eb52..c04512c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorageAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/IWXStorageAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/StorageResultHandler.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/StorageResultHandler.java
index 660e73e..f8be207 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/StorageResultHandler.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/StorageResultHandler.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
index 0b201f5..1429ddf 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXSQLiteOpenHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXStorageModule.java b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXStorageModule.java
index d1d6457..b6d9534 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXStorageModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/storage/WXStorageModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapter.java b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapter.java
index 03a7782..aebd1b8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.websocket;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapterFactory.java b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapterFactory.java
index dd0f139..e2e21dd 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapterFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/IWebSocketAdapterFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.websocket;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketCloseCodes.java b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketCloseCodes.java
index 97a9832..6251399 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketCloseCodes.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketCloseCodes.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.websocket;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
index 5617cc3..e2da43b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/appfram/websocket/WebSocketModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.websocket;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/Invoker.java b/android/sdk/src/main/java/com/taobao/weex/bridge/Invoker.java
index 374c410..43eab76 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/Invoker.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/Invoker.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/JSCallback.java b/android/sdk/src/main/java/com/taobao/weex/bridge/JSCallback.java
index 6ed103e..4bf8412 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/JSCallback.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/JSCallback.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/JavascriptInvokable.java b/android/sdk/src/main/java/com/taobao/weex/bridge/JavascriptInvokable.java
index 070b4ed..32afe62 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/JavascriptInvokable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/JavascriptInvokable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/MethodInvoker.java b/android/sdk/src/main/java/com/taobao/weex/bridge/MethodInvoker.java
index 2bdf81a..740e081 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/MethodInvoker.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/MethodInvoker.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/ModuleFactory.java b/android/sdk/src/main/java/com/taobao/weex/bridge/ModuleFactory.java
index f64714f..a5b41db 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/ModuleFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/ModuleFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java b/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
index 0f7ff48..98381b5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/NativeInvokeHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/SimpleJSCallback.java b/android/sdk/src/main/java/com/taobao/weex/bridge/SimpleJSCallback.java
index 4c97fbd..c4cf051 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/SimpleJSCallback.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/SimpleJSCallback.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
old mode 100755
new mode 100644
index d0ce195..d42839e
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -249,6 +63,12 @@
   public native int execJSService(String javascript);
 
   /**
+   * Take v8's heap snapshot
+   * @param filename the name of the file to be written.
+   */
+  public native void takeHeapSnapshot(String filename);
+
+  /**
    * JavaScript uses this methods to call Android code
    *
    * @param instanceId
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
old mode 100755
new mode 100644
index 0d8d223..e056663
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -234,6 +48,7 @@
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.common.WXThread;
 import com.taobao.weex.dom.WXDomModule;
+import com.taobao.weex.dom.action.Actions;
 import com.taobao.weex.utils.WXFileUtils;
 import com.taobao.weex.utils.WXJsonUtils;
 import com.taobao.weex.utils.WXLogUtils;
@@ -286,6 +101,8 @@
   public static final String METHOD_CALLBACK = "callback";
   public static final String METHOD_REFRESH_INSTANCE = "refreshInstance";
   public static final String METHOD_NOTIFY_TRIM_MEMORY = "notifyTrimMemory";
+  public static final String METHOD_NOTIFY_SERIALIZE_CODE_CACHE =
+      "notifySerializeCodeCache";
 
   public static final String KEY_METHOD = "method";
   public static final String KEY_ARGS = "args";
@@ -388,6 +205,8 @@
       } catch (InvocationTargetException e) {
         // ignore
       }
+
+      WXServiceManager.execAllCacheJsService();
     }
     if (remoteDebug && mWxDebugProxy != null) {
       mWXBridge = mWxDebugProxy.getWXBridge();
@@ -403,7 +222,29 @@
   }
 
     public Object callModuleMethod(String instanceId, String moduleStr, String methodStr, JSONArray args) {
-    return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
+      WXSDKInstance wxsdkInstance = WXSDKManager.getInstance()
+              .getSDKInstance(instanceId);
+      if (wxsdkInstance == null) {
+        return null;
+      }
+      if (wxsdkInstance.isNeedValidate()
+              && WXSDKManager.getInstance().getValidateProcessor() != null) {
+          WXValidateProcessor.WXModuleValidateResult validateResult = WXSDKManager
+                  .getInstance().getValidateProcessor()
+                  .onModuleValidate(wxsdkInstance, moduleStr, methodStr, args);
+          if (validateResult == null) {
+              return null;
+          }
+          if (validateResult.isSuccess) {
+              return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr,
+                      args);
+          } else {
+              JSONObject validateInfo = validateResult.validateInfo;
+              WXLogUtils.e("[WXBridgeManager] module validate fail. >>> " + validateInfo.toJSONString());
+              return validateInfo;
+          }
+      }
+      return WXModuleManager.callModuleMethod(instanceId, moduleStr, methodStr, args);
   }
 
   /**
@@ -497,7 +338,7 @@
               WXDomModule dom = getDomModule(instanceId);
               return dom.callDomMethod(method,arguments);
             }else {
-              return WXModuleManager.callModuleMethod(instanceId, module,
+              return callModuleMethod(instanceId, module,
                       method, arguments);
             }
         } catch (Exception e) {
@@ -575,7 +416,7 @@
                 WXDomModule dom = getDomModule(instanceId);
                 dom.callDomMethod(task);
               }else {
-                WXModuleManager.callModuleMethod(instanceId, (String) target,
+                callModuleMethod(instanceId, (String) target,
                     (String) task.get(METHOD), (JSONArray) task.get(ARGS));
               }
             }else if(task.get(COMPONENT) != null){
@@ -623,7 +464,7 @@
         WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
       }
       WXDomModule domModule = getDomModule(instanceId);
-      domModule.addElement(ref, domObject, Integer.parseInt(index));
+      domModule.postAction(Actions.getAddElement(domObject, ref,Integer.parseInt(index)),false);
     }
 
     if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -832,8 +673,16 @@
 
   public void commitJSBridgeAlarmMonitor(String instanceId, WXErrorCode errCode, String errMsg) {
     WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+    if (instance == null || errCode == null) {
+      return;
+    }
+    // TODO: We should move WXPerformance and IWXUserTrackAdapter
+    // into a adapter level.
+    // comment out the line below to prevent commiting twice.
+    //instance.commitUTStab(WXConst.JS_BRIDGE, errCode, errMsg);
+
     IWXUserTrackAdapter adapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-    if (instance == null || adapter == null || errCode == null) {
+    if (adapter == null) {
       return;
     }
     WXPerformance performance = new WXPerformance();
@@ -847,8 +696,17 @@
   }
 
   public void commitJSFrameworkAlarmMonitor(final String type, final WXErrorCode errorCode, String errMsg) {
+    if (TextUtils.isEmpty(type) || errorCode == null) {
+      return;
+    }
+    if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+      WXSDKManager.getInstance().getWXStatisticsListener().onException("0",
+          errorCode.getErrorCode(),
+          TextUtils.isEmpty(errMsg) ? errorCode.getErrorMsg() : errMsg);
+    }
+
     final IWXUserTrackAdapter userTrackAdapter = WXSDKManager.getInstance().getIWXUserTrackAdapter();
-    if (userTrackAdapter == null || TextUtils.isEmpty(type) || errorCode == null) {
+    if (userTrackAdapter == null) {
       return;
     }
     WXPerformance performance = new WXPerformance();
@@ -1005,6 +863,12 @@
         WXJSObject[] args = {obj};
         invokeExecJS("", null, METHOD_SET_TIMEOUT, args);
         break;
+      case WXJSBridgeMsgType.TAKE_HEAP_SNAPSHOT:
+        if (msg.obj != null) {
+          String filename = (String) msg.obj;
+          mWXBridge.takeHeapSnapshot(filename);
+        }
+        break;
       default:
         break;
     }
@@ -1053,6 +917,10 @@
         return;
       }
       try {
+        if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+          WXSDKManager.getInstance().getWXStatisticsListener().onJsFrameworkStart();
+        }
+
         long start = System.currentTimeMillis();
         if(mWXBridge.initFramework(framework, assembleDefaultOptions())==INIT_FRAMEWORK_OK){
           WXEnvironment.sJSLibInitTime = System.currentTimeMillis() - start;
@@ -1060,6 +928,11 @@
           WXEnvironment.sSDKInitTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart;
           WXLogUtils.renderPerformanceLog("SDKInitTime", WXEnvironment.sSDKInitTime);
           mInit = true;
+
+          if (WXSDKManager.getInstance().getWXStatisticsListener() != null) {
+            WXSDKManager.getInstance().getWXStatisticsListener().onJsFrameworkReady();
+          }
+
           execRegisterFailTask();
           WXEnvironment.JsFrameworkInit = true;
           registerDomModule();
@@ -1137,22 +1010,40 @@
     wxParams.setDeviceWidth(TextUtils.isEmpty(config.get("deviceWidth")) ? String.valueOf(WXViewUtils.getScreenWidth(WXEnvironment.sApplication)) : config.get("deviceWidth"));
     wxParams.setDeviceHeight(TextUtils.isEmpty(config.get("deviceHeight")) ? String.valueOf(WXViewUtils.getScreenHeight(WXEnvironment.sApplication)) : config.get("deviceHeight"));
     wxParams.setOptions(WXEnvironment.getCustomOptions());
+    wxParams.setNeedInitV8(WXSDKManager.getInstance().needInitV8());
     return wxParams;
   }
 
   private void execRegisterFailTask() {
-    int moduleCount = mRegisterModuleFailList.size();
-    if (moduleCount > 0) {
-      for (int i = 0; i < moduleCount; ++i) {
-        invokeRegisterModules(mRegisterModuleFailList.get(i));
+
+    if (mRegisterModuleFailList.size() > 0) {
+      List<Map<String, Object>> moduleReceiver = new ArrayList<>();
+      for (int i = 0, moduleCount = mRegisterModuleFailList.size(); i < moduleCount; ++i) {
+        invokeRegisterModules(mRegisterModuleFailList.get(i), moduleReceiver);
+      }
+      mRegisterComponentFailList.clear();
+      if (moduleReceiver.size() > 0) {
+        mRegisterComponentFailList.addAll(moduleReceiver);
       }
     }
+
     if (mRegisterComponentFailList.size() > 0) {
-      invokeRegisterComponents(mRegisterComponentFailList);
+      List<Map<String, Object>> receiver = new ArrayList<>();
+      invokeRegisterComponents(mRegisterComponentFailList, receiver);
+      mRegisterComponentFailList.clear();
+      if (receiver.size() > 0) {
+        mRegisterComponentFailList.addAll(receiver);
+      }
     }
+
     if (mRegisterServiceFailList.size() > 0) {
+      List<String> receiver = new ArrayList<>();
       for (String service : mRegisterServiceFailList) {
-        invokeExecJSService(service);
+        invokeExecJSService(service, receiver);
+      }
+      mRegisterServiceFailList.clear();
+      if (receiver.size() > 0) {
+        mRegisterServiceFailList.addAll(receiver);
       }
     }
   }
@@ -1166,13 +1057,13 @@
   public void registerModules(final Map<String, Object> modules) {
     if (modules != null && modules.size() != 0) {
       if(isJSThread()){
-        invokeRegisterModules(modules);
+        invokeRegisterModules(modules, mRegisterModuleFailList);
       }
       else{
         post(new Runnable() {
           @Override
           public void run() {
-            invokeRegisterModules(modules);
+            invokeRegisterModules(modules, mRegisterComponentFailList);
           }
         }, null);
       }
@@ -1190,7 +1081,7 @@
     post(new Runnable() {
       @Override
       public void run() {
-        invokeRegisterComponents(components);
+        invokeRegisterComponents(components, mRegisterComponentFailList);
       }
     }, null);
   }
@@ -1199,16 +1090,16 @@
     post(new Runnable() {
       @Override
       public void run() {
-        invokeExecJSService(service);
+        invokeExecJSService(service, mRegisterServiceFailList);
       }
     });
   }
 
-  private void invokeExecJSService(String service) {
+  private void invokeExecJSService(String service, List<String> receiver) {
     try {
       if (!isJSFrameworkInit()) {
         WXLogUtils.e("[WXBridgeManager] invoke execJSService: framework.js uninitialized.");
-        mRegisterServiceFailList.add(service);
+        receiver.add(service);
         return;
       }
       mWXBridge.execJSService(service);
@@ -1222,12 +1113,12 @@
     return mJSThread != null && mJSThread.getId() == Thread.currentThread().getId();
   }
 
-  private void invokeRegisterModules(Map<String, Object> modules) {
+  private void invokeRegisterModules(Map<String, Object> modules, List<Map<String, Object>> failReceiver) {
     if (modules == null || !isJSFrameworkInit()) {
       if (!isJSFrameworkInit()) {
         WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized.");
       }
-      mRegisterModuleFailList.add(modules);
+      failReceiver.add(modules);
       return;
     }
 
@@ -1241,11 +1132,15 @@
     }
   }
 
-  private void invokeRegisterComponents(List<Map<String, Object>> components) {
+  private void invokeRegisterComponents(List<Map<String, Object>> components, List<Map<String, Object>> failReceiver) {
+    if(components == failReceiver){
+      throw new RuntimeException("Fail receiver should not use source.");
+    }
     if (!isJSFrameworkInit()) {
       WXLogUtils.e("[WXBridgeManager] invokeCallJSBatch: framework.js uninitialized.");
+
       for (Map<String,Object> comp:components){
-        mRegisterComponentFailList.add(comp);
+        failReceiver.add(comp);
       }
       return;
     }
@@ -1316,16 +1211,10 @@
     registerModules(domMap);
   }
 
+  //This method is deprecated because of performance issue.
+  @Deprecated
   public void notifyTrimMemory() {
-    post(new Runnable() {
-      @Override
-      public void run() {
-        if (!isJSFrameworkInit())
-          return;
 
-        invokeExecJS("", null, METHOD_NOTIFY_TRIM_MEMORY, new WXJSObject[0]);
-      }
-    });
   }
 
   public
@@ -1338,4 +1227,24 @@
     return ret;
   }
 
+  public void notifySerializeCodeCache() {
+    post(new Runnable() {
+      @Override
+      public void run() {
+        if (!isJSFrameworkInit())
+          return;
+        
+        invokeExecJS("", null, METHOD_NOTIFY_SERIALIZE_CODE_CACHE, new WXJSObject[0]);
+      }
+    });
+  }
+
+  public void takeJSHeapSnapshot(String filename) {
+    Message msg = mJSHandler.obtainMessage();
+    msg.obj = filename;
+    msg.what = WXJSBridgeMsgType.TAKE_HEAP_SNAPSHOT;
+    msg.setTarget(mJSHandler);
+    msg.sendToTarget();
+  }
+
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXHashMap.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXHashMap.java
old mode 100755
new mode 100644
index b4758b3..1296af0
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXHashMap.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXHashMap.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
old mode 100755
new mode 100644
index c565e34..4c92a70
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXJSObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
old mode 100755
new mode 100644
index 5daaa85..5e90eca
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
old mode 100755
new mode 100644
index 3c8de9a..f3de40e
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java
@@ -1,129 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
- * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- * 1. Definitions.
- * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined
- * by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License.
- * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are
- * controlled by, or are under common control with that entity. For the purposes of this definition,
- * "control" means (i) the power, direct or indirect, to cause the direction or management of such
- * entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
- * outstanding shares, or (iii) beneficial ownership of such entity.
- * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
- * License.
- * "Source" form shall mean the preferred form for making modifications, including but not limited
- * to software source code, documentation source, and configuration files.
- * "Object" form shall mean any form resulting from mechanical transformation or translation of a
- * Source form, including but not limited to compiled object code, generated documentation, and
- * conversions to other media types.
- * "Work" shall mean the work of authorship, whether in Source or Object form, made available under
- * the License, as indicated by a copyright notice that is included in or attached to the work (an
- * example is provided in the Appendix below).
- * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
- * derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
- * modifications represent, as a whole, an original work of authorship. For the purposes of this
- * License, Derivative Works shall not include works that remain separable from, or merely link (or
- * bind by name) to the interfaces of, the Work and Derivative Works thereof.
- * "Contribution" shall mean any work of authorship, including the original version of the Work and
- * any modifications or additions to that Work or Derivative Works thereof, that is intentionally
- * submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or
- * Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this
- * definition, "submitted" means any form of electronic, verbal, or written communication sent to
- * the Licensor or its representatives, including but not limited to communication on electronic
- * mailing lists, source code control systems, and issue tracking systems that are managed by, or on
- * behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding
- * communication that is conspicuously marked or otherwise designated in writing by the copyright
- * owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work.
- * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each
- * Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- * irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display,
- * publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or
- * Object form.
- * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * (except as stated in this section) patent license to make, have made, use, offer to sell, sell,
- * import, and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed.
- * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works
- * thereof in any medium, with or without modifications, and in Source or Object form, provided that
- * You meet the following conditions:
- * (a) You must give any other recipients of the Work or Derivative Works a copy of this License;
- * and
- * (b) You must cause any modified files to carry prominent notices stating that You changed the
- * files; and
- * (c) You must retain, in the Source form of any Derivative Works that You distribute, all
- * copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding
- * those notices that do not pertain to any part of the Derivative Works; and
- * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative
- * Works that You distribute must include a readable copy of the attribution notices contained
- * within such NOTICE file, excluding those notices that do not pertain to any part of the
- * Derivative Works, in at least one of the following places: within a NOTICE text file distributed
- * as part of the Derivative Works; within the Source form or documentation, if provided along with
- * the Derivative Works; or, within a display generated by the Derivative Works, if and wherever
- * such third-party notices normally appear. The contents of the NOTICE file are for informational
- * purposes only and do not modify the License. You may add Your own attribution notices within
- * Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the
- * Work, provided that such additional attribution notices cannot be construed as modifying the
- * License.
- * You may add Your own copyright statement to Your modifications and may provide additional or
- * different license terms and conditions for use, reproduction, or distribution of Your
- * modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and
- * distribution of the Work otherwise complies with the conditions stated in this License.
- * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
- * intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms
- * and conditions of this License, without any additional terms or conditions. Notwithstanding the
- * above, nothing herein shall supersede or modify the terms of any separate license agreement you
- * may have executed with Licensor regarding such Contributions.
- * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file.
- * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor
- * provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation,
- * any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- * PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or
- * redistributing the Work and assume any risks associated with Your exercise of permissions under
- * this License.
- * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages.
- * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works
- * thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty,
- * indemnity, or other liability obligations and/or rights consistent with this License. However, in
- * accepting such obligations, You may act only on Your own behalf and on Your sole responsibility,
- * not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each
- * Contributor harmless for any liability incurred by, or claims asserted against, such Contributor
- * by reason of your accepting any such warranty or additional liability.
- * END OF TERMS AND CONDITIONS
- * APPENDIX: How to apply the Apache License to your work.
- * To apply the Apache License to your work, attach the following boilerplate notice, with the
- * fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include
- * the brackets!)  The text should be enclosed in the appropriate comment syntax for the file
- * format. We also recommend that a file or class name and description of purpose be included on the
- * same "printed page" as the copyright notice for easier identification within third-party
- * archives.
- * Copyright 2016 Alibaba Group
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -141,6 +32,7 @@
   private String deviceHeight;
   private String shouldInfoCollect;
   private String logLevel;
+  private String needInitV8;
 
   private Map<String, String> options;
 
@@ -232,10 +124,28 @@
   }
 
   public String getLogLevel() {
+    if(logLevel == null){
+      return "";
+    }
     return logLevel;
   }
 
   public void setLogLevel(String logLevel) {
     this.logLevel = logLevel;
   }
+
+  public String getNeedInitV8() {
+    if(needInitV8 ==null){
+      return "";
+    }
+    return this.needInitV8;
+  }
+
+  public void setNeedInitV8(boolean need) {
+    if (need) {
+      this.needInitV8 = "1";
+    } else {
+      this.needInitV8 = "0";
+    }
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXServiceManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXServiceManager.java
index 559f8e5..7f51fd1 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXServiceManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXServiceManager.java
@@ -1,225 +1,57 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
+import android.support.annotation.NonNull;
 import android.text.TextUtils;
 
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.common.WXJSService;
+
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 public class WXServiceManager {
 
+    private static Map<String, WXJSService> sInstanceJSServiceMap = new HashMap<>();
+
     public static boolean registerService(String name, String serviceScript, Map<String, String> options) {
         if (TextUtils.isEmpty(name) || TextUtils.isEmpty(serviceScript)) return false;
 
         String param1 = "register: global.registerService, unregister: global.unregisterService";
         String param2 = "serviceName: \"" + name + "\"";
         for (String key: options.keySet()) {
+            // TODO - why always string?
             String value = options.get(key);
             param2 += ", " + key + ": \"" + value + "\"";
         }
-        String serviceJs = String.format("(function(service, options){ %s })({ %s }, { %s })", serviceScript, param1, param2);
+        String serviceJs = String.format(";(function(service, options){ ;%s; })({ %s }, { %s });", serviceScript, param1, param2);
+
+        if(WXEnvironment.isApkDebugable()) {
+            WXJSService service = new WXJSService();
+            service.setName(name);
+            service.setScript(serviceScript);
+            service.setOptions(options);
+            sInstanceJSServiceMap.put(name, service);
+        }
 
         WXBridgeManager.getInstance().execJSService(serviceJs);
         return true;
@@ -228,9 +60,20 @@
     public static boolean unRegisterService(String name) {
         if (TextUtils.isEmpty(name)) return false;
 
+        if(WXEnvironment.isApkDebugable()) {
+            sInstanceJSServiceMap.remove(name);
+        }
+
         String js = String.format("global.unregisterService( \"%s\" );", name);
         WXBridgeManager.getInstance().execJSService(js);
         return true;
     }
 
+
+    public static void execAllCacheJsService() {
+        for (String serviceName: sInstanceJSServiceMap.keySet()) {
+            WXJSService service = sInstanceJSServiceMap.get(serviceName);
+            registerService(service.getName(), service.getScript(), service.getOptions());
+        }
+    }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXTask.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXTask.java
old mode 100755
new mode 100644
index 03760c8..c236ba6
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXTask.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXValidateProcessor.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXValidateProcessor.java
new file mode 100644
index 0000000..9a8a0a8
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXValidateProcessor.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.bridge;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+
+/**
+ * Created by fengjunjie
+ */
+public interface WXValidateProcessor {
+
+    WXModuleValidateResult onModuleValidate(WXSDKInstance wxsdkInstance, String moduleStr,
+                                            String methodStr, JSONArray params);
+
+    WXComponentValidateResult onComponentValidate(WXSDKInstance wxsdkInstance,
+                                                  String componentName);
+
+    boolean needValidate(String bundleUrl);
+
+    class WXComponentValidateResult {
+
+        public boolean isSuccess;
+
+        public String replacedComponent;
+
+        public JSONObject validateInfo;
+
+    }
+
+    class WXModuleValidateResult {
+
+        public boolean isSuccess;
+
+        public JSONObject validateInfo;
+
+    }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
old mode 100755
new mode 100644
index f297b6d..7e8a373
--- a/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Constants.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -273,6 +87,8 @@
 
     String POSITION = "position";
 
+    String KEEP_SCROLL_POSITION = "keepScrollPosition";
+
     String TEXT_DECORATION = "textDecoration";
     String TEXT_ALIGN = "textAlign";
     String FONT_WEIGHT = "fontWeight";
@@ -294,13 +110,17 @@
     String RESIZE_MODE = "resizeMode";
     String SHOW_INDICATORS = "showIndicators";
     String AUTO_PLAY = "autoPlay";
-    String SHOW_SCROLLBAR = "showScrollbar";
     String SCROLL_DIRECTION = "scrollDirection";
     String SCOPE = "scope";
     String RECYCLE = "recycle";
     String LOADMORERETRY = "loadmoreretry";
     String LOADMOREOFFSET = "loadmoreoffset";
     String RECYCLE_IMAGE = "recycleImage";
+    String LAYOUT = "layout";
+    String COLUMN_WIDTH= "columnWidth";
+    String COLUMN_COUNT= "columnCount";
+    String COLUMN_GAP= "columnGap";
+    String SHOW_SCROLLBAR= "showScrollbar";
     String OVERFLOW = "overflow";
     String TYPE = "type";
     String PLACEHOLDER = "placeholder";
@@ -347,12 +167,25 @@
     String RETURN_KEY_TYPE = "returnKeyType";
     String OFFSET = "offset";
     String ANIMATED = "animated";
+
+    String INSERT_CELL_ANIMATION = "insertAnimation";
+    String DELETE_CELL_ANIMATION = "deleteAnimation";
+    String AUTO = "auto";
+    String NORMAL = "normal";
+    String ARIA_LABEL = "ariaLabel";
+    String ARIA_HIDDEN = "ariaHidden";
   }
 
   public interface Value {
 
+    int DENSITY = 3;
     int NAV_BAR_SHOWN = 0;
     int NAV_BAR_HIDDEN = 1;
+    int AUTO = -1;
+    int COLUMN_GAP_NORMAL = 32;
+    int COLUMN_COUNT_NORMAL = 1;
+    String MULTI_COLUMN= "multi-column";
+    String GRID= "grid";
     String STICKY = "sticky";
     String FIXED = "fixed";
     String LEFT = "left";
@@ -381,6 +214,10 @@
     String DIRECTION_RIGHT = "right";
     String DIRECTION_UP = "up";
     String DIRECTION_DOWN = "down";
+    String NUMBER = "number";
+
+    String NONE = "none";
+    String DEFAULT = "default";
   }
 
   public interface Event {
@@ -413,6 +250,7 @@
     String RESUME_EVENT = "WXApplicationDidBecomeActiveEvent";
     String PAUSE_EVENT = "WXApplicationWillResignActiveEvent";
     String RETURN = "return";
+    String KEYBOARD = "keyboard";
   }
 
   public interface PSEUDO {
@@ -429,4 +267,12 @@
     String HTTP = "http";
     String LOCAL = "local";
   }
+
+  public interface CodeCache {
+    String URL = "bundleUrl";
+    String DIGEST = "bundleDigest";
+    String PATH = "codeCachePath";
+    String BANNER_DIGEST = "digest";
+    String SAVE_PATH = "v8";
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/Destroyable.java b/android/sdk/src/main/java/com/taobao/weex/common/Destroyable.java
index 9b5e991..5f5fa1c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/Destroyable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/Destroyable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
old mode 100755
new mode 100644
index cea4805..06b9827
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -232,6 +46,13 @@
   int execJSService(String javascript);
 
   /**
+   * take the heap snapshot and serialize the heap to a local file.
+   *
+   * @param filename
+   */
+  void takeHeapSnapshot(String filename);
+
+  /**
    * js call native
 
    */
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXDebugProxy.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXDebugProxy.java
index 882d896..4005d4c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXDebugProxy.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXDebugProxy.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXObject.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXObject.java
old mode 100755
new mode 100644
index 5a2624e..6629040
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXTask.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXTask.java
old mode 100755
new mode 100644
index 58b9c56..1ea659d
--- a/android/sdk/src/main/java/com/taobao/weex/common/IWXTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXTask.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/OnWXScrollListener.java b/android/sdk/src/main/java/com/taobao/weex/common/OnWXScrollListener.java
index 33b35e5..af84d42 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/OnWXScrollListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/OnWXScrollListener.java
@@ -1,129 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
- * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- * 1. Definitions.
- * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined
- * by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License.
- * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are
- * controlled by, or are under common control with that entity. For the purposes of this definition,
- * "control" means (i) the power, direct or indirect, to cause the direction or management of such
- * entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
- * outstanding shares, or (iii) beneficial ownership of such entity.
- * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
- * License.
- * "Source" form shall mean the preferred form for making modifications, including but not limited
- * to software source code, documentation source, and configuration files.
- * "Object" form shall mean any form resulting from mechanical transformation or translation of a
- * Source form, including but not limited to compiled object code, generated documentation, and
- * conversions to other media types.
- * "Work" shall mean the work of authorship, whether in Source or Object form, made available under
- * the License, as indicated by a copyright notice that is included in or attached to the work (an
- * example is provided in the Appendix below).
- * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
- * derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
- * modifications represent, as a whole, an original work of authorship. For the purposes of this
- * License, Derivative Works shall not include works that remain separable from, or merely link (or
- * bind by name) to the interfaces of, the Work and Derivative Works thereof.
- * "Contribution" shall mean any work of authorship, including the original version of the Work and
- * any modifications or additions to that Work or Derivative Works thereof, that is intentionally
- * submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or
- * Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this
- * definition, "submitted" means any form of electronic, verbal, or written communication sent to
- * the Licensor or its representatives, including but not limited to communication on electronic
- * mailing lists, source code control systems, and issue tracking systems that are managed by, or on
- * behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding
- * communication that is conspicuously marked or otherwise designated in writing by the copyright
- * owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work.
- * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each
- * Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- * irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display,
- * publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or
- * Object form.
- * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * (except as stated in this section) patent license to make, have made, use, offer to sell, sell,
- * import, and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed.
- * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works
- * thereof in any medium, with or without modifications, and in Source or Object form, provided that
- * You meet the following conditions:
- * (a) You must give any other recipients of the Work or Derivative Works a copy of this License;
- * and
- * (b) You must cause any modified files to carry prominent notices stating that You changed the
- * files; and
- * (c) You must retain, in the Source form of any Derivative Works that You distribute, all
- * copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding
- * those notices that do not pertain to any part of the Derivative Works; and
- * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative
- * Works that You distribute must include a readable copy of the attribution notices contained
- * within such NOTICE file, excluding those notices that do not pertain to any part of the
- * Derivative Works, in at least one of the following places: within a NOTICE text file distributed
- * as part of the Derivative Works; within the Source form or documentation, if provided along with
- * the Derivative Works; or, within a display generated by the Derivative Works, if and wherever
- * such third-party notices normally appear. The contents of the NOTICE file are for informational
- * purposes only and do not modify the License. You may add Your own attribution notices within
- * Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the
- * Work, provided that such additional attribution notices cannot be construed as modifying the
- * License.
- * You may add Your own copyright statement to Your modifications and may provide additional or
- * different license terms and conditions for use, reproduction, or distribution of Your
- * modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and
- * distribution of the Work otherwise complies with the conditions stated in this License.
- * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
- * intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms
- * and conditions of this License, without any additional terms or conditions. Notwithstanding the
- * above, nothing herein shall supersede or modify the terms of any separate license agreement you
- * may have executed with Licensor regarding such Contributions.
- * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file.
- * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor
- * provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation,
- * any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- * PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or
- * redistributing the Work and assume any risks associated with Your exercise of permissions under
- * this License.
- * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages.
- * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works
- * thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty,
- * indemnity, or other liability obligations and/or rights consistent with this License. However, in
- * accepting such obligations, You may act only on Your own behalf and on Your sole responsibility,
- * not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each
- * Contributor harmless for any liability incurred by, or claims asserted against, such Contributor
- * by reason of your accepting any such warranty or additional liability.
- * END OF TERMS AND CONDITIONS
- * APPENDIX: How to apply the Apache License to your work.
- * To apply the Apache License to your work, attach the following boilerplate notice, with the
- * fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include
- * the brackets!)  The text should be enclosed in the appropriate comment syntax for the file
- * format. We also recommend that a file or class name and description of purpose be included on the
- * same "printed page" as the copyright notice for easier identification within third-party
- * archives.
- * Copyright 2016 Alibaba Group
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/TypeModuleFactory.java b/android/sdk/src/main/java/com/taobao/weex/common/TypeModuleFactory.java
index 828ba6c..636e325 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/TypeModuleFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/TypeModuleFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXCompatModule.java b/android/sdk/src/main/java/com/taobao/weex/common/WXCompatModule.java
index 3b239d2..9b59d4a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXCompatModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXCompatModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java b/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
old mode 100755
new mode 100644
index 42a49e7..ffce700
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXConfig.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
old mode 100755
new mode 100644
index 79e4b64..c288bf3
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXException.java b/android/sdk/src/main/java/com/taobao/weex/common/WXException.java
old mode 100755
new mode 100644
index 602af10..28d8da1
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXException.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXException.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXImageSharpen.java b/android/sdk/src/main/java/com/taobao/weex/common/WXImageSharpen.java
old mode 100755
new mode 100644
index 36e8e73..8a6b38e
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXImageSharpen.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXImageSharpen.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXImageStrategy.java b/android/sdk/src/main/java/com/taobao/weex/common/WXImageStrategy.java
old mode 100755
new mode 100644
index f952a9e..74d06b0
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXImageStrategy.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXImageStrategy.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -221,7 +35,7 @@
   public boolean isSharpen;
 
   /**
-   * The blur radius of the image. [0,10],0 means no blur.
+   * The blur radius of the image. 0 means no blur.
    * */
   public int blurRadius;
 
@@ -240,4 +54,4 @@
   public interface ImageListener{
     public void onImageFinish(String url,ImageView imageView,boolean  result,Map extra);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
old mode 100755
new mode 100644
index 31057ef..cbca430
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXInstanceWrap.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
old mode 100755
new mode 100644
index 93b6fc9..eb48c29
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSBridgeMsgType.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -218,4 +32,5 @@
   public static final int REFRESH_INSTANCE = 0x0a;
   public static final int MODULE_TIMEOUT = 0x0b;
   public static final int MODULE_INTERVAL = 0x0c;
+  public static final int TAKE_HEAP_SNAPSHOT = 0x0d;
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSEngineListener.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSEngineListener.java
old mode 100755
new mode 100644
index 87bbeab..10d2aec
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXJSEngineListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSEngineListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java
index e325760..723394c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSService.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSService.java
new file mode 100644
index 0000000..e927045
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSService.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.common;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class WXJSService implements IWXObject {
+    private String name;
+    private String script;
+    private Map<String, String> options = new HashMap<>();
+
+    public String getName() { return name; }
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getScript() { return script; }
+    public void setScript(String script) {
+        this.script = script;
+    }
+
+    public Map<String, String> getOptions() { return options; }
+    public void setOptions(Map<String, String> options) {
+        this.options = options;
+    }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXModule.java b/android/sdk/src/main/java/com/taobao/weex/common/WXModule.java
old mode 100755
new mode 100644
index 4cb2016..2c029aa
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXModuleAnno.java b/android/sdk/src/main/java/com/taobao/weex/common/WXModuleAnno.java
old mode 100755
new mode 100644
index 8c09bf5..7812453
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXModuleAnno.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXModuleAnno.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -220,4 +34,4 @@
   boolean moduleMethod() default true;
 
   boolean runOnUIThread() default true;
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXPerformance.java b/android/sdk/src/main/java/com/taobao/weex/common/WXPerformance.java
old mode 100755
new mode 100644
index 18b047c..19a9872
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXPerformance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXPerformance.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -476,4 +290,4 @@
   public void appendErrMsg(CharSequence msg) {
     mErrMsgBuilder.append(msg);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXRefreshData.java b/android/sdk/src/main/java/com/taobao/weex/common/WXRefreshData.java
old mode 100755
new mode 100644
index a401fc3..bc01224
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXRefreshData.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXRefreshData.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXRenderStrategy.java b/android/sdk/src/main/java/com/taobao/weex/common/WXRenderStrategy.java
old mode 100755
new mode 100644
index 005c551..67275a9
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXRenderStrategy.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXRenderStrategy.java
@@ -1,209 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-/**
- *
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXRequest.java b/android/sdk/src/main/java/com/taobao/weex/common/WXRequest.java
old mode 100755
new mode 100644
index 2ea20d8..462e48b
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXRequest.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXRequest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXRequestListener.java b/android/sdk/src/main/java/com/taobao/weex/common/WXRequestListener.java
old mode 100755
new mode 100644
index 71ce29d..a9631dd
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXRequestListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXRequestListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXResponse.java b/android/sdk/src/main/java/com/taobao/weex/common/WXResponse.java
old mode 100755
new mode 100644
index a752889..f72eedb
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXResponse.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXResponse.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXRuntimeException.java b/android/sdk/src/main/java/com/taobao/weex/common/WXRuntimeException.java
old mode 100755
new mode 100644
index dfddee7..7063bdf
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXRuntimeException.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXRuntimeException.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXThread.java b/android/sdk/src/main/java/com/taobao/weex/common/WXThread.java
old mode 100755
new mode 100644
index e959894..6e702bf
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXThread.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXThread.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -217,6 +31,7 @@
 public class WXThread extends HandlerThread {
 
   private Handler mHandler;
+  private static final String SYSTEM_ACTION_PREFIX = "android.view.";
 
   static class SafeRunnable implements Runnable {
 
@@ -277,6 +92,14 @@
     if(runnable == null || runnable instanceof SafeRunnable){
       return runnable;
     }
+    String className = runnable.getClass().getCanonicalName();
+    if (className != null && className.startsWith(SYSTEM_ACTION_PREFIX)) {
+      /**
+       * Ignore the Runnable send from system such as {@link android.view.View$CheckForTap},
+       * because system need identify it on {@link android.view.View#removeCallbacks(Runnable)}}
+       */
+      return runnable;
+    }
     return new SafeRunnable(runnable);
   }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java b/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java
new file mode 100644
index 0000000..6bb55a5
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/ApplyStyleConsumer.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import java.util.Map;
+
+/**
+ * Created by sospartan on 22/02/2017.
+ */
+class ApplyStyleConsumer implements WXDomObject.Consumer {
+  static ApplyStyleConsumer sInstance;
+
+  public static ApplyStyleConsumer getInstance() {
+    if (sInstance == null) {
+      sInstance = new ApplyStyleConsumer();
+    }
+    return sInstance;
+  }
+
+  private ApplyStyleConsumer() {
+  }
+
+  ;
+
+  @Override
+  public void accept(WXDomObject dom) {
+    WXStyle style = dom.getStyles();
+
+    /** merge default styles **/
+    Map<String, String> defaults = dom.getDefaultStyle();
+    if (defaults != null) {
+      for (Map.Entry<String, String> entry : defaults.entrySet()) {
+        if (!style.containsKey(entry.getKey())) {
+          style.put(entry.getKey(), entry.getValue());
+        }
+      }
+    }
+
+    if (dom.getStyles().size() > 0) {
+      dom.applyStyleToNode();
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/BasicEditTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/BasicEditTextDomObject.java
index de21576..93b5070 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/BasicEditTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/BasicEditTextDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/CSSAlignConvert.java b/android/sdk/src/main/java/com/taobao/weex/dom/CSSAlignConvert.java
old mode 100755
new mode 100644
index c1ff2f9..9053d6d
--- a/android/sdk/src/main/java/com/taobao/weex/dom/CSSAlignConvert.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/CSSAlignConvert.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/CSSFlexDirectionConvert.java b/android/sdk/src/main/java/com/taobao/weex/dom/CSSFlexDirectionConvert.java
old mode 100755
new mode 100644
index 2b618df..2e30981
--- a/android/sdk/src/main/java/com/taobao/weex/dom/CSSFlexDirectionConvert.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/CSSFlexDirectionConvert.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/CSSJustifyConvert.java b/android/sdk/src/main/java/com/taobao/weex/dom/CSSJustifyConvert.java
old mode 100755
new mode 100644
index 13e29d3..69fff9c
--- a/android/sdk/src/main/java/com/taobao/weex/dom/CSSJustifyConvert.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/CSSJustifyConvert.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/CSSPositionTypeConvert.java b/android/sdk/src/main/java/com/taobao/weex/dom/CSSPositionTypeConvert.java
old mode 100755
new mode 100644
index 374bb01..673b8be
--- a/android/sdk/src/main/java/com/taobao/weex/dom/CSSPositionTypeConvert.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/CSSPositionTypeConvert.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/CSSWrapConvert.java b/android/sdk/src/main/java/com/taobao/weex/dom/CSSWrapConvert.java
old mode 100755
new mode 100644
index 6dd7bc0..9440a45
--- a/android/sdk/src/main/java/com/taobao/weex/dom/CSSWrapConvert.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/CSSWrapConvert.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java
new file mode 100644
index 0000000..9011ade
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMAction.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+
+import com.taobao.weex.dom.action.Action;
+
+/**
+ * Created by sospartan on 23/02/2017.
+ */
+
+public interface DOMAction extends Action{
+  void executeDom(DOMActionContext context);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java
new file mode 100644
index 0000000..bbde73f
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContext.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.ui.component.WXComponent;
+
+import java.util.Map;
+
+/**
+ * DOM operation context, use as compatible helper temporary.
+ * Created by sospartan on 14/02/2017.
+ */
+
+public interface DOMActionContext {
+  String getInstanceId();
+
+  /**
+   * For compatible, remove soon.
+   **/
+  WXDomObject.Consumer getAddDOMConsumer();
+
+  WXDomObject.Consumer getApplyStyleConsumer();
+
+  @Deprecated
+  void addDomInfo(String ref, WXComponent component);
+
+  void addAnimationForElement(String ref, Map<String, Object> animMap);
+
+  /**
+   * Post a Render task
+   *
+   * @param statement
+   */
+  void postRenderTask(RenderAction statement);
+
+  void registerDOMObject(String ref, WXDomObject ojb);
+
+  void unregisterDOMObject(String ref);
+
+  void registerComponent(String ref, WXComponent comp);
+
+  WXComponent getCompByRef(String ref);
+
+  boolean isDestory();
+
+  WXSDKInstance getInstance();
+
+  WXDomObject getDomByRef(String ref);
+
+  @Deprecated
+  WXDomObject.Consumer getRemoveElementConsumer();
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
new file mode 100644
index 0000000..0ed1049
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
@@ -0,0 +1,434 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import android.text.TextUtils;
+import android.util.Pair;
+
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.action.Actions;
+import com.taobao.weex.dom.flex.CSSLayoutContext;
+import com.taobao.weex.ui.IWXRenderTask;
+import com.taobao.weex.ui.WXRenderManager;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * <p>
+ * This class is responsible for creating command object of DOM operation and
+ * invoking command of corresponding object.
+ * </p>
+ * <p>
+ * In the command design pattern,
+ * this class acts as the <strong>invoker </strong>in the command pattern
+ * despite that it is also responsible for creating <strong>Command</strong> object.
+ * And,{@link IWXRenderTask} works as the <strong>Command</strong>
+ * {@link WXDomManager} works as the <strong>Client</strong>
+ * {@link WXRenderManager} works as the <strong>Receiver</strong>.
+ * </p>
+ * <p>
+ * There exists one to one correspondence between DOMActionContextImpl and WXInstance,
+ * and {@link WXDomManager} is responsible for manage the relation of correspondence.
+ * </p>
+ */
+class DOMActionContextImpl implements DOMActionContext {
+  /** package **/ final ConcurrentHashMap<String, WXDomObject> mRegistry;
+  private WXDomObject.Consumer mAddDOMConsumer;
+  private WXDomObject.Consumer mUnregisterDomConsumer;
+  private String mInstanceId;
+  private WXRenderManager mWXRenderManager;
+  private ArrayList<IWXRenderTask> mNormalTasks;
+  private Set <Pair<String, Map<String, Object>>> animations;
+  private CSSLayoutContext mLayoutContext;
+  private volatile boolean mDirty;
+  private boolean mDestroy;
+  private Map<String, AddDomInfo> mAddDom = new HashMap<>();
+
+  /**
+   * Create an instance of {@link DOMActionContextImpl},
+   * One {@link WXSDKInstance} corresponding to one and only one {@link DOMActionContextImpl}.
+   * And all the instance of {@link WXDomManager} share the same {@link WXRenderManager}.
+   * @param instanceId the id of the {@link WXSDKInstance}.
+   *                   One {@link WXSDKInstance} corresponding to one {@link DOMActionContextImpl},
+   *                   and vice versa.
+   * @param renderManager This acts as the Receiver of the command pattern
+   */
+  public DOMActionContextImpl(String instanceId, WXRenderManager renderManager) {
+    mDestroy = false;
+    mInstanceId = instanceId;
+    mLayoutContext = new CSSLayoutContext();
+    mRegistry = new ConcurrentHashMap<>();
+    mNormalTasks = new ArrayList<>();
+    animations = new LinkedHashSet<>();
+    mWXRenderManager = renderManager;
+    mAddDOMConsumer = new AddDOMConsumer(mRegistry);
+    mUnregisterDomConsumer = new RemoveElementConsumer(mRegistry);
+  }
+
+  @Override
+  public String getInstanceId() {
+    return mInstanceId;
+  }
+
+  @Override
+  public WXDomObject.Consumer getAddDOMConsumer(){
+    return mAddDOMConsumer;
+  }
+
+  @Override
+  public WXDomObject.Consumer getRemoveElementConsumer() {
+    return mUnregisterDomConsumer;
+  }
+
+  @Override
+  public WXDomObject.Consumer getApplyStyleConsumer() {
+    return ApplyStyleConsumer.getInstance();
+  }
+
+  @Override
+  public void addDomInfo(String ref, WXComponent component) {
+    AddDomInfo addDomInfo = new AddDomInfo();
+    addDomInfo.component = component;
+    mAddDom.put(ref, addDomInfo);
+  }
+
+  /**
+   * Destroy current instance, which occurred when {@link WXSDKInstance#destroy()} is called.
+   */
+  public void destroy() {
+    mDestroy = true;
+    mRegistry.clear();
+    mAddDOMConsumer = null;
+    mNormalTasks.clear();
+    mAddDom.clear();
+    mLayoutContext = null;
+    mWXRenderManager = null;
+    animations.clear();
+  }
+
+  /**
+   * Rebuild the component tree.
+   * The purpose of this method is moving fixed components to the root component.
+   * This method will be called when {@link #batch()} is executed.
+   * @param root root dom
+   */
+  void rebuildingFixedDomTree(WXDomObject root) {
+    if (root != null && root.getFixedStyleRefs() != null) {
+      int size = root.getFixedStyleRefs().size();
+      for (int i = 0; i < size; i++) {
+        String fixedRef = root.getFixedStyleRefs().get(i);
+        WXDomObject wxDomObject = mRegistry.get(fixedRef);
+        if (wxDomObject!=null && wxDomObject.parent != null) {
+          wxDomObject.parent.remove(wxDomObject);
+          root.add(wxDomObject, -1);
+        }
+      }
+    }
+
+  }
+
+  /**
+   * Batch the execution of command objects and execute all the command objects created other
+   * places, e.g. call {@link IWXRenderTask#execute()}.
+   * First, it will rebuild the dom tree and do pre layout staff.
+   * Then call {@link com.taobao.weex.dom.flex.CSSNode#calculateLayout(CSSLayoutContext)} to
+   * start calculate layout.
+   * Next, call {@link ApplyUpdateConsumer} to get changed dom and creating
+   * corresponding command object.
+   * Finally, walk through the queue, e.g. call {@link IWXRenderTask#execute()} for every task
+   * in the queue.
+   */
+  void batch() {
+
+    if (!mDirty || mDestroy) {
+      return;
+    }
+
+    WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT);
+    layout(rootDom);
+  }
+
+  void layout(WXDomObject rootDom) {
+    if (rootDom == null) {
+      return;
+    }
+    long start0 = System.currentTimeMillis();
+
+    rebuildingFixedDomTree(rootDom);
+
+    rootDom.traverseTree( new WXDomObject.Consumer() {
+      @Override
+      public void accept(WXDomObject dom) {
+        if (!dom.hasUpdate() || mDestroy) {
+          return;
+        }
+        dom.layoutBefore();
+      }
+    });
+    long start = System.currentTimeMillis();
+
+
+    rootDom.calculateLayout(mLayoutContext);
+
+    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
+    if (instance != null) {
+      instance.cssLayoutTime(System.currentTimeMillis() - start);
+    }
+
+    rootDom.traverseTree( new WXDomObject.Consumer() {
+      @Override
+      public void accept(WXDomObject dom) {
+        if (!dom.hasUpdate() || mDestroy) {
+          return;
+        }
+        dom.layoutAfter();
+      }
+    });
+
+    start = System.currentTimeMillis();
+    rootDom.traverseTree(new ApplyUpdateConsumer());
+
+    if (instance != null) {
+      instance.applyUpdateTime(System.currentTimeMillis() - start);
+    }
+
+    start = System.currentTimeMillis();
+    updateDomObj();
+    if (instance != null) {
+      instance.updateDomObjTime(System.currentTimeMillis() - start);
+    }
+    parseAnimation();
+
+    int count = mNormalTasks.size();
+    for (int i = 0; i < count && !mDestroy; ++i) {
+      mWXRenderManager.runOnThread(mInstanceId, mNormalTasks.get(i));
+    }
+    mNormalTasks.clear();
+    mAddDom.clear();
+    animations.clear();
+    mDirty = false;
+    if (instance != null) {
+      instance.batchTime(System.currentTimeMillis() - start0);
+    }
+  }
+
+  private class ApplyUpdateConsumer implements WXDomObject.Consumer{
+
+    @Override
+    public void accept(WXDomObject dom) {
+      if (dom.hasUpdate()) {
+        dom.markUpdateSeen();
+        if (!dom.isYoung()) {
+          final WXDomObject copy = dom.clone();
+          if (copy == null) {
+            return;
+          }
+          mNormalTasks.add(new IWXRenderTask() {
+
+            @Override
+            public void execute() {
+              mWXRenderManager.setLayout(mInstanceId, copy.getRef(), copy);
+              if(copy.getExtra() != null) {
+                mWXRenderManager.setExtra(mInstanceId, copy.getRef(), copy.getExtra());
+              }
+            }
+
+            @Override
+            public String toString() {
+              return "setLayout & setExtra";
+            }
+          });
+        }
+      }
+    }
+  }
+
+  private void parseAnimation() {
+    for (final Pair<String, Map<String, Object>> pair : animations) {
+      if (!TextUtils.isEmpty(pair.first)) {
+        final WXAnimationBean animationBean = createAnimationBean(pair.first, pair.second);
+        if (animationBean != null) {
+          postRenderTask(Actions.getAnimationAction(pair.first, animationBean));
+        }
+      }
+    }
+  }
+
+  /**
+   * Update all components' dom info stored in {@link #mAddDom}
+   */
+  private void updateDomObj() {
+    long start = System.currentTimeMillis();
+    Iterator<Map.Entry<String, AddDomInfo>> iterator = mAddDom.entrySet().iterator();
+    Map.Entry<String, AddDomInfo> entry;
+    AddDomInfo value;
+    while (iterator.hasNext()) {
+      entry = iterator.next();
+      value = entry.getValue();
+      updateDomObj(value.component);
+    }
+    if (WXEnvironment.isApkDebugable()) {
+      WXLogUtils.d("updateDomObj", "time:" + (System.currentTimeMillis() - start));
+    }
+  }
+
+  /**
+   * Update the specified component's dom and mark it as old.
+   * @param component the component to be updated
+   */
+  private void updateDomObj(WXComponent component) {
+    if (component == null) {
+      return;
+    }
+    WXDomObject domObject = mRegistry.get(component.getRef());
+    if (domObject == null) {
+      return;
+    }
+    domObject.old();
+    component.updateDom(domObject);
+    if (component instanceof WXVContainer) {
+      WXVContainer container = (WXVContainer) component;
+      int count = container.childCount();
+      for (int i = 0; i < count; ++i) {
+        updateDomObj(container.getChild(i));
+      }
+    }
+  }
+
+  @Override
+  public void addAnimationForElement(String ref, Map<String, Object> animMap) {
+    animations.add(new Pair<>(ref,animMap));
+    mDirty = true;
+  }
+
+  @Override
+  public void postRenderTask(RenderAction action) {
+    mNormalTasks.add(new RenderActionTask(action, mWXRenderManager.getRenderContext(mInstanceId)));
+    mDirty = true;
+  }
+
+  @Override
+  public void registerDOMObject(String ref, WXDomObject obj) {
+    mRegistry.put(ref,obj);
+  }
+
+  @Override
+  public void unregisterDOMObject(String ref) {
+    mRegistry.remove(ref);
+  }
+
+  @Override
+  public void registerComponent(String ref, WXComponent comp) {
+    mWXRenderManager.registerComponent(mInstanceId,ref,comp);
+  }
+
+  @Override
+  public WXComponent getCompByRef(String ref) {
+    return mWXRenderManager.getWXComponent(mInstanceId,ref);
+  }
+
+  @Override
+  public boolean isDestory() {
+    return false;
+  }
+
+  @Override
+  public WXSDKInstance getInstance() {
+    return mWXRenderManager.getWXSDKInstance(mInstanceId);
+  }
+
+  @Override
+  public WXDomObject getDomByRef(String ref) {
+    return mRegistry.get(ref);
+  }
+
+  private WXAnimationBean createAnimationBean(String ref,Map<String, Object> style){
+    if (style != null) {
+      try {
+        Object transform = style.get(WXDomObject.TRANSFORM);
+        if (transform instanceof String && !TextUtils.isEmpty((String) transform)) {
+          String transformOrigin = (String) style.get(WXDomObject.TRANSFORM_ORIGIN);
+          WXAnimationBean animationBean = new WXAnimationBean();
+          WXDomObject domObject = mRegistry.get(ref);
+          int width = (int) domObject.getLayoutWidth();
+          int height = (int) domObject.getLayoutHeight();
+          animationBean.styles = new WXAnimationBean.Style();
+          animationBean.styles.init(transformOrigin, (String) transform, width, height,WXSDKManager.getInstanceViewPortWidth(mInstanceId));
+          return animationBean;
+        }
+      }catch (RuntimeException e){
+        WXLogUtils.e("", e);
+        return null;
+      }
+    }
+    return null;
+  }
+
+  private static class RemoveElementConsumer implements WXDomObject.Consumer {
+    final ConcurrentHashMap<String, WXDomObject> mRegistry;
+
+    RemoveElementConsumer(ConcurrentHashMap<String, WXDomObject> r) {
+      mRegistry = r;
+    }
+
+
+    @Override
+    public void accept(WXDomObject dom) {
+      mRegistry.remove(dom.getRef());
+    }
+  }
+
+
+  private static class AddDOMConsumer implements WXDomObject.Consumer {
+    final ConcurrentHashMap<String, WXDomObject> mRegistry;
+    AddDOMConsumer(ConcurrentHashMap<String, WXDomObject> r){
+      mRegistry = r;
+    }
+
+    @Override
+    public void accept(WXDomObject dom) {
+      //register dom
+      dom.young();
+      mRegistry.put(dom.getRef(), dom);
+
+      //find fixed node
+      WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT);
+      if (rootDom != null && dom.isFixed()) {
+        rootDom.add2FixedDomList(dom.getRef());
+      }
+    }
+  }
+
+  static class AddDomInfo {
+
+    public WXComponent component;
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DomContext.java b/android/sdk/src/main/java/com/taobao/weex/dom/DomContext.java
index 177a64b..ad65eeb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/DomContext.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/DomContext.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/ImmutableDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/ImmutableDomObject.java
index 41ce73b..55439c3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/ImmutableDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/ImmutableDomObject.java
@@ -1,228 +1,48 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
+import android.support.annotation.NonNull;
+
 import com.taobao.weex.dom.flex.Spacing;
 
+import static com.taobao.weex.dom.WXDomObject.DESTROYED;
+
 /**
  * Created by sospartan on 25/10/2016.
  */
 
 public interface ImmutableDomObject {
   String getRef();
-  Spacing getMargin();
+  @NonNull Spacing getMargin();
   float getLayoutWidth();
   float getLayoutHeight();
   float getLayoutX();
   float getLayoutY();
   boolean isFixed();
-  WXStyle getStyles();
-  WXEvent getEvents();
-  WXAttr getAttrs();
-  Spacing getPadding();
-  Spacing getBorder();
+  @NonNull WXStyle getStyles();
+  @NonNull WXEvent getEvents();
+  @NonNull WXAttr getAttrs();
+  @NonNull Spacing getPadding();
+  @NonNull Spacing getBorder();
   Object getExtra();
   String getType();
+
+  public final ImmutableDomObject DESTROYED = WXDomObject.DESTROYED;
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java
new file mode 100644
index 0000000..cb461c0
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/RenderAction.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.dom.action.Action;
+
+/**
+ * Created by sospartan on 23/02/2017.
+ */
+
+public interface RenderAction extends Action{
+  void executeRender(RenderActionContext context);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionContext.java b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionContext.java
new file mode 100644
index 0000000..884cfeb
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionContext.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 23/02/2017.
+ */
+
+public interface RenderActionContext {
+  WXSDKInstance getInstance();
+  WXComponent getComponent(String ref);
+  WXComponent unregisterComponent(String ref);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
new file mode 100644
index 0000000..28b487f
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.ui.IWXRenderTask;
+
+/**
+ * Created by sospartan on 23/02/2017.
+ */
+
+class RenderActionTask implements IWXRenderTask {
+  private final RenderAction mRenderTask;
+  private final RenderActionContext mContext;
+
+  public RenderActionTask(RenderAction action, RenderActionContext context){
+    mRenderTask = action;
+    mContext = context;
+  }
+
+
+  @Override
+  public void execute() {
+    mRenderTask.executeRender(mContext);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/SafePutConcurrentHashMap.java b/android/sdk/src/main/java/com/taobao/weex/dom/SafePutConcurrentHashMap.java
index 8909f1b..7ada309 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/SafePutConcurrentHashMap.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/SafePutConcurrentHashMap.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/TextAreaEditTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/TextAreaEditTextDomObject.java
index 6ecf1a9..a6625e3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/TextAreaEditTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/TextAreaEditTextDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
old mode 100755
new mode 100644
index a9ebf60..05e1626
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXAttr.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -210,6 +24,7 @@
 
 import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.WXImageSharpen;
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
 import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
@@ -218,6 +33,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import static java.lang.Boolean.parseBoolean;
+
 /**
  * store value of component attribute
  *
@@ -332,7 +149,7 @@
       return true;
     }
     try {
-      return Boolean.parseBoolean(String.valueOf(obj));
+      return parseBoolean(String.valueOf(obj));
     } catch (Exception e) {
       WXLogUtils.e("[WXAttr] recycle:", e);
     }
@@ -346,7 +163,7 @@
     }
 
     try {
-      return Boolean.parseBoolean(String.valueOf(obj));
+      return parseBoolean(String.valueOf(obj));
     } catch (Exception e) {
       WXLogUtils.e("[WXAttr] showIndicators:", e);
     }
@@ -360,7 +177,7 @@
     }
 
     try {
-      return Boolean.parseBoolean(String.valueOf(obj));
+      return parseBoolean(String.valueOf(obj));
     } catch (Exception e) {
       WXLogUtils.e("[WXAttr] autoPlay:", e);
     }
@@ -409,7 +226,7 @@
     }
 
     try {
-      return Boolean.parseBoolean(String.valueOf(obj));
+      return parseBoolean(String.valueOf(obj));
     } catch (Exception e) {
       WXLogUtils.e("[WXAttr] recycleImage:", e);
     }
@@ -437,6 +254,91 @@
     return ret;
   }
 
+  public float getColumnWidth(){
+
+    Object obj = get(Constants.Name.COLUMN_WIDTH);
+    if (obj == null) {
+      return Constants.Value.AUTO;
+    }
+
+    String value = String.valueOf(obj);
+    if(Constants.Name.AUTO.equals(value)){
+      return Constants.Value.AUTO;
+    }
+
+    try {
+      float columnWidth = Float.parseFloat(value);
+      return columnWidth > 0 ? columnWidth : 0;
+    } catch (Exception e) {
+      WXLogUtils.e("[WXAttr] getColumnWidth:", e);
+    }
+    return Constants.Value.AUTO;
+  }
+
+  public int getColumnCount() {
+
+    Object obj = get(Constants.Name.COLUMN_COUNT);
+    if (obj == null) {
+      return Constants.Value.AUTO;
+    }
+
+    String value = String.valueOf(obj);
+    if(Constants.Name.AUTO.equals(value)){
+      return Constants.Value.AUTO;
+    }
+
+    try {
+      int columnCount = Integer.parseInt(value);
+      return columnCount > 0 ? columnCount : Constants.Value.AUTO;
+    } catch (Exception e) {
+      WXLogUtils.e("[WXAttr] getColumnCount:", e);
+      return Constants.Value.AUTO;
+    }
+  }
+
+  public float getColumnGap() {
+
+    Object obj = get(Constants.Name.COLUMN_GAP);
+    if (obj == null) {
+      return Constants.Value.COLUMN_GAP_NORMAL;
+    }
+
+    String value = String.valueOf(obj);
+    if (Constants.Name.NORMAL.equals(value)) {
+      return Constants.Value.COLUMN_GAP_NORMAL;
+    }
+
+    try {
+      float columnGap = Float.parseFloat(value);
+      return columnGap >= 0 ? columnGap : Constants.Value.AUTO;
+    } catch (Exception e) {
+      WXLogUtils.e("[WXAttr] getColumnGap:", e);
+    }
+    return Constants.Value.COLUMN_GAP_NORMAL;
+  }
+
+  public int getLayoutType(){
+    Object obj = get(Constants.Name.LAYOUT);
+    if (obj == null) {
+      return WXRecyclerView.TYPE_LINEAR_LAYOUT;
+    }
+
+    try {
+      switch(String.valueOf(obj)){
+        case Constants.Value.MULTI_COLUMN :
+          return  WXRecyclerView.TYPE_STAGGERED_GRID_LAYOUT;
+        case Constants.Value.GRID :
+          return  WXRecyclerView.TYPE_GRID_LAYOUT;
+        default:
+          return WXRecyclerView.TYPE_LINEAR_LAYOUT;
+      }
+    } catch (Exception e) {
+      WXLogUtils.e("[WXAttr] getLayoutType:", e);
+    }
+    return WXRecyclerView.TYPE_LINEAR_LAYOUT;
+  }
+
+
   @Override
   public boolean equals(Object o) {
     return map.equals(o);
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
new file mode 100644
index 0000000..3950be2
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXCellDomObject.java
@@ -0,0 +1,57 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.dom.flex.CSSNode;
+import com.taobao.weex.dom.flex.MeasureOutput;
+import com.taobao.weex.ui.component.WXBasicComponentType;
+import com.taobao.weex.utils.WXLogUtils;
+
+/**
+ * Created by zhengshihan on 2017/4/11.
+ */
+
+public class WXCellDomObject extends WXDomObject {
+
+  /** package **/ static final CSSNode.MeasureFunction CELL_MEASURE_FUNCTION = new MeasureFunction() {
+    @Override
+    public void measure(CSSNode node, float width, MeasureOutput measureOutput) {
+      if (node != null) {
+        CSSNode parent = node.getParent();
+        if (parent != null && parent instanceof WXRecyclerDomObject) {
+          WXRecyclerDomObject parentDom = ((WXRecyclerDomObject) parent);
+          parentDom.preCalculateCellWidth();
+          WXDomObject domObject = (WXDomObject) node;
+          if (WXBasicComponentType.CELL.equals(domObject.getType())) {
+            float w = ((WXRecyclerDomObject) parent).getColumnWidth();
+            node.setLayoutWidth(w);
+          } else if (WXBasicComponentType.HEADER.equals(domObject.getType())){
+            float w = parentDom.getAvailableWidth();
+            WXLogUtils.d("getAvailableWidth:"+w);
+            node.setLayoutWidth(w);
+          }
+        }
+      }
+    }
+  };
+
+  public WXCellDomObject() {
+    setMeasureFunction(CELL_MEASURE_FUNCTION);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXCustomStyleSpan.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXCustomStyleSpan.java
old mode 100755
new mode 100644
index 18d8074..d0c61fe
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXCustomStyleSpan.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXCustomStyleSpan.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
old mode 100755
new mode 100644
index dc8495e..aa6ff99
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
@@ -1,215 +1,28 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
 import android.os.Handler;
 import android.os.Message;
 
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.taobao.weex.bridge.JSCallback;
+import com.taobao.weex.dom.action.Actions;
 
 /**
  * Handler for dom operations.
@@ -245,71 +58,20 @@
       mWXDomManager.sendEmptyMessageDelayed(WXDomHandler.MsgType.WX_DOM_BATCH, DELAY_TIME);
     }
     switch (what) {
-      case MsgType.WX_DOM_CREATE_BODY:
-        mWXDomManager.createBody(task.instanceId, (JSONObject) task.args.get(0));
-        break;
-      case MsgType.WX_DOM_UPDATE_ATTRS:
-        mWXDomManager.updateAttrs(task.instanceId, (String) task.args.get(0), (JSONObject) task.args.get(1));
+      case MsgType.WX_EXECUTE_ACTION:
+        mWXDomManager.executeAction(task.instanceId, (DOMAction) task.args.get(0), (boolean) task.args.get(1));
         break;
       case MsgType.WX_DOM_UPDATE_STYLE:
-        mWXDomManager.updateStyle(
-            task.instanceId,
-            (String) task.args.get(0),
+        //keep this for direct native call
+        mWXDomManager.executeAction(task.instanceId, Actions.getUpdateStyle((String) task.args.get(0),
             (JSONObject) task.args.get(1),
-            task.args.size() > 2 && (boolean) task.args.get(2)
-        );
-        break;
-      case MsgType.WX_DOM_ADD_DOM:
-        mWXDomManager.addDom(task.instanceId, (String) task.args.get(0), (JSONObject) task.args.get(1), (Integer) task.args.get(2));
-        break;
-      case MsgType.WX_DOM_REMOVE_DOM:
-        mWXDomManager.removeDom(task.instanceId, (String) task.args.get(0));
-        break;
-      case MsgType.WX_DOM_MOVE_DOM:
-        mWXDomManager.moveDom(task.instanceId, (String) task.args.get(0), (String) task.args.get(1), (Integer) task.args.get(2));
-        break;
-      case MsgType.WX_DOM_ADD_EVENT:
-        mWXDomManager.addEvent(task.instanceId, (String) task.args.get(0), (String) task.args.get(1));
-        break;
-      case MsgType.WX_DOM_REMOVE_EVENT:
-        mWXDomManager.removeEvent(task.instanceId, (String) task.args.get(0), (String) task.args.get(1));
-        break;
-      case MsgType.WX_DOM_CREATE_FINISH:
-        mWXDomManager.createFinish(task.instanceId);
-        break;
-      case MsgType.WX_DOM_REFRESH_FINISH:
-        mWXDomManager.refreshFinish(task.instanceId);
-        break;
-      case MsgType.WX_DOM_UPDATE_FINISH:
-        mWXDomManager.updateFinish(task.instanceId);
-        break;
-      case MsgType.WX_ANIMATION:
-        mWXDomManager.startAnimation(task.instanceId,
-                                     (String) task.args.get(0),
-                                     (String) task.args.get(1),
-                                     (String) task.args.get(2));
+            task.args.size() > 2 && (boolean) task.args.get(2)),false);
         break;
       case MsgType.WX_DOM_BATCH:
+
         mWXDomManager.batch();
         mHasBatch = false;
         break;
-
-      case MsgType.WX_DOM_SCROLLTO:
-        mWXDomManager.scrollToDom(task.instanceId, (String) task.args.get(0), (JSONObject) task.args.get(1));
-        break;
-      case MsgType.WX_DOM_ADD_RULE:
-        mWXDomManager.addRule(task.instanceId,(String) task.args.get(0), (JSONObject) task.args.get(1));
-        break;
-      case MsgType.WX_COMPONENT_SIZE:
-        mWXDomManager.getComponentSize(task.instanceId, (String) task.args.get(0), (JSCallback) task.args.get(1));
-        break;
-      case MsgType.WX_DOM_INVOKE:
-        mWXDomManager.invokeMethod(
-            task.instanceId,
-            (String)task.args.get(0),
-            (String)task.args.get(1),
-            (JSONArray)task.args.get(2));
-        break;
       default:
         break;
     }
@@ -319,24 +81,42 @@
 
   public static class MsgType {
 
+    @Deprecated
     public static final int WX_DOM_CREATE_BODY = 0x0;
+    @Deprecated
     public static final int WX_DOM_UPDATE_ATTRS = 0x01;
+    @Deprecated
     public static final int WX_DOM_UPDATE_STYLE = 0x02;
+    @Deprecated
     public static final int WX_DOM_ADD_DOM = 0x03;
+    @Deprecated
     public static final int WX_DOM_REMOVE_DOM = 0x04;
+    @Deprecated
     public static final int WX_DOM_MOVE_DOM = 0x05;
+    @Deprecated
     public static final int WX_DOM_ADD_EVENT = 0x06;
+    @Deprecated
     public static final int WX_DOM_REMOVE_EVENT = 0x07;
+    @Deprecated
     public static final int WX_DOM_SCROLLTO = 0x08;
+    @Deprecated
     public static final int WX_DOM_CREATE_FINISH = 0x09;
+    @Deprecated
     public static final int WX_DOM_REFRESH_FINISH = 0x0a;
+    @Deprecated
     public static final int WX_DOM_UPDATE_FINISH = 0x0b;
+    @Deprecated
     public static final int WX_ANIMATION=0xc;
+    @Deprecated
     public static final int WX_DOM_ADD_RULE=0xd;
+    @Deprecated
     public static final int WX_DOM_INVOKE=0xe;
 
+    public static final int WX_EXECUTE_ACTION = 0xfe;
     public static final int WX_DOM_BATCH = 0xff;
 
+    @Deprecated
     public static final int WX_COMPONENT_SIZE= 0xff1;
+
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
old mode 100755
new mode 100644
index d7ebaa7..8260664
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
@@ -1,238 +1,41 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
 import android.os.Handler;
 import android.os.Message;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.text.TextUtils;
 
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.taobao.weex.WXEnvironment;
-import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
-import com.taobao.weex.bridge.JSCallback;
-import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.common.WXThread;
 import com.taobao.weex.ui.WXRenderManager;
-import com.taobao.weex.utils.FontDO;
-import com.taobao.weex.utils.TypefaceUtil;
 import com.taobao.weex.utils.WXUtils;
 
-import java.util.HashMap;
+import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.Map;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Class for managing dom operation. This class works as the client in the command pattern, it
- * will call {@link WXDomStatement} for creating command object and invoking corresponding
+ * will call {@link DOMActionContextImpl} for creating command object and invoking corresponding
  * operation.
  * Methods in this class normally need to be invoked in dom thread, otherwise, {@link
  * WXRuntimeException} may be thrown.
@@ -243,7 +46,7 @@
   /** package **/
   Handler mDomHandler;
   private WXRenderManager mWXRenderManager;
-  private ConcurrentHashMap<String, WXDomStatement> mDomRegistries;
+  private ConcurrentHashMap<String, DOMActionContextImpl> mDomRegistries;
 
   public WXDomManager(WXRenderManager renderManager) {
     mWXRenderManager = renderManager;
@@ -281,7 +84,7 @@
     if (!WXUtils.isUiThread()) {
       throw new WXRuntimeException("[WXDomManager] removeDomStatement");
     }
-    final WXDomStatement statement = mDomRegistries.remove(instanceId);
+    final DOMActionContextImpl statement = mDomRegistries.remove(instanceId);
     if (statement != null) {
       post(new Runnable() {
 
@@ -315,285 +118,68 @@
     mDomThread = null;
   }
 
-  /**
-   * Invoke {@link WXDomStatement} for creating body according to the JSONObject.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param element the jsonObject according to which to create command object.
-   */
-  void createBody(String instanceId, JSONObject element) {
-    throwIfNotDomThread();
-    WXDomStatement statement = new WXDomStatement(instanceId, mWXRenderManager);
-    mDomRegistries.put(instanceId, statement);
-    statement.createBody(element);
-  }
-
   private boolean isDomThread() {
     return !WXEnvironment.isApkDebugable() || Thread.currentThread().getId() == mDomThread.getId();
   }
 
   /**
-   * Batch the execution of {@link WXDomStatement}
+   * Batch the execution of {@link DOMActionContextImpl}
    */
   void batch() {
     throwIfNotDomThread();
-    Iterator<Entry<String, WXDomStatement>> iterator = mDomRegistries.entrySet().iterator();
+    Iterator<Entry<String, DOMActionContextImpl>> iterator = mDomRegistries.entrySet().iterator();
     while (iterator.hasNext()) {
       iterator.next().getValue().batch();
     }
   }
 
-  /**
-   * Invoke {@link WXDomStatement} for adding a dom node to its parent in a specific location.
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param element the dom object in the form of JSONObject
-   * @param parentRef parent to which the dom is added.
-   * @param index the location of which the dom is added.
-   */
-  void addDom(String instanceId, String parentRef, JSONObject element, int index) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.addDom(element, parentRef, index);
-  }
-
-  void invokeMethod(String instanceId, String ref, String method, JSONArray args){
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.invokeMethod(ref,method,args);
-  }
-
   private void throwIfNotDomThread(){
     if (!isDomThread()) {
       throw new WXRuntimeException("dom operation must be done in dom thread");
     }
   }
 
-  /**
-   * Invoke {@link WXDomStatement} for removing the specified {@link WXDomObject}.
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref of the dom.
-   */
-  //removeElement(ref:String)
-  void removeDom(String instanceId, String ref) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.removeDom(ref);
-  }
-
-
-  /**
-   * Invoke {@link WXDomStatement} for moving the specific {@link WXDomObject} to a new parent.
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref of the dom to be moved.
-   * @param parentRef of the new parent DOM node
-   * @param index the index of the dom to be inserted in the new parent.
-   */
-  void moveDom(String instanceId, String ref, String parentRef, int index) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.moveDom(ref, parentRef, index);
-  }
-
-  /**
-   * Invoke {@link WXDomStatement} for updating the attributes according to the
-   * given attribute.
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref of the dom.
-   * @param attr the new attribute. This attribute is only a part of the full attribute, and will be
-   *             merged into attributes
-   */
-  void updateAttrs(String instanceId, String ref, JSONObject attr) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateAttrs(ref, attr);
-  }
-
-  /**
-   * Invoke {@link WXDomStatement} for updating style
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref the given dom object
-   * @param style the given style.
-   */
-  void updateStyle(String instanceId, String ref, JSONObject style, boolean byPesudo) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateStyle(ref, style, byPesudo);
-  }
-
-  /**
-   * Invoke {@link WXDomStatement} for adding a default event listener to the corresponding {@link
-   * WXDomObject}.
-   *
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref of the dom.
-   * @param type the type of the event, this may be a plain event defined in
-   * {@link com.taobao.weex.common.Constants.Event} or a gesture defined in {@link com.taobao
-   * .weex.ui.view.gesture.WXGestureType}
-   */
-  void addEvent(String instanceId, String ref, String type) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.addEvent(ref, type);
-  }
-
-  /**
-   * Invoke the {@link WXDomStatement} for removing the event listener of the corresponding {@link
-   * WXDomObject}.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance
-   * @param ref of the dom.
-   * @param type the type of the event, this may be a plain event defined in
-   * {@link com.taobao.weex.common.Constants.Event} or a gesture defined in {@link com.taobao
-   * .weex.ui.view.gesture.WXGestureType}
-   */
-  void removeEvent(String instanceId, String ref, String type) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.removeEvent(ref, type);
-  }
-
-  /**
-   * Invoke the {@link WXDomStatement} for scrolling the given view to the specified position.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance to
-   *                                                                    scroll.
-   * @param ref of the dom.
-   * @param options the specified position
-   */
-  void scrollToDom(String instanceId, String ref, JSONObject options) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.scrollToDom(ref, options);
-  }
-
-  /**
-   * Notify the creating of whole dom tree has finished. This message is sent by JS.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance to
-   *                                                                    notify.
-   */
-  void createFinish(String instanceId) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.createFinish();
-  }
-
-  /**
-   * Notify the refreshing has finished.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance to
-   *                                                                    notify.
-   */
-  void refreshFinish(String instanceId) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.refreshFinish();
-  }
-
-  /**
-   * Notify the update has finished.
-   * @param instanceId {@link com.taobao.weex.WXSDKInstance#mInstanceId} for the instance to
-   *                                                                    notify.
-   */
-  void updateFinish(String instanceId) {
-    throwIfNotDomThread();
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateFinish();
-  }
-
-  void startAnimation(@NonNull String instanceId,
-                      @NonNull String ref,
-                      @NonNull String animation,
-                      @Nullable String callBack){
-    if (!isDomThread()) {
-      throw new WXRuntimeException("RefreshFinish operation must be done in dom thread");
-    }
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.startAnimation(ref,animation,callBack);
-  }
-
-  public void addRule(String instanceId,final String type,final JSONObject jsonObject) {
-    if (Constants.Name.FONT_FACE.equals(type)) {
-      FontDO fontDO = parseFontDO(jsonObject, mWXRenderManager.getWXSDKInstance(instanceId));
-      if (fontDO != null && !TextUtils.isEmpty(fontDO.getFontFamilyName())) {
-        FontDO cacheFontDO = TypefaceUtil.getFontDO(fontDO.getFontFamilyName());
-        if (cacheFontDO == null || !TextUtils.equals(cacheFontDO.getUrl(), fontDO.getUrl())) {
-          TypefaceUtil.putFontDO(fontDO);
-          TypefaceUtil.loadTypeface(fontDO);
-        } else {
-          TypefaceUtil.loadTypeface(cacheFontDO);
-        }
+  public void executeAction(String instanceId, DOMAction action, boolean createContext) {
+    DOMActionContext context = mDomRegistries.get(instanceId);
+    if(context == null){
+      if(createContext){
+        DOMActionContextImpl oldStatement = new DOMActionContextImpl(instanceId, mWXRenderManager);
+        mDomRegistries.put(instanceId, oldStatement);
+        context = oldStatement;
+      }else{
+        //Instance not existed.
+        return;
       }
     }
-  }
+    action.executeDom(context);
 
-  private FontDO parseFontDO(JSONObject jsonObject,WXSDKInstance instance) {
-    if(jsonObject == null) {
-      return null;
-    }
-    String src = jsonObject.getString(Constants.Name.SRC);
-    String name = jsonObject.getString(Constants.Name.FONT_FAMILY);
-
-    return new FontDO(name, src,instance);
   }
 
   /**
-   * Gets the coordinate information of the control
-   * @param instanceId wxsdkinstance id
-   * @param ref ref
-   * @param callback callback
+   *  @param action
+   * @param createContext only true when create body
    */
-  public void getComponentSize(String instanceId, String ref, JSCallback callback) {
-    if (!isDomThread()) {
-      throw new WXRuntimeException("getComponentSize operation must be done in dom thread");
-    }
-    WXDomStatement statement = mDomRegistries.get(instanceId);
-    if (statement == null) {
-      Map<String, Object> options = new HashMap<>();
-      options.put("result", false);
-      options.put("errMsg", "Component does not exist");
-      callback.invoke(options);
+  public void postAction(String instanceId,DOMAction action, boolean createContext){
+    postActionDelay(instanceId, action, createContext, 0);
+  }
+
+  /**
+   *  @param action
+   * @param createContext only true when create body
+   */
+  public void postActionDelay(String instanceId,DOMAction action,
+                              boolean createContext, long delay){
+    if(action == null){
       return;
     }
-    statement.getComponentSize(ref, callback);
+    Message msg = Message.obtain();
+    msg.what = WXDomHandler.MsgType.WX_EXECUTE_ACTION;
+    WXDomTask task = new WXDomTask();
+    task.instanceId = instanceId;
+    task.args = new ArrayList<>();
+    task.args.add(action);
+    task.args.add(createContext);
+    msg.obj = task;
+    sendMessageDelayed(msg, delay);
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
old mode 100755
new mode 100644
index 9444fa4..192481f
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
@@ -1,227 +1,35 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
 import android.os.Message;
-import android.support.annotation.NonNull;
-import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
-import com.taobao.weex.bridge.SimpleJSCallback;
 import com.taobao.weex.bridge.WXBridgeManager;
 import com.taobao.weex.common.WXModule;
+import com.taobao.weex.dom.action.Action;
+import com.taobao.weex.dom.action.Actions;
 import com.taobao.weex.utils.WXLogUtils;
-import com.taobao.weex.utils.WXViewUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
 
 
 /**
@@ -239,20 +47,20 @@
 
   /** package **/
   // method
-  static final String CREATE_BODY = "createBody";
-  static final String UPDATE_ATTRS = "updateAttrs";
-  static final String UPDATE_STYLE = "updateStyle";
-  static final String REMOVE_ELEMENT = "removeElement";
-  static final String ADD_ELEMENT = "addElement";
-  static final String MOVE_ELEMENT = "moveElement";
-  static final String ADD_EVENT = "addEvent";
-  static final String REMOVE_EVENT = "removeEvent";
-  static final String CREATE_FINISH = "createFinish";
-  static final String REFRESH_FINISH = "refreshFinish";
-  static final String UPDATE_FINISH = "updateFinish";
-  static final String SCROLL_TO_ELEMENT = "scrollToElement";
-  static final String ADD_RULE = "addRule";
-  static final String GET_COMPONENT_RECT = "getComponentRect";
+  public static final String CREATE_BODY = "createBody";
+  public static final String UPDATE_ATTRS = "updateAttrs";
+  public static final String UPDATE_STYLE = "updateStyle";
+  public static final String REMOVE_ELEMENT = "removeElement";
+  public static final String ADD_ELEMENT = "addElement";
+  public static final String MOVE_ELEMENT = "moveElement";
+  public static final String ADD_EVENT = "addEvent";
+  public static final String REMOVE_EVENT = "removeEvent";
+  public static final String CREATE_FINISH = "createFinish";
+  public static final String REFRESH_FINISH = "refreshFinish";
+  public static final String UPDATE_FINISH = "updateFinish";
+  public static final String SCROLL_TO_ELEMENT = "scrollToElement";
+  public static final String ADD_RULE = "addRule";
+  public static final String GET_COMPONENT_RECT = "getComponentRect";
 
   public static final String WXDOM = "dom";
 
@@ -284,91 +92,17 @@
     if (method == null) {
       return null;
     }
+    //TODO:add pooling
     try {
-      switch (method) {
-        case CREATE_BODY:
-          if (args == null) {
-            return null;
-          }
-          createBody((JSONObject) args.get(0));
-          break;
-        case UPDATE_ATTRS:
-          if (args == null) {
-            return null;
-          }
-          updateAttrs((String) args.get(0), (JSONObject) args.get(1));
-          break;
-        case UPDATE_STYLE:
-          if (args == null) {
-            return null;
-          }
-          updateStyle((String) args.get(0), (JSONObject) args.get(1));
-          break;
-        case REMOVE_ELEMENT:
-          if (args == null) {
-            return null;
-          }
-          removeElement((String) args.get(0));
-          break;
-        case ADD_ELEMENT:
-          if (args == null) {
-            return null;
-          }
-          addElement((String) args.get(0), (JSONObject) args.get(1), (Integer) args.get(2));
-          break;
-        case MOVE_ELEMENT:
-          if (args == null) {
-            return null;
-          }
-          moveElement((String) args.get(0), (String) args.get(1), (Integer) args.get(2));
-          break;
-        case ADD_EVENT:
-          if (args == null) {
-            return null;
-          }
-          addEvent((String) args.get(0), (String) args.get(1));
-          break;
-        case REMOVE_EVENT:
-          if (args == null) {
-            return null;
-          }
-          removeEvent((String) args.get(0), (String) args.get(1));
-          break;
-        case CREATE_FINISH:
-          createFinish();
-          break;
-        case REFRESH_FINISH:
-          refreshFinish();
-          break;
-        case UPDATE_FINISH:
-          updateFinish();
-          break;
-        case SCROLL_TO_ELEMENT:
-          if (args == null) {
-            return null;
-          }
-          scrollToElement((String) args.get(0), (JSONObject) args.get(1));
-          break;
-        case ADD_RULE:
-          if (args == null) {
-            return null;
-          }
-          addRule((String) args.get(0), (JSONObject) args.get(1));
-          break;
-        case GET_COMPONENT_RECT:
-          if(args == null){
-            return null;
-          }
-          getComponentRect((String) args.get(0),(String) args.get(1));
-          break;
-        case INVOKE_METHOD:
-          if(args == null){
-            return null;
-          }
-          invokeMethod((String) args.get(0),(String) args.get(1),(JSONArray) args.get(2));
-          break;
+      Action action = Actions.get(method,args);
+      if(action == null){
+        WXLogUtils.e("Unknown dom action.");
       }
-
+      if(action instanceof DOMAction){
+        postAction((DOMAction)action, CREATE_BODY.equals(method));
+      }else {
+        postAction((RenderAction)action);
+      }
     } catch (IndexOutOfBoundsException e) {
       // no enougn args
       e.printStackTrace();
@@ -390,309 +124,18 @@
       return;
     }
 
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    List<Object> msgArgs = new ArrayList<>();
-    msgArgs.add(ref);
-    msgArgs.add(method);
-    msgArgs.add(args);
+    postAction(Actions.getInvokeMethod(ref,method,args),false);
+  }
 
-    task.args = msgArgs;
-    msg.what = WXDomHandler.MsgType.WX_DOM_INVOKE;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
+  public void postAction(RenderAction action){
+    WXSDKManager.getInstance().getWXRenderManager().runOnThread(mWXSDKInstance.getInstanceId(),action);
   }
 
   /**
-   * Create a body for the current {@link com.taobao.weex.WXSDKInstance} according to given
-   * parameter.
-   * @param element info about how to create a body
+   *  @param action
+   * @param createContext only true when create body
    */
-  public void createBody(JSONObject element) {
-    if (element == null) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(element);
-    msg.what = WXDomHandler.MsgType.WX_DOM_CREATE_BODY;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Update attributes
-   * @param ref
-   * @param attr the expected attr
-   */
-  public void updateAttrs(String ref, JSONObject attr) {
-    if (TextUtils.isEmpty(ref) || attr == null || attr.size() < 1) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(attr);
-    msg.what = WXDomHandler.MsgType.WX_DOM_UPDATE_ATTRS;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Update DOM style.
-   * @param ref DOM reference
-   * @param style the expected style
-   */
-  public void updateStyle(String ref, JSONObject style) {
-    if (TextUtils.isEmpty(ref) || style == null || style.size() < 1) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(style);
-    msg.what = WXDomHandler.MsgType.WX_DOM_UPDATE_STYLE;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Remove a node for the node tree.
-   * @param ref reference of the node to be removed.
-   */
-  public void removeElement(String ref) {
-    if (TextUtils.isEmpty(ref)) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    msg.what = WXDomHandler.MsgType.WX_DOM_REMOVE_DOM;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Add a {@link WXDomObject} to the specified parent as its given n-th child.
-   * @param parentRef reference of the parent.
-   * @param element the node to be added
-   * @param index the expected index that the new dom in its new parent
-   */
-  public void addElement(String parentRef, JSONObject element, Integer index) {
-    if (element == null
-        || TextUtils.isEmpty(parentRef)) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(parentRef);
-    task.args.add(element);
-    task.args.add(index);
-    msg.what = WXDomHandler.MsgType.WX_DOM_ADD_DOM;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Move the DomElement to the specified parent as its given n-th child.
-   * @param ref reference of the node to be moved.
-   * @param parentRef reference of the parent.
-   * @param index the expected index that the dom in its new parent
-   */
-  public void moveElement(String ref, String parentRef, Integer index) {
-    if (TextUtils.isEmpty(ref)
-        || TextUtils.isEmpty(parentRef)) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(parentRef);
-    task.args.add(index);
-    msg.what = WXDomHandler.MsgType.WX_DOM_MOVE_DOM;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Add eventListener for the specified {@link WXDomObject}
-   * @param ref reference of the node
-   * @param type the type of the event listener to be added.
-   */
-  public void addEvent(String ref, String type) {
-    if (TextUtils.isEmpty(ref) || TextUtils.isEmpty(type)) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(type);
-    msg.what = WXDomHandler.MsgType.WX_DOM_ADD_EVENT;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Remove eventListener for the specified {@link WXDomObject}
-   * @param ref reference of the node
-   * @param type the type of the event listener to be removed.
-   */
-  public void removeEvent(String ref, String type) {
-    if (TextUtils.isEmpty(ref) || TextUtils.isEmpty(type)) {
-      return;
-    }
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(type);
-    msg.what = WXDomHandler.MsgType.WX_DOM_REMOVE_EVENT;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Notify the {@link WXDomManager} that creation of dom tree is finished.
-   * This notify is given by JS.
-   */
-  public void createFinish() {
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    msg.what = WXDomHandler.MsgType.WX_DOM_CREATE_FINISH;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * Notify the {@link WXDomManager} that refreshing of dom tree is finished.
-   * This notify is given by JS.
-   */
-  public void refreshFinish() {
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    msg.what = WXDomHandler.MsgType.WX_DOM_REFRESH_FINISH;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  public void updateFinish() {
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    msg.what = WXDomHandler.MsgType.WX_DOM_UPDATE_FINISH;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-
-  /**
-   * Scroll the specified {@link WXDomObject} to given offset in given duration
-   * @param ref reference of specified dom object
-   * @param options scroll option, like {offset:0, duration:300}
-   */
-  public void scrollToElement(String ref, JSONObject options) {
-    if (TextUtils.isEmpty(ref) || options == null) {
-      return;
-    }
-
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(ref);
-    task.args.add(options);
-    msg.what = WXDomHandler.MsgType.WX_DOM_SCROLLTO;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  public void addRule(String type, JSONObject options) {
-    if (TextUtils.isEmpty(type) || options == null) {
-      return;
-    }
-
-    Message msg = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = mWXSDKInstance.getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(type);
-    task.args.add(options);
-    msg.what = WXDomHandler.MsgType.WX_DOM_ADD_RULE;
-    msg.obj = task;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-  }
-
-  /**
-   * By ref the width and height of the component.
-   *
-   * @param ref      the refer of component
-   * @param callback function id
-   */
-  public void getComponentRect(String ref, String callback) {
-    if (mWXSDKInstance == null) {
-      return;
-    }
-    SimpleJSCallback jsCallback = new SimpleJSCallback(mWXSDKInstance.getInstanceId(), callback);
-    if (TextUtils.isEmpty(ref)) {
-      Map<String, Object> options = new HashMap<>();
-      options.put("result", false);
-      options.put("errMsg", "Illegal parameter");
-      jsCallback.invoke(options);
-      return;
-    } else if ("viewport".equalsIgnoreCase(ref)) {
-      if (mWXSDKInstance.getContainerView() != null) {
-        Map<String, Object> options = new HashMap<>();
-        Map<String, String> sizes = new HashMap<>();
-        int[] location = new int[2];
-        mWXSDKInstance.getContainerView().getLocationOnScreen(location);
-        sizes.put("left", "0");
-        sizes.put("top", "0");
-        sizes.put("right", getWebPxValue(mWXSDKInstance.getContainerView().getWidth()));
-        sizes.put("bottom", getWebPxValue(mWXSDKInstance.getContainerView().getHeight()));
-        sizes.put("width", getWebPxValue(mWXSDKInstance.getContainerView().getWidth()));
-        sizes.put("height", getWebPxValue(mWXSDKInstance.getContainerView().getHeight()));
-        options.put("size", sizes);
-        options.put("result", true);
-        jsCallback.invoke(options);
-      } else {
-        Map<String, Object> options = new HashMap<>();
-        options.put("result", false);
-        options.put("errMsg", "Component does not exist");
-        jsCallback.invoke(options);
-      }
-    } else {
-      Message msg = Message.obtain();
-      WXDomTask task = new WXDomTask();
-      task.instanceId = mWXSDKInstance.getInstanceId();
-      task.args = new ArrayList<>();
-      task.args.add(ref);
-      task.args.add(jsCallback);
-      msg.what = WXDomHandler.MsgType.WX_COMPONENT_SIZE;
-      msg.obj = task;
-      WXSDKManager.getInstance().getWXDomManager().sendMessage(msg);
-    }
-  }
-
-  @NonNull
-  private String getWebPxValue(int value) {
-    return String.valueOf(WXViewUtils.getWebPxByWidth(value,mWXSDKInstance.getViewPortWidth()));
+  public void postAction(DOMAction action, boolean createContext){
+    WXSDKManager.getInstance().getWXDomManager().postAction(mWXSDKInstance.getInstanceId(),action,createContext);
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
old mode 100755
new mode 100644
index 6fb4a02..641c95a
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -212,6 +26,8 @@
 import com.alibaba.fastjson.JSONObject;
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.bridge.WXValidateProcessor;
 import com.taobao.weex.common.Constants;
 import com.taobao.weex.dom.flex.CSSLayoutContext;
 import com.taobao.weex.dom.flex.CSSNode;
@@ -240,6 +56,10 @@
   public static final String ROOT = "_root";
   public static final String TRANSFORM = "transform";
   public static final String TRANSFORM_ORIGIN = "transformOrigin";
+  static final WXDomObject DESTROYED = new WXDomObject();
+  static{
+    DESTROYED.mRef = "_destroyed";
+  }
   private AtomicBoolean sDestroy = new AtomicBoolean();
 
   private int mViewPortWidth =750;
@@ -266,7 +86,7 @@
 
   private boolean mYoung = false;
 
-  /** package **/ void traverseTree(Consumer...consumers){
+  public void traverseTree(Consumer...consumers){
     if (consumers == null) {
       return;
     }
@@ -612,6 +432,7 @@
 
   /** package **/ void applyStyleToNode() {
     WXStyle stylesMap = getStyles();
+    int vp = getViewPortWidth();
     if (!stylesMap.isEmpty()) {
       for(Map.Entry<String,Object> item:stylesMap.entrySet()) {
         switch (item.getKey()) {
@@ -634,84 +455,84 @@
             setWrap(stylesMap.getCSSWrap());
             break;
           case Constants.Name.MIN_WIDTH:
-            setMinWidth(WXViewUtils.getRealPxByWidth(stylesMap.getMinWidth(),getViewPortWidth()));
+            setMinWidth(WXViewUtils.getRealPxByWidth(stylesMap.getMinWidth(vp),vp));
             break;
           case Constants.Name.MIN_HEIGHT:
-            setMinHeight(WXViewUtils.getRealPxByWidth(stylesMap.getMinHeight(),getViewPortWidth()));
+            setMinHeight(WXViewUtils.getRealPxByWidth(stylesMap.getMinHeight(vp),vp));
             break;
           case Constants.Name.MAX_WIDTH:
-            setMaxWidth(WXViewUtils.getRealPxByWidth(stylesMap.getMaxWidth(),getViewPortWidth()));
+            setMaxWidth(WXViewUtils.getRealPxByWidth(stylesMap.getMaxWidth(vp),vp));
             break;
           case Constants.Name.MAX_HEIGHT:
-            setMaxHeight(WXViewUtils.getRealPxByWidth(stylesMap.getMaxHeight(),getViewPortWidth()));
+            setMaxHeight(WXViewUtils.getRealPxByWidth(stylesMap.getMaxHeight(vp),vp));
             break;
           case Constants.Name.DEFAULT_HEIGHT:
           case Constants.Name.HEIGHT:
-            setStyleHeight(WXViewUtils.getRealPxByWidth(stylesMap.containsKey(Constants.Name.HEIGHT)?stylesMap.getHeight():stylesMap.getDefaultHeight(),getViewPortWidth()));
+            setStyleHeight(WXViewUtils.getRealPxByWidth(stylesMap.containsKey(Constants.Name.HEIGHT)?stylesMap.getHeight(vp):stylesMap.getDefaultHeight(),vp));
             break;
           case Constants.Name.WIDTH:
           case Constants.Name.DEFAULT_WIDTH:
-            setStyleWidth(WXViewUtils.getRealPxByWidth(stylesMap.containsKey(Constants.Name.WIDTH)?stylesMap.getWidth():stylesMap.getDefaultWidth(),getViewPortWidth()));
+            setStyleWidth(WXViewUtils.getRealPxByWidth(stylesMap.containsKey(Constants.Name.WIDTH)?stylesMap.getWidth(vp):stylesMap.getDefaultWidth(),vp));
             break;
           case Constants.Name.POSITION:
             setPositionType(stylesMap.getPosition());
             break;
           case Constants.Name.LEFT:
-            setPositionLeft(WXViewUtils.getRealPxByWidth(stylesMap.getLeft(),getViewPortWidth()));
+            setPositionLeft(WXViewUtils.getRealPxByWidth(stylesMap.getLeft(vp),vp));
             break;
           case Constants.Name.TOP:
-            setPositionTop(WXViewUtils.getRealPxByWidth(stylesMap.getTop(),getViewPortWidth()));
+            setPositionTop(WXViewUtils.getRealPxByWidth(stylesMap.getTop(vp),vp));
             break;
           case Constants.Name.RIGHT:
-            setPositionRight(WXViewUtils.getRealPxByWidth(stylesMap.getRight(),getViewPortWidth()));
+            setPositionRight(WXViewUtils.getRealPxByWidth(stylesMap.getRight(vp),vp));
             break;
           case Constants.Name.BOTTOM:
-            setPositionBottom(WXViewUtils.getRealPxByWidth(stylesMap.getBottom(),getViewPortWidth()));
+            setPositionBottom(WXViewUtils.getRealPxByWidth(stylesMap.getBottom(vp),vp));
             break;
           case Constants.Name.MARGIN:
-            setMargin(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getMargin(),getViewPortWidth()));
+            setMargin(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getMargin(vp), vp));
             break;
           case Constants.Name.MARGIN_LEFT:
-            setMargin(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getMarginLeft(),getViewPortWidth()));
+            setMargin(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getMarginLeft(vp), vp));
             break;
           case Constants.Name.MARGIN_TOP:
-            setMargin(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getMarginTop(),getViewPortWidth()));
+            setMargin(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getMarginTop(vp), vp));
             break;
           case Constants.Name.MARGIN_RIGHT:
-            setMargin(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getMarginRight(),getViewPortWidth()));
+            setMargin(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getMarginRight(vp), vp));
             break;
           case Constants.Name.MARGIN_BOTTOM:
-            setMargin(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getMarginBottom(),getViewPortWidth()));
+            setMargin(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getMarginBottom(vp), vp));
             break;
           case Constants.Name.BORDER_WIDTH:
-            setBorder(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getBorderWidth(),getViewPortWidth()));
+            setBorder(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getBorderWidth(vp), vp));
             break;
           case Constants.Name.BORDER_TOP_WIDTH:
-            setBorder(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getBorderTopWidth(),getViewPortWidth()));
+            setBorder(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getBorderTopWidth(vp), vp));
             break;
           case Constants.Name.BORDER_RIGHT_WIDTH:
-            setBorder(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getBorderRightWidth(),getViewPortWidth()));
+            setBorder(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getBorderRightWidth(vp), vp));
             break;
           case Constants.Name.BORDER_BOTTOM_WIDTH:
-            setBorder(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getBorderBottomWidth(),getViewPortWidth()));
+            setBorder(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getBorderBottomWidth(vp), vp));
             break;
           case Constants.Name.BORDER_LEFT_WIDTH:
-            setBorder(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getBorderLeftWidth(),getViewPortWidth()));
+            setBorder(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getBorderLeftWidth(vp), vp));
             break;
           case Constants.Name.PADDING:
-            setPadding(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getPadding(),getViewPortWidth()));
+            setPadding(Spacing.ALL, WXViewUtils.getRealPxByWidth(stylesMap.getPadding(vp), vp));
             break;
           case Constants.Name.PADDING_LEFT:
-            setPadding(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingLeft(),getViewPortWidth()));
+            setPadding(Spacing.LEFT, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingLeft(vp), vp));
             break;
           case Constants.Name.PADDING_TOP:
-            setPadding(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingTop(),getViewPortWidth()));
+            setPadding(Spacing.TOP, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingTop(vp), vp));
             break;
           case Constants.Name.PADDING_RIGHT:
-            setPadding(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingRight(),getViewPortWidth()));
+            setPadding(Spacing.RIGHT, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingRight(vp), vp));
             break;
           case Constants.Name.PADDING_BOTTOM:
-            setPadding(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingBottom(),getViewPortWidth()));
+            setPadding(Spacing.BOTTOM, WXViewUtils.getRealPxByWidth(stylesMap.getPaddingBottom(vp), vp));
             break;
         }
       }
@@ -812,9 +633,28 @@
       }
 
       String type = (String) json.get(TYPE);
+
+      if (wxsdkInstance.isNeedValidate()) {
+        WXValidateProcessor processor = WXSDKManager.getInstance()
+                .getValidateProcessor();
+        if (processor != null) {
+          WXValidateProcessor.WXComponentValidateResult result = processor
+                  .onComponentValidate(wxsdkInstance, type);
+          if (result != null && !result.isSuccess) {
+            type = TextUtils.isEmpty(result.replacedComponent) ? WXBasicComponentType.DIV
+                    : result.replacedComponent;
+            json.put(TYPE, type);
+            if(WXEnvironment.isApkDebugable()&&result.validateInfo!=null){
+              String tag = "[WXDomObject]onComponentValidate failure. >>> "+result.validateInfo.toJSONString();
+              WXLogUtils.e(tag);
+            }
+          }
+        }
+      }
+
       WXDomObject domObject = WXDomObjectFactory.newInstance(type);
 
-      domObject.setViewPortWidth(wxsdkInstance.getViewPortWidth());
+      domObject.setViewPortWidth(wxsdkInstance.getInstanceViewPortWidth());
 
       if(domObject == null){
         return null;
@@ -834,7 +674,7 @@
       return domObject;
   }
 
-  interface Consumer{
+  public interface Consumer{
     void accept(WXDomObject dom);
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObjectFactory.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObjectFactory.java
old mode 100755
new mode 100644
index c4e0e99..77bd8dd
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObjectFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObjectFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomRegistry.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomRegistry.java
old mode 100755
new mode 100644
index 2c79816..df495a8
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomRegistry.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomRegistry.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
deleted file mode 100755
index 4fd29be..0000000
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomStatement.java
+++ /dev/null
@@ -1,1272 +0,0 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-package com.taobao.weex.dom;
-
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.util.ArrayMap;
-import android.text.TextUtils;
-import android.util.Pair;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.taobao.weex.WXEnvironment;
-import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.WXSDKManager;
-import com.taobao.weex.adapter.IWXUserTrackAdapter;
-import com.taobao.weex.bridge.JSCallback;
-import com.taobao.weex.common.Constants;
-import com.taobao.weex.common.WXErrorCode;
-import com.taobao.weex.dom.flex.CSSLayoutContext;
-import com.taobao.weex.dom.flex.CSSNode;
-import com.taobao.weex.dom.flex.Spacing;
-import com.taobao.weex.ui.IWXRenderTask;
-import com.taobao.weex.ui.WXRenderManager;
-import com.taobao.weex.ui.animation.WXAnimationBean;
-import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.ui.component.WXVContainer;
-import com.taobao.weex.utils.WXLogUtils;
-import com.taobao.weex.utils.WXViewUtils;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * <p>
- * This class is responsible for creating command object of DOM operation and
- * invoking command of corresponding object.
- * </p>
- * <p>
- * In the command design pattern,
- * this class acts as the <strong>invoker </strong>in the command pattern
- * despite that it is also responsible for creating <strong>Command</strong> object.
- * And,{@link IWXRenderTask} works as the <strong>Command</strong>
- * {@link WXDomManager} works as the <strong>Client</strong>
- * {@link WXRenderManager} works as the <strong>Receiver</strong>.
- * </p>
- * <p>
- * There exists one to one correspondence between WXDomStatement and WXInstance,
- * and {@link WXDomManager} is responsible for manage the relation of correspondence.
- * </p>
- */
-class WXDomStatement {
-  /** package **/ final ConcurrentHashMap<String, WXDomObject> mRegistry;
-  private WXDomObject.Consumer mAddDOMConsumer;
-  private String mInstanceId;
-  private WXRenderManager mWXRenderManager;
-  private ArrayList<IWXRenderTask> mNormalTasks;
-  private Set <Pair<String, Map<String, Object>>> animations;
-  private CSSLayoutContext mLayoutContext;
-  private volatile boolean mDirty;
-  private boolean mDestroy;
-  private Map<String, AddDomInfo> mAddDom = new HashMap<>();
-
-  /**
-   * Create an instance of {@link WXDomStatement},
-   * One {@link WXSDKInstance} corresponding to one and only one {@link WXDomStatement}.
-   * And all the instance of {@link WXDomManager} share the same {@link WXRenderManager}.
-   * @param instanceId the id of the {@link WXSDKInstance}.
-   *                   One {@link WXSDKInstance} corresponding to one {@link WXDomStatement},
-   *                   and vice versa.
-   * @param renderManager This acts as the Receiver of the command pattern
-   */
-  public WXDomStatement(String instanceId, WXRenderManager renderManager) {
-    mDestroy = false;
-    mInstanceId = instanceId;
-    mLayoutContext = new CSSLayoutContext();
-    mRegistry = new ConcurrentHashMap<>();
-    mNormalTasks = new ArrayList<>();
-    animations = new LinkedHashSet<>();
-    mWXRenderManager = renderManager;
-    mAddDOMConsumer = new AddDOMConsumer(mRegistry);
-  }
-
-  /**
-   * Destroy current instance, which occurred when {@link WXSDKInstance#destroy()} is called.
-   */
-  public void destroy() {
-    mDestroy = true;
-    mRegistry.clear();
-    mAddDOMConsumer = null;
-    mNormalTasks.clear();
-    mAddDom.clear();
-    mLayoutContext = null;
-    mWXRenderManager = null;
-    animations.clear();
-  }
-
-  /**
-   * Rebuild the component tree.
-   * The purpose of this method is moving fixed components to the root component.
-   * This method will be called when {@link #batch()} is executed.
-   * @param root root dom
-   */
-  void rebuildingFixedDomTree(WXDomObject root) {
-    if (root != null && root.getFixedStyleRefs() != null) {
-      int size = root.getFixedStyleRefs().size();
-      for (int i = 0; i < size; i++) {
-        String fixedRef = root.getFixedStyleRefs().get(i);
-        WXDomObject wxDomObject = mRegistry.get(fixedRef);
-        if (wxDomObject!=null && wxDomObject.parent != null) {
-          wxDomObject.parent.remove(wxDomObject);
-          root.add(wxDomObject, -1);
-        }
-      }
-    }
-
-  }
-
-  /**
-   * Batch the execution of command objects and execute all the command objects created other
-   * places, e.g. call {@link IWXRenderTask#execute()}.
-   * First, it will rebuild the dom tree and do pre layout staff.
-   * Then call {@link com.taobao.weex.dom.flex.CSSNode#calculateLayout(CSSLayoutContext)} to
-   * start calculate layout.
-   * Next, call {@link ApplyUpdateConsumer} to get changed dom and creating
-   * corresponding command object.
-   * Finally, walk through the queue, e.g. call {@link IWXRenderTask#execute()} for every task
-   * in the queue.
-   */
-  void batch() {
-
-    if (!mDirty || mDestroy) {
-      return;
-    }
-
-    WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT);
-    layout(rootDom);
-  }
-
-  void layout(WXDomObject rootDom) {
-    if (rootDom == null) {
-      return;
-    }
-    long start0 = System.currentTimeMillis();
-
-    rebuildingFixedDomTree(rootDom);
-
-    rootDom.traverseTree( new WXDomObject.Consumer() {
-      @Override
-      public void accept(WXDomObject dom) {
-        if (!dom.hasUpdate() || mDestroy) {
-          return;
-        }
-        dom.layoutBefore();
-      }
-    });
-    long start = System.currentTimeMillis();
-
-
-    rootDom.calculateLayout(mLayoutContext);
-
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    if (instance != null) {
-      instance.cssLayoutTime(System.currentTimeMillis() - start);
-    }
-
-    rootDom.traverseTree( new WXDomObject.Consumer() {
-      @Override
-      public void accept(WXDomObject dom) {
-        if (!dom.hasUpdate() || mDestroy) {
-          return;
-        }
-        dom.layoutAfter();
-      }
-    });
-
-    start = System.currentTimeMillis();
-    rootDom.traverseTree(new ApplyUpdateConsumer());
-
-    if (instance != null) {
-      instance.applyUpdateTime(System.currentTimeMillis() - start);
-    }
-
-    start = System.currentTimeMillis();
-    updateDomObj();
-    if (instance != null) {
-      instance.updateDomObjTime(System.currentTimeMillis() - start);
-    }
-    parseAnimation();
-
-    int count = mNormalTasks.size();
-    for (int i = 0; i < count && !mDestroy; ++i) {
-      mWXRenderManager.runOnThread(mInstanceId, mNormalTasks.get(i));
-    }
-    mNormalTasks.clear();
-    mAddDom.clear();
-    animations.clear();
-    mDirty = false;
-    if (instance != null) {
-      instance.batchTime(System.currentTimeMillis() - start0);
-    }
-  }
-
-  class ApplyUpdateConsumer implements WXDomObject.Consumer{
-
-    @Override
-    public void accept(WXDomObject dom) {
-      if (dom.hasUpdate()) {
-        dom.markUpdateSeen();
-        if (!dom.isYoung()) {
-          final WXDomObject copy = dom.clone();
-          if (copy == null) {
-            return;
-          }
-          mNormalTasks.add(new IWXRenderTask() {
-
-            @Override
-            public void execute() {
-              mWXRenderManager.setLayout(mInstanceId, copy.getRef(), copy);
-              if(copy.getExtra() != null) {
-                mWXRenderManager.setExtra(mInstanceId, copy.getRef(), copy.getExtra());
-              }
-            }
-
-            @Override
-            public String toString() {
-              return "setLayout & setExtra";
-            }
-          });
-        }
-      }
-    }
-  }
-
-  private void parseAnimation() {
-    for(final Pair<String, Map<String, Object>> pair:animations) {
-      if (!TextUtils.isEmpty(pair.first)) {
-        final WXAnimationBean animationBean = createAnimationBean(pair.first, pair.second);
-        if (animationBean != null) {
-          mNormalTasks.add(new IWXRenderTask() {
-            @Override
-            public void execute() {
-              mWXRenderManager.startAnimation(mInstanceId, pair.first, animationBean, null);
-            }
-
-            @Override
-            public String toString() {
-              return "startAnimationByStyle";
-            }
-          });
-        }
-      }
-    }
-  }
-
-  /**
-   * Create command object for creating body according to the JSONObject. And put the command
-   * object in the queue.
-   * @param dom the jsonObject according to which to create command object.
-   */
-  void createBody(JSONObject dom) {
-    addDomInternal(dom,true,null,-1);
-  }
-
-  private class CreateBodyTask implements IWXRenderTask {
-    final WXComponent mComponent;
-
-    CreateBodyTask(WXComponent component) {
-      mComponent = component;
-    }
-
-    @Override
-    public void execute() {
-      WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-      if (instance == null || instance.getContext() == null) {
-        WXLogUtils.e("instance is null or instance is destroy!");
-        return;
-      }
-      try {
-        mWXRenderManager.createBody(mInstanceId, mComponent);
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-      } catch (Exception e) {
-        WXLogUtils.e("create body failed.", e);
-      }
-    }
-
-    @Override
-    public String toString() {
-      return "createBody";
-    }
-  }
-
-  /**
-   * Update all components' dom info stored in {@link #mAddDom}
-   */
-  private void updateDomObj() {
-    long start = System.currentTimeMillis();
-    Iterator<Map.Entry<String, AddDomInfo>> iterator = mAddDom.entrySet().iterator();
-    Map.Entry<String, AddDomInfo> entry;
-    AddDomInfo value;
-    while (iterator.hasNext()) {
-      entry = iterator.next();
-      value = entry.getValue();
-      updateDomObj(value.component);
-    }
-    if (WXEnvironment.isApkDebugable()) {
-      WXLogUtils.d("updateDomObj", "time:" + (System.currentTimeMillis() - start));
-    }
-  }
-
-  /**
-   * Update the specified component's dom and mark it as old.
-   * @param component the component to be updated
-   */
-  private void updateDomObj(WXComponent component) {
-    if (component == null) {
-      return;
-    }
-    WXDomObject domObject = mRegistry.get(component.getRef());
-    if (domObject == null) {
-      return;
-    }
-    domObject.old();
-    component.updateDom(domObject);
-    if (component instanceof WXVContainer) {
-      WXVContainer container = (WXVContainer) component;
-      int count = container.childCount();
-      for (int i = 0; i < count; ++i) {
-        updateDomObj(container.getChild(i));
-      }
-    }
-  }
-
-  void invokeMethod(String ref, String method, JSONArray args){
-    if(mDestroy){
-      return;
-    }
-    WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId, ref);
-    if(comp == null){
-      WXLogUtils.e("DomStatement","target component not found.");
-      return;
-    }
-    comp.invoke(method,args);
-  }
-
-  /**
-   * Add DOM node.
-   * @param dom
-   * @param isRoot
-   * @param parentRef
-   * @param index
-   */
-  private void addDomInternal(JSONObject dom,boolean isRoot, String parentRef, final int index){
-    if (mDestroy) {
-      return;
-    }
-
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    if (instance == null) {
-      return;
-    }
-    WXErrorCode errCode = isRoot ? WXErrorCode.WX_ERR_DOM_CREATEBODY : WXErrorCode.WX_ERR_DOM_ADDELEMENT;
-    if (dom == null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
-    }
-
-    //only non-root has parent.
-    WXDomObject parent;
-    WXDomObject domObject = WXDomObject.parse(dom,instance);
-
-    if (domObject == null || mRegistry.containsKey(domObject.getRef())) {
-      if (WXEnvironment.isApkDebugable()) {
-        WXLogUtils.e("[WXDomStatement] " + (isRoot ? "createBody" : "addDom") + " error,DOM object is null or already registered!!");
-      }
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
-      return;
-    }
-    if (isRoot) {
-      WXDomObject.prepareRoot(domObject,
-                              WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexHeight(mInstanceId),WXSDKManager.getInstanceViewPortWidth(mInstanceId)),
-                              WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexWidth(mInstanceId),WXSDKManager.getInstanceViewPortWidth(mInstanceId)));
-    } else if ((parent = mRegistry.get(parentRef)) == null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
-      return;
-    } else {
-      //non-root and parent exist
-      parent.add(domObject, index);
-    }
-
-    domObject.traverseTree(
-        mAddDOMConsumer,
-        ApplyStyleConsumer.getInstance()
-                          );
-
-    //Create component in dom thread
-    WXComponent component = isRoot ?
-                            mWXRenderManager.createBodyOnDomThread(mInstanceId, domObject) :
-                            mWXRenderManager.createComponentOnDomThread(mInstanceId, domObject, parentRef, index);
-    if (component == null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
-      //stop redner, some fatal happened.
-      return;
-    }
-    AddDomInfo addDomInfo = new AddDomInfo();
-    addDomInfo.component = component;
-    mAddDom.put(domObject.getRef(), addDomInfo);
-
-    IWXRenderTask task = isRoot ? new CreateBodyTask(component) : new AddDOMTask(component, parentRef, index);
-    mNormalTasks.add(task);
-    addAnimationForDomTree(domObject);
-    mDirty = true;
-
-    instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-  }
-
-  /**
-   * Create a command object for adding a dom node to its parent in a specific location.
-   * If dom's parent doesn't exist or the dom has been added in current {@link WXSDKInstance},
-   * this method will return.
-   * If the above request is met, then put the command object in the queue.
-   * @param dom the dom object in the form of JSONObject
-   * @param parentRef parent to which the dom is added.
-   * @param index the location of which the dom is added.
-   */
-  void addDom(JSONObject dom, final String parentRef, final int index) {
-    addDomInternal(dom,false,parentRef,index);
-  }
-
-  private class AddDOMTask implements IWXRenderTask {
-    final WXComponent mComponent;
-    final String mParentRef;
-    final int mIndex;
-    AddDOMTask(WXComponent comp,String parentRef,int index){
-      mComponent = comp;
-      mParentRef = parentRef;
-      mIndex = index;
-    }
-
-    @Override
-    public void execute() {
-      WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-      if(instance == null || instance.getContext()== null) {
-        WXLogUtils.e("instance is null or instance is destroy!");
-        return;
-      }
-      try {
-        mWXRenderManager.addComponent(mInstanceId, mComponent, mParentRef, mIndex);
-      }catch (Exception e){
-        WXLogUtils.e("add component failed.", e);
-      }
-    }
-
-    @Override
-    public String toString() {
-      return "AddDom";
-    }
-  }
-
-  /**
-   * Create a command object for moving the specific {@link WXDomObject} to a new parent.
-   * If any of the following situation is met,
-   * <ul>
-   * <li> dom to be moved is null </li>
-   * <li> dom's parent is null </li>
-   * <li> new parent is null </li>
-   * <li> parent is under {@link CSSNode#hasNewLayout()} </li>
-   * </ul>
-   * this method will return. Otherwise, put the command object in the queue.
-   * @param ref Reference of the dom to be moved.
-   * @param parentRef Reference of the new parent DOM node
-   * @param index the index of the dom to be inserted in the new parent.
-   */
-  void moveDom(final String ref, final String parentRef, int index) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    WXDomObject domObject = mRegistry.get(ref);
-    WXDomObject parentObject = mRegistry.get(parentRef);
-    if (domObject == null || domObject.parent == null
-        || parentObject == null || parentObject.hasNewLayout()) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_MOVEELEMENT);
-      }
-      return;
-    }
-    if (domObject.parent.equals(parentObject)) {
-      if(parentObject.index(domObject) == index) {
-        return;
-      } else if(domObject.parent.index(domObject)<index){
-        index = index -1;
-      }
-    }
-
-    final int newIndex = index;
-    domObject.parent.remove(domObject);
-    parentObject.add(domObject, newIndex);
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.moveComponent(mInstanceId, ref, parentRef, newIndex);
-      }
-
-      @Override
-      public String toString() {
-        return "moveDom";
-      }
-    });
-
-    mDirty = true;
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for removing the specified {@link WXDomObject}.
-   * If the domObject is null or its parent is null, this method returns directly.
-   * Otherwise, put the command object in the queue.
-   * @param ref Reference of the dom.
-   */
-  void removeDom(final String ref) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT);
-      }
-      return;
-    }
-    WXDomObject parent = domObject.parent;
-    if (parent == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT);
-      }
-      return;
-    }
-    domObject.traverseTree(new WXDomObject.Consumer() {
-      @Override
-      public void accept(WXDomObject dom) {
-        mRegistry.remove(dom.getRef());
-      }
-    });
-    parent.remove(domObject);
-    mRegistry.remove(ref);
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.removeComponent(mInstanceId, ref);
-      }
-
-      @Override
-      public String toString() {
-        return "removeDom";
-      }
-    });
-
-    mDirty = true;
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Update the attributes according to the given attribute. Then creating a
-   * command object for updating corresponding view and put the command object in the queue.
-   * @param ref Reference of the dom.
-   * @param attrs the new style. This style is only a part of the full attribute set, and will be
-   *              merged into attributes
-   * @see #updateStyle(String, JSONObject)
-   */
-  void updateAttrs(String ref, final JSONObject attrs) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    final WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_UPDATEATTRS);
-      }
-      return;
-    }
-
-    domObject.updateAttr(attrs);
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.updateAttrs(mInstanceId, domObject.getRef(), attrs);
-      }
-
-      @Override
-      public String toString() {
-        return "updateAttr";
-      }
-    });
-    mDirty = true;
-
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Update styles according to the given style. Then creating a
-   * command object for updating corresponding view and put the command object in the queue.
-   * @param ref Reference of the dom.
-   * @param style the new style. This style is only a part of the full style, and will be merged
-   *              into styles
-   * @param byPesudo updateStyle by pesduo class
-   * @see #updateAttrs(String, JSONObject)
-   */
-  void updateStyle(String ref, JSONObject style, boolean byPesudo) {
-    if (mDestroy || style == null) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_UPDATESTYLE);
-      }
-      return;
-    }
-
-    Map<String, Object> animationMap= new ArrayMap<>(2);
-    animationMap.put(WXDomObject.TRANSFORM, style.remove(WXDomObject.TRANSFORM));
-    animationMap.put(WXDomObject.TRANSFORM_ORIGIN, style.remove(WXDomObject.TRANSFORM_ORIGIN));
-    animations.add(new Pair<>(ref, animationMap));
-
-    if(!style.isEmpty()){
-      domObject.updateStyle(style, byPesudo);
-      domObject.traverseTree(ApplyStyleConsumer.getInstance());
-      updateStyle(domObject, style);
-    }
-    mDirty = true;
-
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create the command object for updating style and put it the queue. If the given style
-   * contains border-width and padding that will affect layout, then a command object for reset
-   * padding will also be created.
-   * @param domObject the given dom object
-   * @param update the given style.
-   */
-  private void updateStyle(final WXDomObject domObject, final Map<String, Object> update) {
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.updateStyle(mInstanceId, domObject.getRef(), update);
-      }
-
-      @Override
-      public String toString() {
-        return "updateStyle";
-      }
-    });
-    if (update.containsKey(Constants.Name.PADDING) ||
-        update.containsKey(Constants.Name.PADDING_TOP) ||
-        update.containsKey(Constants.Name.PADDING_LEFT) ||
-        update.containsKey(Constants.Name.PADDING_RIGHT) ||
-        update.containsKey(Constants.Name.PADDING_BOTTOM) ||
-        update.containsKey(Constants.Name.BORDER_WIDTH)) {
-      mNormalTasks.add(new IWXRenderTask() {
-
-        @Override
-        public void execute() {
-          Spacing padding = domObject.getPadding();
-          Spacing border = domObject.getBorder();
-          mWXRenderManager.setPadding(mInstanceId, domObject.getRef(), padding, border);
-        }
-
-        @Override
-        public String toString() {
-          return "setPadding";
-        }
-      });
-    }
-  }
-
-  /**
-   * Create a command object for adding a default event listener to the corresponding {@link
-   * WXDomObject} and put the command object in the queue.
-   * When the event is triggered, the eventListener will call {@link WXSDKManager#fireEvent(String, String, String)}
-   * , and the JS will handle all the operations from there.
-   *
-   * @param ref Reference of the dom.
-   * @param type the type of the event, this may be a plain event defined in
-   * {@link com.taobao.weex.common.Constants.Event} or a gesture defined in {@link com.taobao
-   * .weex.ui.view.gesture.WXGestureType}
-   */
-  void addEvent(final String ref, final String type) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    final WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_ADDEVENT);
-      }
-      return;
-    }
-    domObject.addEvent(type);
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId,ref);
-        if(comp != null){
-          //sync dom change to component
-          comp.updateDom(domObject);
-          mWXRenderManager.addEvent(mInstanceId, ref, type);
-        }
-      }
-
-      @Override
-      public String toString() {
-        return "Add event";
-      }
-    });
-
-    mDirty = true;
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for removing the event listener of the corresponding {@link
-   * WXDomObject} and put the command event in the queue.
-   * @param ref Reference of the dom.
-   * @param type the type of the event, this may be a plain event defined in
-   * {@link com.taobao.weex.common.Constants.Event} or a gesture defined in {@link com.taobao
-   * .weex.ui.view.gesture.WXGestureType}
-   */
-  void removeEvent(final String ref, final String type) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    final WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      if (instance != null) {
-        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEEVENT);
-      }
-      return;
-    }
-    domObject.removeEvent(type);
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        WXComponent comp = mWXRenderManager.getWXComponent(mInstanceId,ref);
-        if(comp != null){
-          //sync dom change to component
-          comp.updateDom(domObject);
-          mWXRenderManager.removeEvent(mInstanceId, ref, type);
-        }
-
-      }
-
-      @Override
-      public String toString() {
-        return "removeEvent";
-      }
-    });
-
-    mDirty = true;
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for scroll the given view to the specified position.
-   * @param ref Reference of the dom.
-   * @param options the specified position
-   */
-  void scrollToDom(final String ref, final JSONObject options) {
-    if (mDestroy) {
-      return;
-    }
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.scrollToComponent(mInstanceId, ref, options);
-      }
-
-      @Override
-      public String toString() {
-        return "scrollToPosition";
-      }
-    });
-
-    mDirty = true;
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for notifying {@link WXRenderManager} that the process of creating
-   * given view is finished, and put the command object in the queue.
-   */
-  void createFinish() {
-    if (mDestroy) {
-      return;
-    }
-
-    final WXDomObject root = mRegistry.get(WXDomObject.ROOT);
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.createFinish(mInstanceId,
-                                      (int) root.getLayoutWidth(),
-                                      (int) root.getLayoutHeight());
-      }
-
-      @Override
-      public String toString() {
-        return "createFinish";
-      }
-    });
-
-    mDirty = true;
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for notifying {@link WXRenderManager} that the process of refreshing
-   * given view is finished, and put the command object in the queue.
-   */
-  void refreshFinish() {
-    if (mDestroy) {
-      return;
-    }
-    final WXDomObject root = mRegistry.get(WXDomObject.ROOT);
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        int realWidth = (int) root.getLayoutWidth();
-        int realHeight = (int) root.getLayoutHeight();
-        mWXRenderManager.refreshFinish(mInstanceId, realWidth, realHeight);
-      }
-
-      @Override
-      public String toString() {
-        return "refreshFinish";
-      }
-    });
-
-    mDirty = true;
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  /**
-   * Create a command object for notifying {@link WXRenderManager} that the process of update
-   * given view is finished, and put the command object in the queue.
-   */
-  void updateFinish() {
-    if (mDestroy) {
-      return;
-    }
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.updateFinish(mInstanceId);
-      }
-
-      @Override
-      public String toString() {
-        return "updateFinish";
-      }
-    });
-
-    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
-    if (instance != null) {
-      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
-    }
-  }
-
-  void startAnimation(@NonNull final String ref, @NonNull String animation,
-                      @Nullable final String callBack){
-    if (mDestroy) {
-      return;
-    }
-    WXDomObject domObject = mRegistry.get(ref);
-    if (domObject == null) {
-      return;
-    }
-    final WXAnimationBean animationBean=createAnimationBean(ref, animation);
-    if(animationBean!=null) {
-      mNormalTasks.add(new IWXRenderTask() {
-        @Override
-        public void execute() {
-          mWXRenderManager.startAnimation(mInstanceId, ref, animationBean, callBack);
-        }
-
-        @Override
-        public String toString() {
-          return "startAnimationByCall";
-        }
-      });
-      mDirty=true;
-    }
-  }
-
-  private void addAnimationForDomTree(WXDomObject domObject){
-    animations.add(new Pair<String, Map<String, Object>>(domObject.getRef(),domObject.getStyles()));
-    for(int i=0;i<domObject.childCount();i++){
-      addAnimationForDomTree(domObject.getChild(i));
-    }
-  }
-
-  private WXAnimationBean createAnimationBean(String ref, String animation){
-    try {
-      WXAnimationBean animationBean =
-          JSONObject.parseObject(animation, WXAnimationBean.class);
-      if (animationBean != null && animationBean.styles != null) {
-        WXDomObject domObject=mRegistry.get(ref);
-        int width=(int)domObject.getLayoutWidth();
-        int height=(int)domObject.getLayoutHeight();
-        animationBean.styles.init(animationBean.styles.transformOrigin,
-                                  animationBean.styles.transform,width,height,WXSDKManager.getInstance().getSDKInstance(mInstanceId).getViewPortWidth());
-      }
-      return animationBean;
-    } catch (RuntimeException e) {
-      WXLogUtils.e("", e);
-      return null;
-    }
-  }
-
-  private WXAnimationBean createAnimationBean(String ref,Map<String, Object> style){
-    if (style != null) {
-      try {
-        Object transform = style.get(WXDomObject.TRANSFORM);
-        if (transform instanceof String && !TextUtils.isEmpty((String) transform)) {
-          String transformOrigin = (String) style.get(WXDomObject.TRANSFORM_ORIGIN);
-          WXAnimationBean animationBean = new WXAnimationBean();
-          WXDomObject domObject = mRegistry.get(ref);
-          int width = (int) domObject.getLayoutWidth();
-          int height = (int) domObject.getLayoutHeight();
-          animationBean.styles = new WXAnimationBean.Style();
-          animationBean.styles.init(transformOrigin, (String) transform, width, height,WXSDKManager.getInstance().getSDKInstance(mInstanceId).getViewPortWidth());
-          return animationBean;
-        }
-      }catch (RuntimeException e){
-        WXLogUtils.e("", e);
-        return null;
-      }
-    }
-    return null;
-  }
-
-
-  private static class AddDOMConsumer implements WXDomObject.Consumer {
-    final ConcurrentHashMap<String, WXDomObject> mRegistry;
-    AddDOMConsumer(ConcurrentHashMap<String, WXDomObject> r){
-      mRegistry = r;
-    }
-
-    @Override
-    public void accept(WXDomObject dom) {
-      //register dom
-      dom.young();
-      mRegistry.put(dom.getRef(), dom);
-
-      //find fixed node
-      WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT);
-      if (rootDom != null && dom.isFixed()) {
-        rootDom.add2FixedDomList(dom.getRef());
-      }
-    }
-  }
-
-  static class ApplyStyleConsumer implements WXDomObject.Consumer {
-    static ApplyStyleConsumer sInstance;
-
-    public static ApplyStyleConsumer getInstance(){
-      if(sInstance == null){
-        sInstance = new ApplyStyleConsumer();
-      }
-      return sInstance;
-    }
-
-    private ApplyStyleConsumer(){};
-
-    @Override
-    public void accept(WXDomObject dom) {
-      WXStyle style = dom.getStyles();
-
-      /** merge default styles **/
-      Map<String, String> defaults = dom.getDefaultStyle();
-      if (defaults != null) {
-        for (Map.Entry<String, String> entry : defaults.entrySet()) {
-          if (!style.containsKey(entry.getKey())) {
-            style.put(entry.getKey(), entry.getValue());
-          }
-        }
-      }
-
-      if (dom.getStyles().size() > 0) {
-        dom.applyStyleToNode();
-      }
-    }
-  }
-
-  public void getComponentSize(final String ref, final JSCallback callback) {
-    if (mDestroy) {
-      Map<String, Object> options = new HashMap<>();
-      options.put("result", false);
-      options.put("errMsg", "Component does not exist");
-      callback.invoke(options);
-      return;
-    }
-
-    mNormalTasks.add(new IWXRenderTask() {
-
-      @Override
-      public void execute() {
-        mWXRenderManager.getComponentSize(mInstanceId, ref, callback);
-      }
-
-      @Override
-      public String toString() {
-        return "getComponentSize";
-      }
-    });
-    mDirty=true;
-
-  }
-
-  static class AddDomInfo {
-
-    public WXComponent component;
-  }
-}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
old mode 100755
new mode 100644
index 6321e31..df5943b
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXEvent.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXEvent.java
old mode 100755
new mode 100644
index cfd334f..1f43578
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXEvent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXEvent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXImageQuality.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXImageQuality.java
old mode 100755
new mode 100644
index c2144d5..20771d9
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXImageQuality.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXImageQuality.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -213,4 +27,4 @@
   NORMAL,
 
   HIGH
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXLineHeightSpan.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXLineHeightSpan.java
index 013dce6..6f58e45 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXLineHeightSpan.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXLineHeightSpan.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXListDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXListDomObject.java
index 8d9d053..09b3b43 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXListDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXListDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
new file mode 100644
index 0000000..b4b0be0
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXRecyclerDomObject.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom;
+
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.flex.Spacing;
+import com.taobao.weex.ui.component.WXBasicComponentType;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.Map;
+
+/**
+ * Created by zhengshihan on 2017/2/21.
+ */
+
+public class WXRecyclerDomObject extends WXDomObject{
+
+
+    private int mColumnCount = Constants.Value.COLUMN_COUNT_NORMAL;
+    private float mColumnWidth = Constants.Value.AUTO;
+    private float mColumnGap = Constants.Value.COLUMN_GAP_NORMAL;
+    private float mAvailableWidth = 0;
+    private boolean mIsPreCalculateCellWidth =false;
+
+    public float getAvailableWidth() {
+        return WXViewUtils.getRealPxByWidth(mAvailableWidth,getViewPortWidth());
+    }
+
+    public int getLayoutType(){
+        return getAttrs().getLayoutType();
+    }
+
+    public float getColumnGap() {
+        return WXViewUtils.getRealPxByWidth(mColumnGap,getViewPortWidth());
+    }
+
+    public int getColumnCount() {
+        return mColumnCount;
+    }
+
+    public float getColumnWidth() {
+        return WXViewUtils.getRealPxByWidth(mColumnWidth,getViewPortWidth());
+    }
+    @Override
+    public void add(WXDomObject child, int index) {
+        super.add(child, index);
+
+        if (WXBasicComponentType.CELL.equals(child.getType())) {
+            if (!mIsPreCalculateCellWidth) {
+                preCalculateCellWidth();
+            }
+            if(mColumnWidth!=0 && mColumnWidth!= Float.NaN) {
+                child.getStyles().put(Constants.Name.WIDTH, mColumnWidth);
+            }
+        }
+    }
+
+    public void preCalculateCellWidth(){
+
+        if (getAttrs() != null) {
+            mColumnCount = getAttrs().getColumnCount();
+            mColumnWidth = getAttrs().getColumnWidth();
+            mColumnGap =  getAttrs().getColumnGap();
+
+            mAvailableWidth = getStyleWidth()-getPadding().get(Spacing.LEFT)-getPadding().get(Spacing.RIGHT);
+            mAvailableWidth = WXViewUtils.getWebPxByWidth(mAvailableWidth,getViewPortWidth());
+
+            if (Constants.Value.AUTO == mColumnCount && Constants.Value.AUTO == mColumnWidth) {
+                mColumnCount = Constants.Value.COLUMN_COUNT_NORMAL;
+            } else if (Constants.Value.AUTO == mColumnWidth && Constants.Value.AUTO != mColumnCount) {
+                mColumnWidth = (mAvailableWidth - ((mColumnCount - 1) * mColumnGap)) / mColumnCount;
+                mColumnWidth = mColumnWidth > 0 ? mColumnWidth :0;
+            } else if (Constants.Value.AUTO != mColumnWidth && Constants.Value.AUTO == mColumnCount) {
+                mColumnCount = Math.round((mAvailableWidth + mColumnGap) / (mColumnWidth + mColumnGap)-0.5f);
+                mColumnCount = mColumnCount > 0 ? mColumnCount :1;
+                mColumnWidth =((mAvailableWidth + mColumnGap) / mColumnCount) - mColumnGap;
+            } else if(Constants.Value.AUTO != mColumnWidth && Constants.Value.AUTO != mColumnCount){
+                int columnCount = Math.round((mAvailableWidth + mColumnGap) / (mColumnWidth + mColumnGap)-0.5f);
+                mColumnCount = columnCount > mColumnCount ? mColumnCount :columnCount;
+                mColumnWidth= ((mAvailableWidth + mColumnGap) / mColumnCount) - mColumnGap;
+            }
+            mIsPreCalculateCellWidth = true;
+            if(WXEnvironment.isApkDebugable()) {
+                WXLogUtils.d("preCalculateCellWidth mColumnGap :" + mColumnGap + " mColumnWidth:" + mColumnWidth + " mColumnCount:" + mColumnCount);
+            }
+        }
+    }
+
+    public void updateRecyclerAttr(){
+        preCalculateCellWidth();
+        if(mColumnWidth!=0 && mColumnWidth!= Float.NaN){
+            WXLogUtils.w("preCalculateCellWidth mColumnGap :" + mColumnGap + " mColumnWidth:" + mColumnWidth + " mColumnCount:" + mColumnCount);
+            return;
+        }
+        int count = getChildCount();
+        for(int i=0;i<count; i++){
+            WXDomObject domObject = getChild(i);
+            if(WXBasicComponentType.CELL.equals(domObject.getType())) {
+                getChild(i).getStyles().put(Constants.Name.WIDTH, mColumnWidth);
+            }
+        }
+    }
+
+    @Override
+    public void updateAttr(Map<String, Object> attrs) {
+        super.updateAttr(attrs);
+        if(attrs.containsKey(Constants.Name.COLUMN_COUNT)
+                || attrs.containsKey(Constants.Name.COLUMN_GAP)
+                || attrs.containsKey(Constants.Name.COLUMN_WIDTH)){
+            updateRecyclerAttr();
+        }
+    }
+
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXScrollerDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXScrollerDomObject.java
index 6ba4c3a..6ff548e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXScrollerDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXScrollerDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
old mode 100755
new mode 100644
index 4122b4b..b7cfa46
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXStyle.java
@@ -1,211 +1,26 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
 import android.graphics.Typeface;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.support.v4.util.ArrayMap;
 import android.text.Layout;
 import android.text.TextUtils;
@@ -235,35 +50,21 @@
   private static final long serialVersionUID = 611132641365274134L;
   public static final int UNSET = -1;
 
-  private @NonNull final Map<String,Object> map;
+  private @NonNull final Map<String,Object> mStyles;
   private Map<String,Map<String,Object>> mPesudoStyleMap = new ArrayMap<>();// clz_group:{styleMap}
   private Map<String,Object> mPesudoResetStyleMap = new ArrayMap<>();
 
 
   public WXStyle(){
-    map = new ArrayMap<>();
+    mStyles = new ArrayMap<>();
   }
 
-  public int getBlur() {
-    try {
-      if(get(Constants.Name.FILTER) == null) {
-        return 0;
-      }
-      String value = get(Constants.Name.FILTER).toString().trim();
-      int start = value.indexOf("blur(");
-      int end = value.indexOf("px)");
-      if(end == -1) {
-        end = value.indexOf(")");
-      }
-      if(start == 0 && start < end) {
-        int blur = Integer.parseInt(value.substring(5,end));
-        //unlike css blur filter(https://developer.mozilla.org/en-US/docs/Web/CSS/filter),in weex
-        //we specify the blur radius in [0,10] to improve performance and avoid potential oom issue.
-        return Math.min(10,Math.max(0,blur));
-      }
-    }catch (NumberFormatException e) {
+  @Nullable
+  public String getBlur() {
+    if(get(Constants.Name.FILTER) == null) {
+      return null;
     }
-    return 0;
+    return get(Constants.Name.FILTER).toString().trim();
   }
 
   /*
@@ -439,7 +240,9 @@
 
   /*
    * base
+   * @see getWidth(int viewport)
    **/
+  @Deprecated
   public float getWidth() {
     return WXUtils.getFloat(get(Constants.Name.WIDTH));
   }
@@ -456,6 +259,7 @@
     return WXUtils.getFloat(get(Constants.Name.MAX_WIDTH));
   }
 
+  @Deprecated
   public float getHeight() {
     return WXUtils.getFloat(get(Constants.Name.HEIGHT));
   }
@@ -472,6 +276,30 @@
     return WXUtils.getFloat(get(Constants.Name.MAX_HEIGHT));
   }
 
+
+  public float getWidth(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.WIDTH), viewport);
+  }
+
+  public float getMinWidth(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.MIN_WIDTH), viewport);
+  }
+
+  public float getMaxWidth(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.MAX_WIDTH), viewport);
+  }
+
+  public float getHeight(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.HEIGHT), viewport);
+  }
+
+  public float getMinHeight(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.MIN_HEIGHT), viewport);
+  }
+
+  public float getMaxHeight(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.MAX_HEIGHT), viewport);
+  }
   /*
    * border
    **/
@@ -483,10 +311,6 @@
     return temp;
   }
 
-  public float getBorderTopWidth() {
-    return getBorderWidth(Constants.Name.BORDER_TOP_WIDTH);
-  }
-
   private float getBorderWidth(String key) {
     float temp = WXUtils.getFloat(get(key));
     if (WXUtils.isUndefined(temp)) {
@@ -495,15 +319,31 @@
     return temp;
   }
 
+  private float getBorderWidth(String key, int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(key), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      return getBorderWidth(viewport);
+    }
+    return temp;
+  }
   //TODO fix : only when set backgroundColor
+  @Deprecated
   public float getBorderWidth() {
     return WXUtils.getFloat(get(Constants.Name.BORDER_WIDTH));
   }
 
+  public float getBorderWidth(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.BORDER_WIDTH), viewport);
+  }
+
   public float getBorderRightWidth() {
     return getBorderWidth(Constants.Name.BORDER_RIGHT_WIDTH);
   }
 
+  public float getBorderTopWidth() {
+    return getBorderWidth(Constants.Name.BORDER_TOP_WIDTH);
+  }
+
   public float getBorderBottomWidth() {
     return getBorderWidth(Constants.Name.BORDER_BOTTOM_WIDTH);
   }
@@ -512,6 +352,23 @@
     return getBorderWidth(Constants.Name.BORDER_LEFT_WIDTH);
   }
 
+
+  public float getBorderRightWidth(int viewport) {
+    return getBorderWidth(Constants.Name.BORDER_RIGHT_WIDTH, viewport);
+  }
+
+  public float getBorderTopWidth(int viewport) {
+    return getBorderWidth(Constants.Name.BORDER_TOP_WIDTH, viewport);
+  }
+
+  public float getBorderBottomWidth(int viewport) {
+    return getBorderWidth(Constants.Name.BORDER_BOTTOM_WIDTH, viewport);
+  }
+
+  public float getBorderLeftWidth(int viewport) {
+    return getBorderWidth(Constants.Name.BORDER_LEFT_WIDTH, viewport);
+  }
+
   public String getBorderColor() {
     Object color = get(Constants.Name.BORDER_COLOR);
     return color == null ? null : color.toString();
@@ -522,14 +379,24 @@
     return borderStyle == null ? null : borderStyle.toString();
   }
 
+  @Deprecated
   public float getMargin(){
     return WXUtils.getFloat(get(Constants.Name.MARGIN));
   }
 
+  @Deprecated
   public float getPadding(){
     return WXUtils.getFloat(get(Constants.Name.PADDING));
   }
 
+  public float getMargin(int viewport){
+    return WXUtils.getFloatByViewport(get(Constants.Name.MARGIN), viewport);
+  }
+
+  public float getPadding(int viewport){
+    return WXUtils.getFloatByViewport(get(Constants.Name.PADDING), viewport);
+  }
+
   /*
    * margin
    **/
@@ -566,6 +433,41 @@
   }
 
   /*
+   * margin
+   **/
+  public float getMarginTop(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN_TOP), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN), viewport);
+    }
+    return temp;
+  }
+
+  public float getMarginLeft(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN_LEFT), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN), viewport);
+    }
+    return temp;
+  }
+
+  public float getMarginRight(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN_RIGHT), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN), viewport);
+    }
+    return temp;
+  }
+
+  public float getMarginBottom(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN_BOTTOM), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.MARGIN), viewport);
+    }
+    return temp;
+  }
+
+  /*
    * padding
    **/
   public float getPaddingTop() {
@@ -600,6 +502,42 @@
     return temp;
   }
 
+
+  /*
+   * padding
+   **/
+  public float getPaddingTop(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING_TOP), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING), viewport);
+    }
+    return temp;
+  }
+
+  public float getPaddingLeft(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING_LEFT), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING), viewport);
+    }
+    return temp;
+  }
+
+  public float getPaddingRight(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING_RIGHT), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING), viewport);
+    }
+    return temp;
+  }
+
+  public float getPaddingBottom(int viewport) {
+    float temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING_BOTTOM), viewport);
+    if (WXUtils.isUndefined(temp)) {
+      temp = WXUtils.getFloatByViewport(get(Constants.Name.PADDING), viewport);
+    }
+    return temp;
+  }
+
   /*
    * position
    **/
@@ -643,6 +581,22 @@
     return WXUtils.getFloat(get(Constants.Name.BOTTOM));
   }
 
+  public float getLeft(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.LEFT), viewport);
+  }
+
+  public float getTop(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.TOP), viewport);
+  }
+
+  public float getRight(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.RIGHT), viewport);
+  }
+
+  public float getBottom(int viewport) {
+    return WXUtils.getFloatByViewport(get(Constants.Name.BOTTOM), viewport);
+  }
+
   /*
    * others
    **/
@@ -675,59 +629,59 @@
 
   @Override
   public boolean equals(Object o) {
-    return map.equals(o);
+    return mStyles.equals(o);
   }
 
   @Override
   public int hashCode() {
-    return map.hashCode();
+    return mStyles.hashCode();
   }
 
   @Override
   public void clear() {
-    map.clear();
+    mStyles.clear();
   }
 
   @Override
   public boolean containsKey(Object key) {
-    return map.containsKey(key);
+    return mStyles.containsKey(key);
   }
 
   @Override
   public boolean containsValue(Object value) {
-    return map.containsValue(value);
+    return mStyles.containsValue(value);
   }
 
   @NonNull
   @Override
   public Set<Entry<String, Object>> entrySet() {
-    return map.entrySet();
+    return mStyles.entrySet();
   }
 
   @Override
   public Object get(Object key) {
-    return map.get(key);
+    return mStyles.get(key);
   }
 
   @Override
   public boolean isEmpty() {
-    return map.isEmpty();
+    return mStyles.isEmpty();
   }
 
   @NonNull
   @Override
   public Set<String> keySet() {
-    return map.keySet();
+    return mStyles.keySet();
   }
 
   @Override
   public Object put(String key, Object value) {
-    return map.put(key,value);
+    return mStyles.put(key,value);
   }
 
   @Override
   public void putAll(Map<? extends String, ?> map) {
-    this.map.putAll(map);
+    this.mStyles.putAll(map);
   }
 
   /**
@@ -736,7 +690,7 @@
    * @param byPesudo
    */
   public void putAll(Map<? extends String, ?> map, boolean byPesudo) {
-    this.map.putAll(map);
+    this.mStyles.putAll(map);
     if (!byPesudo) {
       this.mPesudoResetStyleMap.putAll(map);
       processPesudoClasses(map);
@@ -764,7 +718,9 @@
         String clzName = key.substring(i);
         if (clzName.equals(Constants.PSEUDO.ENABLED)) {
           //enabled, use as regular style
-          this.mPesudoResetStyleMap.put(key.substring(0, i), entry.getValue());
+          String styleKey = key.substring(0, i);
+          this.mStyles.put(styleKey, entry.getValue());
+          this.mPesudoResetStyleMap.put(styleKey, entry.getValue());
           continue;
         } else {
           clzName = clzName.replace(Constants.PSEUDO.ENABLED, "");//remove ':enabled' which is ignored
@@ -782,24 +738,24 @@
 
   @Override
   public Object remove(Object key) {
-    return map.remove(key);
+    return mStyles.remove(key);
   }
 
   @Override
   public int size() {
-    return map.size();
+    return mStyles.size();
   }
 
   @NonNull
   @Override
   public Collection<Object> values() {
-    return map.values();
+    return mStyles.values();
   }
 
   @Override
   protected WXStyle clone(){
     WXStyle style = new WXStyle();
-    style.map.putAll(this.map);
+    style.mStyles.putAll(this.mStyles);
 
     for(Entry<String,Map<String,Object>> entry:this.mPesudoStyleMap.entrySet()){
       Map<String,Object> valueClone = new ArrayMap<>();
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXSwitchDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXSwitchDomObject.java
index 60ec5c8..9246837 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXSwitchDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXSwitchDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
old mode 100755
new mode 100644
index 8cc9e5b..03b84a9
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXTextDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
new file mode 100644
index 0000000..fa017cb
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentFactory;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
+
+/**
+ * Created by sospartan on 22/02/2017.
+ */
+
+abstract class AbstractAddElementAction implements DOMAction, RenderAction {
+
+
+  protected WXComponent generateComponentTree(DOMActionContext context, WXDomObject dom, WXVContainer parent) {
+    if (dom == null) {
+      return null;
+    }
+    WXComponent component = WXComponentFactory.newInstance(context.getInstance(), dom, parent);
+
+    context.registerComponent(dom.getRef(), component);
+    if (component instanceof WXVContainer) {
+      WXVContainer parentC = (WXVContainer) component;
+      int count = dom.childCount();
+      WXDomObject child = null;
+      for (int i = 0; i < count; ++i) {
+        child = dom.getChild(i);
+        if (child != null) {
+          parentC.addChild(generateComponentTree(context, child, parentC));
+        }
+      }
+    }
+
+    return component;
+  }
+
+  /**
+   * Add DOM node.
+   */
+  protected void addDomInternal(DOMActionContext context, JSONObject dom) {
+    if (context.isDestory()) {
+      return;
+    }
+
+    WXSDKInstance instance = context.getInstance();
+    if (instance == null) {
+      return;
+    }
+    WXErrorCode errCode = getErrorCode();
+    if (dom == null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
+    }
+
+    //only non-root has parent.
+    WXDomObject domObject = WXDomObject.parse(dom, instance);
+
+    if (domObject == null || context.getDomByRef(domObject.getRef()) != null) {
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.e("[DOMActionContextImpl] " + getStatementName() + " error,DOM object is null or already registered!!");
+      }
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
+      return;
+    }
+    appendDomToTree(context, domObject);
+
+    domObject.traverseTree(
+        context.getAddDOMConsumer(),
+        context.getApplyStyleConsumer()
+    );
+
+    //Create component in dom thread
+    WXComponent component = createComponent(context, domObject);
+    if (component == null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, errCode);
+      //stop redner, some fatal happened.
+      return;
+    }
+    context.addDomInfo(domObject.getRef(), component);
+    context.postRenderTask(this);
+    addAnimationForDomTree(context, domObject);
+
+    instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+  }
+
+  public void addAnimationForDomTree(DOMActionContext context, WXDomObject domObject) {
+    context.addAnimationForElement(domObject.getRef(), domObject.getStyles());
+    for (int i = 0; i < domObject.childCount(); i++) {
+      addAnimationForDomTree(context, domObject.getChild(i));
+    }
+  }
+
+  protected abstract WXComponent createComponent(DOMActionContext context, WXDomObject domObject);
+
+  protected abstract void appendDomToTree(DOMActionContext context, WXDomObject domObject);
+
+  protected abstract String getStatementName();
+
+  protected abstract WXErrorCode getErrorCode();
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
new file mode 100644
index 0000000..120e56c
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.WXDomObject;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+abstract class AbstractLayoutFinishAction implements DOMAction, RenderAction {
+
+  protected int mLayoutWidth;
+  protected int mLayoutHeight;
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+
+    WXDomObject root = context.getDomByRef(WXDomObject.ROOT);
+    mLayoutHeight = (int)root.getLayoutHeight();
+    mLayoutWidth = (int)root.getLayoutWidth();
+    context.postRenderTask(this);
+    WXSDKInstance instance = context.getInstance();
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/Action.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/Action.java
new file mode 100644
index 0000000..c29f2b5
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/Action.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+/**
+ * Created by sospartan on 16/03/2017.
+ */
+
+public interface Action {
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java
new file mode 100644
index 0000000..ed8983b
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/Actions.java
@@ -0,0 +1,164 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+
+import static com.taobao.weex.dom.WXDomModule.ADD_ELEMENT;
+import static com.taobao.weex.dom.WXDomModule.ADD_EVENT;
+import static com.taobao.weex.dom.WXDomModule.ADD_RULE;
+import static com.taobao.weex.dom.WXDomModule.CREATE_BODY;
+import static com.taobao.weex.dom.WXDomModule.CREATE_FINISH;
+import static com.taobao.weex.dom.WXDomModule.GET_COMPONENT_RECT;
+import static com.taobao.weex.dom.WXDomModule.INVOKE_METHOD;
+import static com.taobao.weex.dom.WXDomModule.MOVE_ELEMENT;
+import static com.taobao.weex.dom.WXDomModule.REFRESH_FINISH;
+import static com.taobao.weex.dom.WXDomModule.REMOVE_ELEMENT;
+import static com.taobao.weex.dom.WXDomModule.REMOVE_EVENT;
+import static com.taobao.weex.dom.WXDomModule.SCROLL_TO_ELEMENT;
+import static com.taobao.weex.dom.WXDomModule.UPDATE_ATTRS;
+import static com.taobao.weex.dom.WXDomModule.UPDATE_FINISH;
+import static com.taobao.weex.dom.WXDomModule.UPDATE_STYLE;
+
+/**
+ * Created by sospartan on 01/03/2017.
+ */
+
+public class Actions {
+
+  public static Action get(String actionName,JSONArray args){
+    switch (actionName) {
+      case CREATE_BODY:
+        if (args == null) {
+          return null;
+        }
+        return new CreateBodyAction(args.getJSONObject(0));
+      case UPDATE_ATTRS:
+        if (args == null) {
+          return null;
+        }
+        return new UpdateAttributeAction(args.getString(0),args.getJSONObject(1));
+      case UPDATE_STYLE:
+        if (args == null) {
+          return null;
+        }
+        return new UpdateStyleAction(args.getString(0),args.getJSONObject(1));
+      case REMOVE_ELEMENT:
+        if (args == null) {
+          return null;
+        }
+        return new RemoveElementAction(args.getString(0));
+      case ADD_ELEMENT:
+        if (args == null) {
+          return null;
+        }
+        return new AddElementAction(args.getJSONObject(1),args.getString(0),args.getInteger(2));
+      case MOVE_ELEMENT:
+        if (args == null) {
+          return null;
+        }
+        return new MoveElementAction(args.getString(0),args.getString(1),args.getInteger(2));
+      case ADD_EVENT:
+        if (args == null) {
+          return null;
+        }
+        return new AddEventAction(args.getString(0),args.getString(1));
+      case REMOVE_EVENT:
+        if (args == null) {
+          return null;
+        }
+        return new RemoveEventAction(args.getString(0),args.getString(1));
+      case CREATE_FINISH:
+        return new CreateFinishAction();
+      case REFRESH_FINISH:
+        return new RefreshFinishAction();
+      case UPDATE_FINISH:
+        return new UpdateFinishAction();
+      case SCROLL_TO_ELEMENT:
+        if (args == null) {
+          return null;
+        }
+        return new ScrollToElementAction(args.getString(0),args.getJSONObject(1));
+      case ADD_RULE:
+        if (args == null) {
+          return null;
+        }
+        return new AddRuleAction(args.getString(0),args.getJSONObject(1));
+      case GET_COMPONENT_RECT:
+        if(args == null){
+          return null;
+        }
+        return new GetComponentRectAction(args.getString(0),args.getString(1));
+      case INVOKE_METHOD:
+        if(args == null){
+          return null;
+        }
+        return new InvokeMethodAction(args.getString(0),args.getString(1),args.getJSONArray(2));
+    }
+
+    return null;
+  }
+
+
+  public static DOMAction getInvokeMethod(String ref,String method,JSONArray args){
+    return new InvokeMethodAction(ref,method,args);
+  }
+
+  /**
+   * Bridge will get this action directly.
+   * @param data
+   * @param parentRef
+   * @param index
+   * @return
+   */
+  public static DOMAction getAddElement(JSONObject data, String parentRef, int index){
+    return new AddElementAction(data,parentRef,index);
+  }
+
+  public static DOMAction getUpdateStyle(String ref, JSONObject data, boolean byPesudo){
+    return new UpdateStyleAction(ref,data,byPesudo);
+  }
+
+  public static DOMAction getAddEvent(String ref, String type) {
+    return new AddEventAction(ref,type);
+  }
+
+  public static DOMAction getAnimationAction(@NonNull final String ref, @NonNull String animation,
+                                             @Nullable final String callBack){
+    return new AnimationAction(ref, animation, callBack);
+  }
+
+  public static RenderAction getAnimationAction(@NonNull String ref,
+                                                @NonNull final WXAnimationBean animationBean){
+    return new AnimationAction(ref, animationBean);
+  }
+
+  public static RenderAction getAnimationAction(@NonNull String ref,
+                                                @NonNull final WXAnimationBean animationBean,
+                                                @Nullable String callback){
+    return new AnimationAction(ref, animationBean, callback);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
new file mode 100644
index 0000000..a5e1254
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXLogUtils;
+
+/**
+ * Created by sospartan on 22/02/2017.
+ */
+
+final class AddElementAction extends AbstractAddElementAction {
+  private final String mParentRef;
+  private final int mAddIndex;
+  private final JSONObject mData;
+
+  private String mRef;
+
+
+  AddElementAction(JSONObject data, String parentRef, int index) {
+    mParentRef = parentRef;
+    mAddIndex = index;
+    mData = data;
+  }
+
+  @Override
+  protected WXComponent createComponent(DOMActionContext context, WXDomObject domObject) {
+    WXComponent comp = context.getCompByRef(mParentRef);
+    if (comp == null || !(comp instanceof WXVContainer)) {
+      return null;
+    }
+    return generateComponentTree(context, domObject, (WXVContainer) comp);
+  }
+
+  @Override
+  protected void appendDomToTree(DOMActionContext context, WXDomObject domObject) {
+    WXDomObject parent;
+    mRef = domObject.getRef();
+    if ((parent = context.getDomByRef(mParentRef)) == null) {
+      context.getInstance().commitUTStab(IWXUserTrackAdapter.DOM_MODULE, getErrorCode());
+      return;
+    } else {
+      //non-root and parent exist
+      parent.add(domObject, mAddIndex);
+    }
+  }
+
+  @Override
+  protected String getStatementName() {
+    return "addDom";
+  }
+
+  @Override
+  protected WXErrorCode getErrorCode() {
+    return WXErrorCode.WX_ERR_DOM_ADDELEMENT;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    addDomInternal(context, mData);
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(mRef);
+    WXSDKInstance instance = context.getInstance();
+    if (instance == null || instance.getContext() == null) {
+      WXLogUtils.e("instance is null or instance is destroy!");
+      return;
+    }
+    try {
+      WXVContainer parent = (WXVContainer) context.getComponent(mParentRef);
+      if (parent == null || component == null) {
+        return;
+      }
+
+      parent.addChild(component, mAddIndex);
+      parent.createChildViewAt(mAddIndex);
+      component.applyLayoutAndEvent(component);
+      component.bindData(component);
+    } catch (Exception e) {
+      WXLogUtils.e("add component failed.", e);
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
new file mode 100644
index 0000000..13dac2f
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 01/03/2017.
+ */
+class AddEventAction implements DOMAction, RenderAction {
+  private final String mRef;
+  private final String mEvent;
+
+  private WXDomObject mUpdatedDom;
+
+  AddEventAction(String ref, String event) {
+    mRef = ref;
+    mEvent = event;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    WXDomObject domObject = context.getDomByRef(mRef);
+    if (domObject == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_ADDEVENT);
+      }
+      return;
+    }
+    domObject.addEvent(mEvent);
+    mUpdatedDom = domObject;
+    context.postRenderTask(this);
+
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent comp = context.getComponent(mRef);
+    if(comp != null){
+      //sync dom change to component
+      comp.updateDom(mUpdatedDom);
+      comp.addEvent(mEvent);
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddRuleAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddRuleAction.java
new file mode 100644
index 0000000..6f063d3
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddRuleAction.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import android.text.TextUtils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.utils.FontDO;
+import com.taobao.weex.utils.TypefaceUtil;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+final class AddRuleAction implements DOMAction {
+  private final String mType;
+  private final JSONObject mData;
+
+  public AddRuleAction(String type, JSONObject data) {
+    this.mType = type;
+    this.mData = data;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (Constants.Name.FONT_FACE.equals(mType)) {
+      FontDO fontDO = parseFontDO(mData, context.getInstance());
+      if (fontDO != null && !TextUtils.isEmpty(fontDO.getFontFamilyName())) {
+        FontDO cacheFontDO = TypefaceUtil.getFontDO(fontDO.getFontFamilyName());
+        if (cacheFontDO == null || !TextUtils.equals(cacheFontDO.getUrl(), fontDO.getUrl())) {
+          TypefaceUtil.putFontDO(fontDO);
+          TypefaceUtil.loadTypeface(fontDO);
+        } else {
+          TypefaceUtil.loadTypeface(cacheFontDO);
+        }
+      }
+    }
+  }
+
+  private FontDO parseFontDO(JSONObject jsonObject,WXSDKInstance instance) {
+    if(jsonObject == null) {
+      return null;
+    }
+    String src = jsonObject.getString(Constants.Name.SRC);
+    String name = jsonObject.getString(Constants.Name.FONT_FAMILY);
+
+    return new FontDO(name, src,instance);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
new file mode 100644
index 0000000..5b380f2
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AnimationAction.java
@@ -0,0 +1,278 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.taobao.weex.dom.action;
+
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ArgbEvaluator;
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.graphics.drawable.ColorDrawable;
+import android.os.Build;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.v4.view.animation.PathInterpolatorCompat;
+import android.text.TextUtils;
+import android.util.Pair;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.animation.AccelerateDecelerateInterpolator;
+import android.view.animation.AccelerateInterpolator;
+import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
+import android.view.animation.LinearInterpolator;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.animation.BackgroundColorProperty;
+import com.taobao.weex.ui.animation.DimensionUpdateListener;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+import com.taobao.weex.ui.animation.WXAnimationModule;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.view.border.BorderDrawable;
+import com.taobao.weex.utils.SingleFunctionParser;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXResourceUtils;
+import com.taobao.weex.utils.WXUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.HashMap;
+import java.util.List;
+
+
+class AnimationAction implements DOMAction, RenderAction {
+
+  private final static String TAG = "AnimationAction";
+  @NonNull
+  private final String ref;
+
+  @Nullable
+  private
+  final String animation;
+
+  @Nullable
+  private
+  final String callback;
+
+  @Nullable
+  private
+  WXAnimationBean mAnimationBean;
+
+  AnimationAction(@NonNull final String ref, @Nullable String animation,
+                  @Nullable final String callBack) {
+    this.ref = ref;
+    this.animation = animation;
+    this.callback = callBack;
+  }
+
+  AnimationAction(@NonNull String ref, @NonNull WXAnimationBean animationBean) {
+    this(ref, animationBean, null);
+  }
+
+  AnimationAction(@NonNull String ref, @NonNull WXAnimationBean animationBean,
+                  @Nullable final String callBack) {
+    this.ref = ref;
+    this.mAnimationBean = animationBean;
+    this.callback = callBack;
+    this.animation = null;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    try {
+      WXDomObject domObject;
+      if (!context.isDestory() &&
+          !TextUtils.isEmpty(animation) &&
+          (domObject = context.getDomByRef(ref)) != null) {
+        WXAnimationBean animationBean = JSONObject.parseObject(animation, WXAnimationBean.class);
+        if (animationBean != null && animationBean.styles != null) {
+          int width = (int) domObject.getLayoutWidth();
+          int height = (int) domObject.getLayoutHeight();
+          animationBean.styles.init(animationBean.styles.transformOrigin,
+                                    animationBean.styles.transform, width, height,
+                                    context.getInstance().getInstanceViewPortWidth());
+          mAnimationBean = animationBean;
+          context.postRenderTask(this);
+        }
+      }
+    } catch (RuntimeException e) {
+      WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXSDKInstance instance;
+    if (mAnimationBean != null && (instance = context.getInstance()) != null) {
+      startAnimation(instance, context.getComponent(ref));
+    }
+  }
+
+  private void startAnimation(@NonNull WXSDKInstance instance, @Nullable WXComponent component) {
+    if (component != null) {
+      if (component.getHostView() == null) {
+        WXAnimationModule.AnimationHolder holder = new WXAnimationModule.AnimationHolder(mAnimationBean, callback);
+        component.postAnimation(holder);
+      } else {
+        try {
+          Animator animator = createAnimator(component.getHostView(), instance
+              .getInstanceViewPortWidth());
+          if (animator != null) {
+            Animator.AnimatorListener animatorCallback = createAnimatorListener(instance, callback);
+            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR2 && component
+                .isLayerTypeEnabled() ) {
+              component.getHostView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
+            }
+            Interpolator interpolator = createTimeInterpolator();
+            if (animatorCallback != null) {
+              animator.addListener(animatorCallback);
+            }
+            if (interpolator != null) {
+              animator.setInterpolator(interpolator);
+            }
+            animator.setDuration(mAnimationBean.duration);
+            animator.start();
+          }
+        } catch (RuntimeException e) {
+          WXLogUtils.e(TAG, WXLogUtils.getStackTrace(e));
+        }
+      }
+    }
+  }
+
+  private
+  @Nullable
+  ObjectAnimator createAnimator(final View target, final int viewPortWidth) {
+    if (target == null) {
+      return null;
+    }
+    WXAnimationBean.Style style = mAnimationBean.styles;
+    if (style != null) {
+      ObjectAnimator animator;
+      List<PropertyValuesHolder> holders = style.getHolders();
+      if (!TextUtils.isEmpty(style.backgroundColor)) {
+        BorderDrawable borderDrawable;
+        if ((borderDrawable = WXViewUtils.getBorderDrawable(target)) != null) {
+          holders.add(PropertyValuesHolder.ofObject(
+              new BackgroundColorProperty(), new ArgbEvaluator(),
+              borderDrawable.getColor(),
+              WXResourceUtils.getColor(style.backgroundColor)));
+        } else if (target.getBackground() instanceof ColorDrawable) {
+          holders.add(PropertyValuesHolder.ofObject(
+              new BackgroundColorProperty(), new ArgbEvaluator(),
+              ((ColorDrawable) target.getBackground()).getColor(),
+              WXResourceUtils.getColor(style.backgroundColor)));
+        }
+      }
+      if (style.getPivot() != null) {
+        Pair<Float, Float> pair = style.getPivot();
+        target.setPivotX(pair.first);
+        target.setPivotY(pair.second);
+      }
+      animator = ObjectAnimator.ofPropertyValuesHolder(
+          target, holders.toArray(new PropertyValuesHolder[holders.size()]));
+      animator.setStartDelay(mAnimationBean.delay);
+      if (target.getLayoutParams() != null &&
+          (!TextUtils.isEmpty(style.width) || !TextUtils.isEmpty(style.height))) {
+        DimensionUpdateListener listener = new DimensionUpdateListener(target);
+        ViewGroup.LayoutParams layoutParams = target.getLayoutParams();
+        if (!TextUtils.isEmpty(style.width)) {
+          listener.setWidth(layoutParams.width,
+                            (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.width), viewPortWidth));
+        }
+        if (!TextUtils.isEmpty(style.height)) {
+          listener.setHeight(layoutParams.height,
+                             (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.height), viewPortWidth));
+        }
+        animator.addUpdateListener(listener);
+      }
+      return animator;
+    } else {
+      return null;
+    }
+  }
+
+  private
+  @Nullable
+  Animator.AnimatorListener createAnimatorListener(final WXSDKInstance instance, @Nullable final String callBack) {
+    if (!TextUtils.isEmpty(callBack)) {
+      return new AnimatorListenerAdapter() {
+        @Override
+        public void onAnimationEnd(Animator animation) {
+          if (instance == null) {
+            WXLogUtils.e("RenderActionContextImpl-onAnimationEnd WXSDKInstance == null NPE");
+          } else {
+            WXSDKManager.getInstance().callback(instance.getInstanceId(),
+                                                callBack,
+                                                new HashMap<String, Object>());
+          }
+        }
+      };
+    } else {
+      return null;
+    }
+  }
+
+  private
+  @Nullable
+  Interpolator createTimeInterpolator() {
+    String interpolator = mAnimationBean.timingFunction;
+    if (!TextUtils.isEmpty(interpolator)) {
+      switch (interpolator) {
+        case WXAnimationBean.EASE_IN:
+          return new AccelerateInterpolator();
+        case WXAnimationBean.EASE_OUT:
+          return new DecelerateInterpolator();
+        case WXAnimationBean.EASE_IN_OUT:
+          return new AccelerateDecelerateInterpolator();
+        case WXAnimationBean.LINEAR:
+          return new LinearInterpolator();
+        default:
+          //Parse cubic-bezier
+          try {
+            SingleFunctionParser<Float> parser = new SingleFunctionParser<>(
+                mAnimationBean.timingFunction,
+                new SingleFunctionParser.FlatMapper<Float>() {
+                  @Override
+                  public Float map(String raw) {
+                    return Float.parseFloat(raw);
+                  }
+                });
+            List<Float> params = parser.parse(WXAnimationBean.CUBIC_BEZIER);
+            if (params != null && params.size() == WXAnimationBean.NUM_CUBIC_PARAM) {
+              return PathInterpolatorCompat.create(
+                  params.get(0), params.get(1), params.get(2), params.get(3));
+            } else {
+              return null;
+            }
+          } catch (RuntimeException e) {
+            return null;
+          }
+      }
+    }
+    return null;
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
new file mode 100644
index 0000000..c7ac391
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import android.widget.ScrollView;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXScroller;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+/**
+ * Created by sospartan on 14/02/2017.
+ */
+
+class CreateBodyAction extends AbstractAddElementAction {
+  private final JSONObject mData;
+
+  CreateBodyAction(JSONObject data) {
+    mData = data;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    addDomInternal(context, mData);
+  }
+
+  @Override
+  protected WXComponent createComponent(DOMActionContext context, WXDomObject domObject) {
+    return generateComponentTree(context, domObject, null);
+  }
+
+  @Override
+  protected void appendDomToTree(DOMActionContext context, WXDomObject domObject) {
+    String instanceId = context.getInstanceId();
+    WXDomObject.prepareRoot(domObject,
+        WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexHeight(instanceId), WXSDKManager.getInstanceViewPortWidth(instanceId)),
+        WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexWidth(instanceId), WXSDKManager.getInstanceViewPortWidth(instanceId)));
+  }
+
+  @Override
+  protected WXErrorCode getErrorCode() {
+    return WXErrorCode.WX_ERR_DOM_CREATEBODY;
+  }
+
+  @Override
+  protected String getStatementName() {
+    return "createBody";
+  }
+
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(WXDomObject.ROOT);
+    WXSDKInstance instance = context.getInstance();
+    if (instance == null || instance.getContext() == null) {
+      WXLogUtils.e("instance is null or instance is destroy!");
+      return;
+    }
+    try {
+      long start = System.currentTimeMillis();
+      component.createView();
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.renderPerformanceLog("createView", (System.currentTimeMillis() - start));
+      }
+      start = System.currentTimeMillis();
+      component.applyLayoutAndEvent(component);
+      component.bindData(component);
+
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.renderPerformanceLog("bind", (System.currentTimeMillis() - start));
+      }
+
+      if (component instanceof WXScroller) {
+        WXScroller scroller = (WXScroller) component;
+        if (scroller.getInnerView() instanceof ScrollView) {
+          instance.setRootScrollView((ScrollView) scroller.getInnerView());
+        }
+      }
+      instance.onRootCreated(component);
+      if (instance.getRenderStrategy() != WXRenderStrategy.APPEND_ONCE) {
+        instance.onCreateFinish();
+      }
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    } catch (Exception e) {
+      WXLogUtils.e("create body failed.", e);
+    }
+  }
+
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
new file mode 100644
index 0000000..11b6534
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.RenderActionContext;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+
+final class CreateFinishAction extends AbstractLayoutFinishAction {
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXSDKInstance instance = context.getInstance();
+    if (instance.getRenderStrategy() == WXRenderStrategy.APPEND_ONCE) {
+      instance.onCreateFinish();
+    }
+    instance.onRenderSuccess(mLayoutWidth, mLayoutHeight);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/GetComponentRectAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/GetComponentRectAction.java
new file mode 100644
index 0000000..cf8e224
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/GetComponentRectAction.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import android.graphics.Rect;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import android.view.View;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.bridge.JSCallback;
+import com.taobao.weex.bridge.SimpleJSCallback;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+class GetComponentRectAction implements RenderAction {
+  private final String mRef;
+  private final String mCallback;
+
+
+  GetComponentRectAction(String ref, String callback) {
+    this.mRef = ref;
+    this.mCallback = callback;
+  }
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXSDKInstance instance = context.getInstance();
+    JSCallback jsCallback = new SimpleJSCallback(context.getInstance().getInstanceId(), mCallback);
+    if (instance == null ||instance.isDestroy()) {
+      //do nothing
+    }else if (TextUtils.isEmpty(mRef)) {
+      Map<String, Object> options = new HashMap<>();
+      options.put("result", false);
+      options.put("errMsg", "Illegal parameter");
+      jsCallback.invoke(options);
+    } else if ("viewport".equalsIgnoreCase(mRef)) {
+      callbackViewport(context, jsCallback);
+    } else {
+      WXComponent component = context.getComponent(mRef);
+      Map<String, Object> options = new HashMap<>();
+      if (component != null) {
+        int viewPort = instance.getInstanceViewPortWidth();
+        Map<String, Float> size = new HashMap<>();
+        Rect sizes = component.getComponentSize();
+        size.put("width", getWebPxValue(sizes.width(),viewPort));
+        size.put("height", getWebPxValue(sizes.height(),viewPort));
+        size.put("bottom", getWebPxValue(sizes.bottom,viewPort));
+        size.put("left", getWebPxValue(sizes.left,viewPort));
+        size.put("right", getWebPxValue(sizes.right,viewPort));
+        size.put("top", getWebPxValue(sizes.top,viewPort));
+        options.put("size", size);
+        options.put("result", true);
+      } else {
+        options.put("errMsg", "Component does not exist");
+      }
+      jsCallback.invoke(options);
+    }
+  }
+
+  private void callbackViewport(RenderActionContext context, JSCallback jsCallback) {
+    WXSDKInstance instance = context.getInstance();
+    View container;
+    if ((container = instance.getContainerView()) != null) {
+      Map<String, Object> options = new HashMap<>();
+      Map<String, Float> sizes = new HashMap<>();
+      int[] location = new int[2];
+      instance.getContainerView().getLocationOnScreen(location);
+      int viewport = instance.getInstanceViewPortWidth();
+      sizes.put("left", 0f);
+      sizes.put("top", 0f);
+      sizes.put("right", getWebPxValue(container.getWidth(),viewport));
+      sizes.put("bottom", getWebPxValue(container.getHeight(),viewport));
+      sizes.put("width", getWebPxValue(container.getWidth(),viewport));
+      sizes.put("height", getWebPxValue(container.getHeight(),viewport));
+      options.put("size", sizes);
+      options.put("result", true);
+      jsCallback.invoke(options);
+    } else {
+      Map<String, Object> options = new HashMap<>();
+      options.put("result", false);
+      options.put("errMsg", "Component does not exist");
+      jsCallback.invoke(options);
+    }
+  }
+
+  @NonNull
+  private float getWebPxValue(int value,int viewport) {
+    return WXViewUtils.getWebPxByWidth(value, viewport);
+  }
+
+
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/InvokeMethodAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/InvokeMethodAction.java
new file mode 100644
index 0000000..5661b92
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/InvokeMethodAction.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.alibaba.fastjson.JSONArray;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.WXLogUtils;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+final class InvokeMethodAction implements DOMAction {
+  private final String mRef;
+  private final String mMethod;
+  private final JSONArray mArgs;
+
+  InvokeMethodAction(String ref, String method, JSONArray args) {
+    this.mRef = ref;
+    this.mMethod = method;
+    this.mArgs = args;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    WXComponent comp = context.getCompByRef(mRef);
+    if(comp == null){
+      WXLogUtils.e("DOMAction","target component not found.");
+      return;
+    }
+    comp.invoke(mMethod,mArgs);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/MoveElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/MoveElementAction.java
new file mode 100644
index 0000000..258da68
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/MoveElementAction.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+
+/**
+ * Created by sospartan on 01/03/2017.
+ */
+final class MoveElementAction implements DOMAction, RenderAction {
+  private final String mRef;
+  private final String mParentRef;
+  private final int mIndex;
+
+  private int mNewIndex;
+
+  MoveElementAction(String ref, String parentRef, int index) {
+    mRef = ref;
+    mParentRef = parentRef;
+    mIndex = index;
+    mNewIndex = index;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    WXDomObject domObject = context.getDomByRef(mRef);
+    WXDomObject parentObject = context.getDomByRef(mParentRef);
+    if (domObject == null || domObject.parent == null
+        || parentObject == null || parentObject.hasNewLayout()) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_MOVEELEMENT);
+      }
+      return;
+    }
+    int index = mIndex;
+    if (domObject.parent.equals(parentObject)) {
+      if(parentObject.index(domObject) == index) {
+        return;
+      } else if(domObject.parent.index(domObject)< index){
+        index = index -1;
+      }
+    }
+
+    mNewIndex = index;
+    domObject.parent.remove(domObject);
+    parentObject.add(domObject, mNewIndex);
+
+    context.postRenderTask(this);
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(mRef);
+    WXComponent newParent = context.getComponent(mParentRef);
+    if (component == null || component.getParent() == null
+        || newParent == null || !(newParent instanceof WXVContainer)) {
+      return;
+    }
+    WXVContainer oldParent = component.getParent();
+    oldParent.remove(component,false);
+    ((WXVContainer) newParent).addChild(component, mNewIndex);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
new file mode 100644
index 0000000..c46b8d9
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.dom.RenderActionContext;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+
+class RefreshFinishAction extends AbstractLayoutFinishAction {
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXSDKInstance instance = context.getInstance();
+    instance.onRefreshSuccess(mLayoutWidth, mLayoutHeight);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveElementAction.java
new file mode 100644
index 0000000..4b03f1d
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveElementAction.java
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXVContainer;
+
+/**
+ * Created by sospartan on 27/02/2017.
+ */
+final class RemoveElementAction implements DOMAction, RenderAction {
+  private final String mRef;
+
+  RemoveElementAction(String ref) {
+    mRef = ref;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    WXDomObject domObject = context.getDomByRef(mRef);
+    if (domObject == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT);
+      }
+      return;
+    }
+    WXDomObject parent = domObject.parent;
+    if (parent == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEELEMENT);
+      }
+      return;
+    }
+    domObject.traverseTree(context.getRemoveElementConsumer());
+    parent.remove(domObject);
+    context.unregisterDOMObject(mRef);
+
+    context.postRenderTask(this);
+
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(mRef);
+    if (component == null || component.getParent() == null) {
+      return;
+    }
+    WXVContainer parent = component.getParent();
+    clearRegistryForComponent(context, component);
+    parent.remove(component, true);
+    context.unregisterComponent(mRef);
+  }
+
+  private void clearRegistryForComponent(RenderActionContext context, WXComponent component) {
+    WXComponent removedComponent = context.unregisterComponent(component.getDomObject().getRef());
+    if (removedComponent != null) {
+      removedComponent.removeAllEvent();
+      removedComponent.removeStickyStyle();
+    }
+    if (component instanceof WXVContainer) {
+      WXVContainer container = (WXVContainer) component;
+      int count = container.childCount();
+      for (int i = count - 1; i >= 0; --i) {
+        clearRegistryForComponent(context, container.getChild(i));
+      }
+    }
+
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveEventAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveEventAction.java
new file mode 100644
index 0000000..c79bba9
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/RemoveEventAction.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.IWXRenderTask;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+class RemoveEventAction implements DOMAction, RenderAction {
+  private final String mRef;
+  private final String mEvent;
+
+  private WXDomObject mUpdatedDomObject;
+
+  RemoveEventAction(String ref, String event) {
+    this.mRef = ref;
+    this.mEvent = event;
+  }
+
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    WXDomObject domObject = context.getDomByRef(mRef);
+    if (domObject == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_REMOVEEVENT);
+      }
+      return;
+    }
+    domObject.removeEvent(mEvent);
+    mUpdatedDomObject = domObject;
+    context.postRenderTask(this);
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent comp = context.getComponent(mRef);
+    if(comp != null){
+      //sync dom change to component
+      comp.updateDom(mUpdatedDomObject);
+      comp.removeEvent(mEvent);
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/ScrollToElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/ScrollToElementAction.java
new file mode 100644
index 0000000..1067327
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/ScrollToElementAction.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.ui.IWXRenderTask;
+import com.taobao.weex.ui.component.Scrollable;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+final class ScrollToElementAction implements DOMAction, RenderAction {
+  private final JSONObject mOptions;
+  private final String mRef;
+
+  public ScrollToElementAction(String ref, JSONObject options) {
+    this.mRef = ref;
+    this.mOptions = options;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    context.postRenderTask(this);
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(mRef);
+    if (component == null) {
+      return;
+    }
+
+    Scrollable scroller = component.getParentScroller();
+    if (scroller == null) {
+      return;
+    }
+    scroller.scrollTo(component,mOptions);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
new file mode 100644
index 0000000..3db776e
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.ui.component.WXComponent;
+
+/**
+ * Created by sospartan on 28/02/2017.
+ */
+
+class UpdateAttributeAction implements DOMAction, RenderAction {
+  private final String mRef;
+  private final JSONObject mData;
+
+
+  UpdateAttributeAction(String ref, JSONObject data) {
+    mRef = ref;
+    mData = data;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    final WXDomObject domObject = context.getDomByRef(mRef);
+    if (domObject == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_UPDATEATTRS);
+      }
+      return;
+    }
+
+    domObject.updateAttr(mData);
+    context.postRenderTask(this);
+
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent comp = context.getComponent(mRef);
+    if (comp == null) {
+      return;
+    }
+
+    comp.updateProperties(mData);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateFinishAction.java
new file mode 100644
index 0000000..bfc8895
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateFinishAction.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+
+/**
+ * Created by sospartan on 02/03/2017.
+ */
+
+final class UpdateFinishAction implements DOMAction, RenderAction {
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory()) {
+      return;
+    }
+    context.postRenderTask(this);
+
+    WXSDKInstance instance = context.getInstance();
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    context.getInstance().onUpdateFinish();
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
new file mode 100644
index 0000000..5b7822c
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import android.support.v4.util.ArrayMap;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.adapter.IWXUserTrackAdapter;
+import com.taobao.weex.common.Constants;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.DOMActionContext;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.dom.flex.Spacing;
+import com.taobao.weex.ui.component.WXComponent;
+
+import java.util.Map;
+
+/**
+ * Created by sospartan on 28/02/2017.
+ */
+
+class UpdateStyleAction implements DOMAction, RenderAction {
+  private final String mRef;
+  private final JSONObject mData;
+  private final boolean mIsCausedByPesudo;
+
+  private Spacing mPadding;
+  private Spacing mBorder;
+
+  UpdateStyleAction(String ref, JSONObject data) {
+    this(ref, data, false);
+  }
+
+  UpdateStyleAction(String ref, JSONObject data, boolean byPesudo) {
+    this.mRef = ref;
+    this.mData = data;
+    this.mIsCausedByPesudo = byPesudo;
+  }
+
+  @Override
+  public void executeDom(DOMActionContext context) {
+    if (context.isDestory() || mData == null) {
+      return;
+    }
+    WXSDKInstance instance = context.getInstance();
+    WXDomObject domObject = context.getDomByRef(mRef);
+    if (domObject == null) {
+      if (instance != null) {
+        instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_ERR_DOM_UPDATESTYLE);
+      }
+      return;
+    }
+    mPadding = domObject.getPadding();
+    mBorder = domObject.getBorder();
+
+    Map<String, Object> animationMap = new ArrayMap<>(2);
+    animationMap.put(WXDomObject.TRANSFORM, mData.remove(WXDomObject.TRANSFORM));
+    animationMap.put(WXDomObject.TRANSFORM_ORIGIN, mData.remove(WXDomObject.TRANSFORM_ORIGIN));
+
+    context.addAnimationForElement(mRef, animationMap);
+
+    if (!mData.isEmpty()) {
+      domObject.updateStyle(mData, mIsCausedByPesudo);
+      domObject.traverseTree(context.getApplyStyleConsumer());
+      context.postRenderTask(this);
+    }
+
+    if (instance != null) {
+      instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+    }
+  }
+
+  @Override
+  public void executeRender(RenderActionContext context) {
+    WXComponent component = context.getComponent(mRef);
+    if (component == null) {
+      return;
+    }
+    component.updateProperties(mData);
+
+    if (mData.containsKey(Constants.Name.PADDING) ||
+        mData.containsKey(Constants.Name.PADDING_TOP) ||
+        mData.containsKey(Constants.Name.PADDING_LEFT) ||
+        mData.containsKey(Constants.Name.PADDING_RIGHT) ||
+        mData.containsKey(Constants.Name.PADDING_BOTTOM) ||
+        mData.containsKey(Constants.Name.BORDER_WIDTH)) {
+      Spacing padding = mPadding;
+      Spacing border = mBorder;
+      component.setPadding(padding, border);
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
index bfb378b..3f55245 100755
--- a/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/flex/CSSNode.java
@@ -7,6 +7,8 @@
 
 //import javax.annotation.Nullable;
 
+import android.support.annotation.NonNull;
+
 import java.util.ArrayList;
 
 import static com.taobao.weex.dom.flex.CSSLayout.DIMENSION_HEIGHT;
@@ -339,7 +341,7 @@
   /**
    * Get this node's margin, as defined by cssstyle + default margin.
    */
-  public Spacing getMargin() {
+  public @NonNull Spacing getMargin() {
     return cssstyle.margin;
   }
 
@@ -380,7 +382,7 @@
   /**
    * Get this node's padding, as defined by cssstyle + default padding.
    */
-  public Spacing getPadding() {
+  public @NonNull Spacing getPadding() {
     return cssstyle.padding;
   }
 
@@ -393,7 +395,7 @@
   /**
    * Get this node's border, as defined by cssstyle.
    */
-  public Spacing getBorder() {
+  public @NonNull Spacing getBorder() {
     return cssstyle.border;
   }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/Options.java b/android/sdk/src/main/java/com/taobao/weex/http/Options.java
index 9c8952e..effb241 100644
--- a/android/sdk/src/main/java/com/taobao/weex/http/Options.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/Options.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.http;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/Status.java b/android/sdk/src/main/java/com/taobao/weex/http/Status.java
index 8ee25e6..429f53f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/http/Status.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/Status.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.http;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/WXHttpUtil.java b/android/sdk/src/main/java/com/taobao/weex/http/WXHttpUtil.java
old mode 100755
new mode 100644
index acae7a6..7bb4b03
--- a/android/sdk/src/main/java/com/taobao/weex/http/WXHttpUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/WXHttpUtil.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.http;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
old mode 100755
new mode 100644
index 841878e..4d8de1b
--- a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
@@ -1,219 +1,34 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.http;
 
 import android.net.Uri;
+
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONException;
 import com.alibaba.fastjson.JSONObject;
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.adapter.IWXHttpAdapter;
 import com.taobao.weex.adapter.URIAdapter;
+import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.bridge.JSCallback;
 import com.taobao.weex.bridge.WXBridgeManager;
-import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.common.WXModule;
 import com.taobao.weex.common.WXRequest;
 import com.taobao.weex.common.WXResponse;
@@ -507,20 +322,23 @@
 
     @Override
     public void onHeadersReceived(int statusCode,Map<String,List<String>> headers) {
-      mResponse.put("readyState",2);
-      mResponse.put("status",statusCode);
+      mResponse.put("readyState", 2);
+      mResponse.put("status", statusCode);
 
-      Iterator<Map.Entry<String,List<String>>> it = headers.entrySet().iterator();
-      Map<String,String> simpleHeaders = new HashMap<>();
-      while(it.hasNext()){
-        Map.Entry<String,List<String>> entry = it.next();
-        if(entry.getValue().size()>0)
-          simpleHeaders.put(entry.getKey()==null?"_":entry.getKey(),entry.getValue().get(0));
+      Map<String, String> simpleHeaders = new HashMap<>();
+      if (headers != null) {
+        Iterator<Map.Entry<String, List<String>>> it = headers.entrySet().iterator();
+        while (it.hasNext()) {
+          Map.Entry<String, List<String>> entry = it.next();
+          if (entry.getValue().size() > 0) {
+            simpleHeaders.put(entry.getKey() == null ? "_" : entry.getKey(), entry.getValue().get(0));
+          }
+        }
       }
 
-      mResponse.put("headers",simpleHeaders);
+      mResponse.put("headers", simpleHeaders);
       mRespHeaders = simpleHeaders;
-      if(mProgressCallback!=null){
+      if (mProgressCallback != null) {
         mProgressCallback.invokeAndKeepAlive(mResponse);
       }
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/ComponentCreator.java b/android/sdk/src/main/java/com/taobao/weex/ui/ComponentCreator.java
index db38bfb..eee2b42 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/ComponentCreator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/ComponentCreator.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java
index e6c5789..a1fd8d6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/IExternalComponentGetter.java b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalComponentGetter.java
index cbecb69..63aaf5c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/IExternalComponentGetter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalComponentGetter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java
new file mode 100644
index 0000000..b402bee
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/IExternalMoudleGetter.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui;
+
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.common.WXModule;
+
+/**
+ * Created by zhengshihan on 16/8/25.
+ */
+public interface IExternalMoudleGetter {
+    Class<? extends WXModule> getExternalMoudleClass(String type, WXSDKInstance instance);
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/IFComponentHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/IFComponentHolder.java
index 5afacd9..45344d4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/IFComponentHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/IFComponentHolder.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/IWXRenderTask.java b/android/sdk/src/main/java/com/taobao/weex/ui/IWXRenderTask.java
old mode 100755
new mode 100644
index b76089c..efe0d3e
--- a/android/sdk/src/main/java/com/taobao/weex/ui/IWXRenderTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/IWXRenderTask.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/RenderActionContextImpl.java b/android/sdk/src/main/java/com/taobao/weex/ui/RenderActionContextImpl.java
new file mode 100644
index 0000000..e439022
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/RenderActionContextImpl.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui;
+
+import android.graphics.Rect;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.WXSDKInstance;
+import com.taobao.weex.bridge.JSCallback;
+import com.taobao.weex.common.WXRenderStrategy;
+import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.dom.flex.Spacing;
+import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.ui.animation.WXAnimationBean;
+import com.taobao.weex.ui.animation.WXAnimationModule;
+import com.taobao.weex.ui.component.Scrollable;
+import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentFactory;
+import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Class for rendering view. Method in this class should be run in main thread.
+ * This class is also <strong>not</storng> thread safe.
+ * This class is very similar to {@link com.taobao.weex.dom.WXDomStatement}
+ * @see com.taobao.weex.dom.WXDomStatement
+ */
+class RenderActionContextImpl implements RenderActionContext {
+
+  private Map<String, WXComponent> mRegistry;
+  private WXSDKInstance mWXSDKInstance;
+  /**
+   * The container for weex root view.
+   */
+
+  public RenderActionContextImpl(WXSDKInstance instance) {
+    mWXSDKInstance = instance;
+    mRegistry = new HashMap<>();
+  }
+
+  /**
+   * @see com.taobao.weex.dom.WXDomStatement#destroy()
+   */
+  public void destroy() {
+    mWXSDKInstance = null;
+    mRegistry.clear();
+  }
+
+  public WXSDKInstance getWXSDKInstance() {
+    return mWXSDKInstance;
+  }
+
+  /**
+   * set layout information of View
+   */
+  void setLayout(String ref, WXDomObject domObject) {
+    WXComponent component = mRegistry.get(ref);
+    if (component == null) {
+      return;
+    }
+    component.setLayout(domObject);
+  }
+
+  /**
+   * set extra information of View
+   */
+  void setExtra(String ref, Object extra) {
+    WXComponent component = mRegistry.get(ref);
+    if (component == null) {
+      return;
+    }
+    component.updateExtra(extra);
+  }
+
+  @Override
+  public WXSDKInstance getInstance() {
+    return mWXSDKInstance;
+  }
+
+  @Override
+  public WXComponent getComponent(String ref) {
+    return mRegistry.get(ref);
+  }
+
+  public void registerComponent(String ref, WXComponent comp) {
+    mRegistry.put(ref,comp);
+  }
+
+  public WXComponent unregisterComponent(String ref) {
+    return mRegistry.remove(ref);
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java
index 034d768..6348a22 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java
old mode 100755
new mode 100644
index 40c8246..bfaff30
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderHandler.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderHandler.java
old mode 100755
new mode 100644
index eb687c2..e133d7b
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderHandler.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderHandler.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
old mode 100755
new mode 100644
index 3fc130d..9c74b36
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
@@ -1,236 +1,47 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
-import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.text.TextUtils;
 
 import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.bridge.JSCallback;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.common.WXThread;
+import com.taobao.weex.dom.RenderAction;
+import com.taobao.weex.dom.RenderActionContext;
 import com.taobao.weex.dom.WXDomObject;
-import com.taobao.weex.dom.flex.Spacing;
-import com.taobao.weex.ui.animation.WXAnimationBean;
 import com.taobao.weex.ui.component.WXComponent;
 import com.taobao.weex.utils.WXUtils;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
 /**
- * Manager class for render operation, mainly for managing {@link WXRenderStatement}.
+ * Manager class for render operation, mainly for managing {@link RenderActionContextImpl}.
  * This is <strong>not</strong> a thread-safe class
  */
 public class WXRenderManager {
 
-  private ConcurrentHashMap<String, WXRenderStatement> mRegistries;
+  private ConcurrentHashMap<String, RenderActionContextImpl> mRegistries;
   private WXRenderHandler mWXRenderHandler;
 
   public WXRenderManager() {
@@ -238,7 +49,7 @@
     mWXRenderHandler = new WXRenderHandler();
   }
 
-  public WXRenderStatement getWXRenderStatement(String instanceId) {
+  public RenderActionContext getRenderContext(String instanceId) {
     return mRegistries.get(instanceId);
   }
 
@@ -246,12 +57,12 @@
     if(instanceId == null || TextUtils.isEmpty(ref)){
       return null;
     }
-    WXRenderStatement stmt = getWXRenderStatement(instanceId);
+    RenderActionContext stmt = getRenderContext(instanceId);
     return stmt == null?null:stmt.getComponent(ref);
   }
 
   public WXSDKInstance getWXSDKInstance(String instanceId) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
+    RenderActionContextImpl statement = mRegistries.get(instanceId);
     if (statement == null) {
       return null;
     }
@@ -270,7 +81,7 @@
     if (!WXUtils.isUiThread()) {
       throw new WXRuntimeException("[WXRenderManager] removeRenderStatement can only be called in main thread");
     }
-    WXRenderStatement statement = mRegistries.remove(instanceId);
+    RenderActionContextImpl statement = mRegistries.remove(instanceId);
     if (statement != null) {
       statement.destroy();
     }
@@ -290,28 +101,25 @@
     }));
   }
 
+  public void runOnThread(final String instanceId, final RenderAction action) {
+    mWXRenderHandler.post(WXThread.secure(new Runnable() {
+
+      @Override
+      public void run() {
+        if (mRegistries.get(instanceId) == null) {
+          return;
+        }
+        action.executeRender(getRenderContext(instanceId));
+      }
+    }));
+  }
+
   public void registerInstance(WXSDKInstance instance) {
-    mRegistries.put(instance.getInstanceId(), new WXRenderStatement(instance));
-  }
-
-  public void createBody(String instanceId, WXComponent component) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.createBody(component);
-  }
-
-  public WXComponent createBodyOnDomThread(String instanceId, WXDomObject domObject) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return null;
-    }
-    return statement.createBodyOnDomThread(domObject);
+    mRegistries.put(instance.getInstanceId(), new RenderActionContextImpl(instance));
   }
 
   public void setLayout(String instanceId, String ref, WXDomObject domObject) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
+    RenderActionContextImpl statement = mRegistries.get(instanceId);
     if (statement == null) {
       return;
     }
@@ -322,142 +130,19 @@
    * Set extra info, other than attribute and style
    */
   public void setExtra(String instanceId, String ref, Object extra) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
+    RenderActionContextImpl statement = mRegistries.get(instanceId);
     if (statement == null) {
       return;
     }
     statement.setExtra(ref, extra);
   }
 
-  public void setPadding(String instanceId, String ref, Spacing padding, Spacing border) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.setPadding(ref, padding, border);
-  }
-
-  public void addComponent(String instanceId, WXDomObject dom, String parentRef, int index) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.addComponent(dom, parentRef, index);
-  }
-
-  public @Nullable WXComponent createComponentOnDomThread(String instanceId, WXDomObject dom, String parentRef, int index) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return null;
-    }
-    return statement.createComponentOnDomThread(dom, parentRef, index);
-  }
-
-  public void addComponent(String instanceId, WXComponent component, String parentRef, int index) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.addComponent(component, parentRef, index);
-  }
-
-  public void removeComponent(String instanceId, String ref) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.removeComponent(ref);
-  }
-
-  public void moveComponent(String instanceId, String ref, String parentRef, int index) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.move(ref, parentRef, index);
-  }
-
-  public void updateAttrs(String instanceId, String ref, Map<String, Object> attrs) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateAttrs(ref, attrs);
-  }
-
-  public void updateStyle(String instanceId, String ref, Map<String, Object> style) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateStyle(ref, style);
-  }
-
-  public void addEvent(String instanceId, String ref, String type) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return ;
-    }
-    statement.addEvent(ref, type);
-  }
-
-  public void removeEvent(String instanceId, String ref, String type) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return ;
-    }
-    statement.removeEvent(ref, type);
-  }
-
-  public void scrollToComponent(String instanceId, String ref, Map<String, Object> options) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.scrollTo(ref, options);
-  }
-
-  public void createFinish(String instanceId, int width, int height) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.createFinish(width, height);
-  }
-
-  public void refreshFinish(String instanceId, int width, int height) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.refreshFinish(width, height);
-  }
-
-  public void updateFinish(String instanceId) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.updateFinish();
-  }
-
-
-  public void startAnimation(String instanceId, @NonNull String ref,
-                             @NonNull WXAnimationBean animationBean, @Nullable String
-      callBack) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      return;
-    }
-    statement.startAnimation(ref, animationBean, callBack);
-  }
-
   public List<WXSDKInstance> getAllInstances() {
     ArrayList<WXSDKInstance> instances = null;
     if (mRegistries != null && !mRegistries.isEmpty()) {
       instances = new ArrayList<WXSDKInstance>();
-      for (Map.Entry<String, WXRenderStatement> entry : mRegistries.entrySet()) {
-        WXRenderStatement renderStatement = entry.getValue();
+      for (Map.Entry<String, RenderActionContextImpl> entry : mRegistries.entrySet()) {
+        RenderActionContextImpl renderStatement = entry.getValue();
         if (renderStatement != null) {
           instances.add(renderStatement.getWXSDKInstance());
         }
@@ -466,15 +151,11 @@
     return instances;
   }
 
-  public void getComponentSize(String instanceId, String ref, JSCallback callback) {
-    WXRenderStatement statement = mRegistries.get(instanceId);
-    if (statement == null) {
-      Map<String, Object> options = new HashMap<>();
-      options.put("result", false);
-      options.put("errMsg", "Component does not exist");
-      callback.invoke(options);
-      return;
+  public void registerComponent(String instanceId, String ref, WXComponent comp) {
+    RenderActionContextImpl statement = mRegistries.get(instanceId);
+    if (statement != null) {
+      statement.registerComponent(ref,comp);
     }
-    statement.getComponentSize(ref, callback);
   }
+
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
deleted file mode 100755
index 0d3eb4e..0000000
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderStatement.java
+++ /dev/null
@@ -1,556 +0,0 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
- */
-package com.taobao.weex.ui;
-
-import android.graphics.Rect;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.widget.ScrollView;
-
-import com.alibaba.fastjson.JSONObject;
-import com.taobao.weex.WXEnvironment;
-import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.WXSDKManager;
-import com.taobao.weex.bridge.JSCallback;
-import com.taobao.weex.common.WXRenderStrategy;
-import com.taobao.weex.dom.WXDomObject;
-import com.taobao.weex.dom.flex.Spacing;
-import com.taobao.weex.ui.animation.WXAnimationBean;
-import com.taobao.weex.ui.animation.WXAnimationModule;
-import com.taobao.weex.ui.component.Scrollable;
-import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.ui.component.WXComponentFactory;
-import com.taobao.weex.ui.component.WXScroller;
-import com.taobao.weex.ui.component.WXVContainer;
-import com.taobao.weex.utils.WXLogUtils;
-import com.taobao.weex.utils.WXViewUtils;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Class for rendering view. Method in this class should be run in main thread.
- * This class is also <strong>not</storng> thread safe.
- * This class is very similar to {@link com.taobao.weex.dom.WXDomStatement}
- * @see com.taobao.weex.dom.WXDomStatement
- */
-class WXRenderStatement {
-
-  private Map<String, WXComponent> mRegistry;
-  private WXSDKInstance mWXSDKInstance;
-  /**
-   * The container for weex root view.
-   */
-
-  public WXRenderStatement(WXSDKInstance instance) {
-    mWXSDKInstance = instance;
-    mRegistry = new HashMap<>();
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#destroy()
-   */
-  public void destroy() {
-    mWXSDKInstance = null;
-    mRegistry.clear();
-  }
-
-  public WXSDKInstance getWXSDKInstance() {
-    return mWXSDKInstance;
-  }
-
-  /**
-   * create RootView ,every weex Instance View has a rootView;
-   * @see com.taobao.weex.dom.WXDomStatement#createBody(JSONObject)
-   */
-  void createBody(WXComponent component) {
-    long start = System.currentTimeMillis();
-    component.createView();
-    if (WXEnvironment.isApkDebugable()) {
-      WXLogUtils.renderPerformanceLog("createView", (System.currentTimeMillis() - start));
-    }
-    start = System.currentTimeMillis();
-    component.applyLayoutAndEvent(component);
-    component.bindData(component);
-
-    if (WXEnvironment.isApkDebugable()) {
-      WXLogUtils.renderPerformanceLog("bind", (System.currentTimeMillis() - start));
-    }
-
-    if (component instanceof WXScroller) {
-      WXScroller scroller = (WXScroller) component;
-      if (scroller.getInnerView() instanceof ScrollView) {
-        mWXSDKInstance.setRootScrollView((ScrollView) scroller.getInnerView());
-      }
-    }
-    mWXSDKInstance.onRootCreated(component);
-    if (mWXSDKInstance.getRenderStrategy() != WXRenderStrategy.APPEND_ONCE) {
-      mWXSDKInstance.onCreateFinish();
-    }
-  }
-
-  WXComponent createBodyOnDomThread(WXDomObject dom) {
-    if (mWXSDKInstance == null) {
-      return null;
-    }
-
-    WXComponent rootComp = generateComponentTree(dom, null);
-    return rootComp;
-  }
-
-  /**
-   * set padding style of View
-   */
-  void setPadding(String ref, Spacing padding, Spacing border) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-    component.setPadding(padding, border);
-  }
-
-  /**
-   * set layout information of View
-   */
-  void setLayout(String ref, WXDomObject domObject) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-    component.setLayout(domObject);
-  }
-
-  /**
-   * set extra information of View
-   */
-  void setExtra(String ref, Object extra) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-    component.updateExtra(extra);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#addDom(JSONObject, String, int)
-   */
-  void addComponent(WXDomObject dom, String parentRef, int index) {
-    WXVContainer parent = (WXVContainer) mRegistry.get(parentRef);
-    WXComponent component = generateComponentTree(dom, parent);
-    parent.addChild(component, index);
-  }
-
-  @Nullable WXComponent createComponentOnDomThread(WXDomObject dom, String parentRef, int index) {
-    WXComponent comp = mRegistry.get(parentRef);
-    if(comp == null || !(comp instanceof WXVContainer)){
-      return null;
-    }
-    return generateComponentTree(dom, (WXVContainer) comp);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#addDom(JSONObject, String, int)
-   */
-  void addComponent(WXComponent component, String parentRef, int index) {
-    WXVContainer parent = (WXVContainer) mRegistry.get(parentRef);
-    if (parent == null || component == null) {
-      return;
-    }
-
-    parent.addChild(component, index);
-    parent.createChildViewAt(index);
-    component.applyLayoutAndEvent(component);
-    component.bindData(component);
-  }
-
-  /**
-   *@see com.taobao.weex.dom.WXDomStatement#removeDom(String)
-   */
-  WXComponent removeComponent(String ref) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null || component.getParent() == null) {
-      return component;
-    }
-    WXVContainer parent = component.getParent();
-    clearRegistryForComponent(component);
-    parent.remove(component,true);
-    mRegistry.remove(ref);
-    return component;
-  }
-
-  public WXComponent getComponent(String ref) {
-    return mRegistry.get(ref);
-  }
-
-  /**
-   * Clear registry information that current instance contains.
-   */
-  private void clearRegistryForComponent(WXComponent component) {
-    WXComponent removedComponent = mRegistry.remove(component.getDomObject().getRef());
-    if (removedComponent != null) {
-      removedComponent.removeAllEvent();
-      removedComponent.removeStickyStyle();
-    }
-    if (component instanceof WXVContainer) {
-      WXVContainer container = (WXVContainer) component;
-      int count = container.childCount();
-      for (int i = count - 1; i >= 0; --i) {
-        clearRegistryForComponent(container.getChild(i));
-      }
-    }
-
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#moveDom(String, String, int)
-   */
-  void move(String ref, String parentRef, int index) {
-    WXComponent component = mRegistry.get(ref);
-    WXComponent newParent = mRegistry.get(parentRef);
-    if (component == null || component.getParent() == null
-        || newParent == null || !(newParent instanceof WXVContainer)) {
-      return;
-    }
-    WXVContainer oldParent = component.getParent();
-    oldParent.remove(component,false);
-    ((WXVContainer) newParent).addChild(component, index);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#addEvent(String, String)
-   */
-  void addEvent(String ref, String type) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return ;
-    }
-    component.addEvent(type);
-  }
-
-  /**
-   * @see WXDomObject#removeEvent(String)
-   */
-  void removeEvent(String ref, String type) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return ;
-    }
-    component.removeEvent(type);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#updateAttrs(String, JSONObject)
-   */
-  void updateAttrs(String ref, Map<String, Object> attrs) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-
-    component.updateProperties(attrs);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#updateStyle(String, JSONObject)
-   */
-  void updateStyle(String ref, Map<String, Object> style) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-
-    component.updateProperties(style);
-  }
-
-  /**
-   * @see com.taobao.weex.dom.WXDomStatement#scrollToDom(String, JSONObject)
-   */
-  void scrollTo(String ref, Map<String, Object> options) {
-    WXComponent component = mRegistry.get(ref);
-    if (component == null) {
-      return;
-    }
-
-    Scrollable scroller = component.getParentScroller();
-    if (scroller == null) {
-      return;
-    }
-    scroller.scrollTo(component,options);
-  }
-
-  /**
-   * weex render finish
-   * @see  com.taobao.weex.dom.WXDomStatement#createFinish()
-   */
-  void createFinish(int width, int height) {
-    if (mWXSDKInstance.getRenderStrategy() == WXRenderStrategy.APPEND_ONCE) {
-      mWXSDKInstance.onCreateFinish();
-    }
-    mWXSDKInstance.onRenderSuccess(width, height);
-  }
-
-  /**
-   * weex refresh finish
-   * @see com.taobao.weex.dom.WXDomStatement#refreshFinish()
-   */
-  void refreshFinish(int width, int height) {
-    mWXSDKInstance.onRefreshSuccess(width, height);
-  }
-
-  /**
-   * weex refresh finish
-   * @see WXSDKInstance#onUpdateFinish()
-   */
-  void updateFinish() {
-    mWXSDKInstance.onUpdateFinish();
-  }
-
-
-  private WXComponent generateComponentTree(WXDomObject dom, WXVContainer parent) {
-    if (dom == null ) {
-      return null;
-    }
-    WXComponent component = WXComponentFactory.newInstance(mWXSDKInstance, dom,parent);
-
-    mRegistry.put(dom.getRef(), component);
-    if (component instanceof WXVContainer) {
-      WXVContainer parentC = (WXVContainer) component;
-      int count = dom.childCount();
-      WXDomObject child = null;
-      for (int i = 0; i < count; ++i) {
-        child = dom.getChild(i);
-        if (child != null) {
-          parentC.addChild(generateComponentTree(child, parentC));
-        }
-      }
-    }
-
-    return component;
-  }
-
-  void startAnimation(@NonNull String ref, @NonNull WXAnimationBean animationBean, @Nullable String callBack) {
-    WXAnimationModule.startAnimation(mWXSDKInstance, mRegistry.get(ref), animationBean, callBack);
-  }
-
-  public void getComponentSize(String ref, JSCallback callback) {
-    WXComponent component = mRegistry.get(ref);
-    Map<String, Object> options = new HashMap<>();
-    if (component != null) {
-      Map<String, String> size = new HashMap<>();
-      Rect sizes = component.getComponentSize();
-      size.put("width", String.valueOf(WXViewUtils.getWebPxByWidth(sizes.width(),mWXSDKInstance.getViewPortWidth())));
-      size.put("height", String.valueOf(WXViewUtils.getWebPxByWidth(sizes.height(),mWXSDKInstance.getViewPortWidth())));
-      size.put("bottom",String.valueOf(WXViewUtils.getWebPxByWidth(sizes.bottom,mWXSDKInstance.getViewPortWidth())));
-      size.put("left",String.valueOf(WXViewUtils.getWebPxByWidth(sizes.left,mWXSDKInstance.getViewPortWidth())));
-      size.put("right",String.valueOf(WXViewUtils.getWebPxByWidth(sizes.right,mWXSDKInstance.getViewPortWidth())));
-      size.put("top",String.valueOf(WXViewUtils.getWebPxByWidth(sizes.top,mWXSDKInstance.getViewPortWidth())));
-      options.put("size", size);
-      options.put("result", true);
-    } else {
-      options.put("errMsg", "Component does not exist");
-    }
-    callback.invoke(options);
-  }
-}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/BackgroundColorProperty.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/BackgroundColorProperty.java
new file mode 100644
index 0000000..219f295
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/BackgroundColorProperty.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package com.taobao.weex.ui.animation;
+
+
+import android.graphics.Color;
+import android.graphics.drawable.ColorDrawable;
+import android.util.Property;
+import android.view.View;
+
+import com.taobao.weex.ui.view.border.BorderDrawable;
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+public class BackgroundColorProperty extends Property<View, Integer> {
+
+  private final static String TAG = "BackgroundColorAnimation";
+
+  public BackgroundColorProperty() {
+    super(Integer.class, WXAnimationBean.Style.BACKGROUND_COLOR);
+  }
+
+  @Override
+  public Integer get(View object) {
+    int color;
+    BorderDrawable borderDrawable;
+    if ((borderDrawable = WXViewUtils.getBorderDrawable(object)) != null) {
+      color = borderDrawable.getColor();
+    } else if (object.getBackground() instanceof ColorDrawable) {
+      color = ((ColorDrawable) object.getBackground()).getColor();
+    } else {
+      color = Color.TRANSPARENT;
+      WXLogUtils.e(TAG, "Unsupported background type");
+    }
+    return color;
+  }
+
+  @Override
+  public void set(View object, Integer value) {
+    BorderDrawable borderDrawable;
+    if ((borderDrawable = WXViewUtils.getBorderDrawable(object)) != null) {
+      borderDrawable.setColor(value);
+    } else if (object.getBackground() instanceof ColorDrawable) {
+      ((ColorDrawable) object.getBackground()).setColor(value);
+    } else {
+      WXLogUtils.e(TAG, "Unsupported background type");
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java
index 43117f5..31245b6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/DimensionUpdateListener.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.animation;
@@ -220,16 +34,16 @@
   private Pair<Integer, Integer> height;
   private IntEvaluator intEvaluator;
 
-  DimensionUpdateListener(@NonNull View view) {
+  public DimensionUpdateListener(@NonNull View view) {
     this.view = view;
     intEvaluator = new IntEvaluator();
   }
 
-  void setWidth(int from, int to) {
+  public void setWidth(int from, int to) {
     width = new Pair<>(from, to);
   }
 
-  void setHeight(int from, int to) {
+  public void setHeight(int from, int to) {
     height = new Pair<>(from, to);
   }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java
old mode 100755
new mode 100644
index 7d89db1..9d8b47e
--- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationBean.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.animation;
 
@@ -411,8 +225,7 @@
           }
         }
       }
-      return parsePivot(Arrays.asList(WXAnimationBean.Style.CENTER,
-                                      WXAnimationBean.Style.CENTER), width, height,viewportW);
+      return null;
     }
 
     private static Pair<Float, Float> parsePivot(@NonNull List<String> list, int width, int height,int viewportW) {
@@ -469,7 +282,7 @@
       return defaultMap;
     }
 
-    public Pair<Float, Float> getPivot() {
+    public @Nullable Pair<Float, Float> getPivot() {
       return pivot;
     }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java
old mode 100755
new mode 100644
index 3c037d4..43e4b90
--- a/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/animation/WXAnimationModule.java
@@ -1,423 +1,64 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.animation;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ArgbEvaluator;
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.graphics.drawable.ColorDrawable;
-import android.os.Build;
-import android.os.Message;
-import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.v4.view.animation.PathInterpolatorCompat;
 import android.text.TextUtils;
-import android.util.Pair;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.animation.AccelerateDecelerateInterpolator;
-import android.view.animation.AccelerateInterpolator;
-import android.view.animation.DecelerateInterpolator;
-import android.view.animation.Interpolator;
-import android.view.animation.LinearInterpolator;
 
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.common.WXModule;
+import com.taobao.weex.dom.DOMAction;
+import com.taobao.weex.dom.RenderAction;
 import com.taobao.weex.dom.WXDomHandler;
-import com.taobao.weex.dom.WXDomTask;
+import com.taobao.weex.dom.action.Actions;
 import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.ui.view.border.BorderDrawable;
-import com.taobao.weex.utils.SingleFunctionParser;
-import com.taobao.weex.utils.WXLogUtils;
-import com.taobao.weex.utils.WXResourceUtils;
-import com.taobao.weex.utils.WXUtils;
-import com.taobao.weex.utils.WXViewUtils;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import static com.taobao.weex.dom.action.Actions.getAnimationAction;
 
 public class WXAnimationModule extends WXModule {
 
   @JSMethod
   public void transition(@Nullable String ref, @Nullable String animation, @Nullable String callBack) {
-    if(!TextUtils.isEmpty(ref)&&!TextUtils.isEmpty(animation)) {
-      Message msg = Message.obtain();
-      WXDomTask task = new WXDomTask();
-      task.instanceId = mWXSDKInstance.getInstanceId();
-      task.args = new ArrayList<>();
-      task.args.add(ref);
-      task.args.add(animation);
-      task.args.add(callBack);
-      msg.what = WXDomHandler.MsgType.WX_ANIMATION;
-      msg.obj = task;
+    if (!TextUtils.isEmpty(ref) && !TextUtils.isEmpty(animation) && mWXSDKInstance != null) {
+      DOMAction animationActions = getAnimationAction(ref, animation, callBack);
       //Due to animation module rely on the result of the css-layout and the batch mechanism of
       //css-layout, the animation.transition must be delayed the batch time.
-      WXSDKManager.getInstance().getWXDomManager().sendMessageDelayed(msg, WXDomHandler.DELAY_TIME);
+      WXSDKManager.getInstance().getWXDomManager().postActionDelay(mWXSDKInstance.getInstanceId(),
+                                                                   animationActions,
+                                                                   false, WXDomHandler.DELAY_TIME);
     }
   }
 
-  public static void startAnimation(WXSDKInstance mWXSDKInstance, WXComponent component,
-                                    @NonNull WXAnimationBean animationBean, @Nullable String callback) {
-    if(component == null){
-      return;
-    }
-    if (component.getHostView() == null) {
-      AnimationHolder holder = new AnimationHolder(animationBean, callback);
-      component.postAnimation(holder);
-      return;
-    }
-    try {
-      Animator animator = createAnimator(animationBean, component.getHostView(),mWXSDKInstance.getViewPortWidth());
-      if (animator != null) {
-        Animator.AnimatorListener animatorCallback = createAnimatorListener(mWXSDKInstance, callback);
-        if(Build.VERSION.SDK_INT<Build.VERSION_CODES.JELLY_BEAN_MR2) {
-          component.getHostView().setLayerType(View.LAYER_TYPE_HARDWARE, null);
-        }
-        Interpolator interpolator = createTimeInterpolator(animationBean);
-        if (animatorCallback != null) {
-          animator.addListener(animatorCallback);
-        }
-        if (interpolator != null) {
-          animator.setInterpolator(interpolator);
-        }
-        animator.setDuration(animationBean.duration);
-        animator.start();
-      }
-    } catch (RuntimeException e) {
-      e.printStackTrace();
-      WXLogUtils.e("", e);
-    }
-  }
-
-  private static @Nullable
-  ObjectAnimator createAnimator(@NonNull WXAnimationBean animation, final View target,final int viewPortWidth) {
-    if(target == null){
-      return null;
-    }
-    WXAnimationBean.Style style = animation.styles;
-    if (style != null) {
-      ObjectAnimator animator;
-      List<PropertyValuesHolder> holders =style.getHolders();
-      if (!TextUtils.isEmpty(style.backgroundColor)) {
-        BorderDrawable borderDrawable;
-        if ((borderDrawable=WXViewUtils.getBorderDrawable(target))!=null) {
-          holders.add(PropertyValuesHolder.ofObject(
-              WXAnimationBean.Style.BACKGROUND_COLOR, new ArgbEvaluator(),
-              borderDrawable.getColor(),
-              WXResourceUtils.getColor(style.backgroundColor)));
-        } else if (target.getBackground() instanceof ColorDrawable) {
-          holders.add(PropertyValuesHolder.ofObject(
-              WXAnimationBean.Style.BACKGROUND_COLOR, new ArgbEvaluator(),
-              ((ColorDrawable) target.getBackground()).getColor(),
-              WXResourceUtils.getColor(style.backgroundColor)));
-        }
-      }
-      if (style.getPivot() != null) {
-        Pair<Float, Float> pair = style.getPivot();
-        target.setPivotX(pair.first);
-        target.setPivotY(pair.second);
-      }
-      animator = ObjectAnimator.ofPropertyValuesHolder(
-          target, holders.toArray(new PropertyValuesHolder[holders.size()]));
-      animator.setStartDelay(animation.delay);
-      if (target.getLayoutParams() != null &&
-          (!TextUtils.isEmpty(style.width) || !TextUtils.isEmpty(style.height))) {
-        DimensionUpdateListener listener = new DimensionUpdateListener(target);
-        ViewGroup.LayoutParams layoutParams = target.getLayoutParams();
-        if (!TextUtils.isEmpty(style.width)) {
-          listener.setWidth(layoutParams.width,
-                            (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.width),viewPortWidth));
-        }
-        if (!TextUtils.isEmpty(style.height)) {
-          listener.setHeight(layoutParams.height,
-                             (int) WXViewUtils.getRealPxByWidth(WXUtils.getFloat(style.height),viewPortWidth));
-        }
-        animator.addUpdateListener(listener);
-      }
-      return animator;
-    } else {
-      return null;
-    }
-  }
-
-  public static
-  @Nullable
-  Animator.AnimatorListener createAnimatorListener(final WXSDKInstance mWXSDKInstance, @Nullable final String callBack) {
-    if (!TextUtils.isEmpty(callBack)) {
-      return new AnimatorListenerAdapter() {
-        @Override
-        public void onAnimationEnd(Animator animation) {
-          if (mWXSDKInstance == null) {
-            WXLogUtils.e("WXRenderStatement-onAnimationEnd mWXSDKInstance == null NPE");
-          } else {
-            WXSDKManager.getInstance().callback(mWXSDKInstance.getInstanceId(),
-                                                callBack,
-                                                new HashMap<String, Object>());
-          }
-        }
-      };
-    } else {
-      return null;
-    }
-  }
-
-  private static @Nullable
-  Interpolator createTimeInterpolator(@NonNull WXAnimationBean animation) {
-    String interpolator = animation.timingFunction;
-    if (!TextUtils.isEmpty(interpolator)) {
-      switch (interpolator) {
-        case WXAnimationBean.EASE_IN:
-          return new AccelerateInterpolator();
-        case WXAnimationBean.EASE_OUT:
-          return new DecelerateInterpolator();
-        case WXAnimationBean.EASE_IN_OUT:
-          return new AccelerateDecelerateInterpolator();
-        case WXAnimationBean.LINEAR:
-          return new LinearInterpolator();
-        default:
-          //Parse cubic-bezier
-          try {
-            SingleFunctionParser<Float> parser = new SingleFunctionParser<>(
-                animation.timingFunction,
-                new SingleFunctionParser.FlatMapper<Float>() {
-                  @Override
-                  public Float map(String raw) {
-                    return Float.parseFloat(raw);
-                  }
-                });
-            List<Float> params = parser.parse(WXAnimationBean.CUBIC_BEZIER);
-            if (params != null && params.size() == WXAnimationBean.NUM_CUBIC_PARAM) {
-              return PathInterpolatorCompat.create(
-                  params.get(0), params.get(1), params.get(2), params.get(3));
-            }
-            else {
-              return null;
-            }
-          }catch (RuntimeException e){
-            return null;
-          }
-      }
-    }
-    return null;
-  }
-
   //add by moxun on 12/26/2016
   public static class AnimationHolder {
+
     private WXAnimationBean wxAnimationBean;
     private String callback;
 
     public void execute(WXSDKInstance mInstance, WXComponent component) {
-      WXAnimationModule.startAnimation(mInstance, component, wxAnimationBean, callback);
+      RenderAction action = Actions.getAnimationAction(component.getRef(), wxAnimationBean, callback);
+      WXSDKManager.getInstance().getWXRenderManager().runOnThread(mInstance.getInstanceId(), action);
     }
 
-    private AnimationHolder(WXAnimationBean wxAnimationBean, String callback) {
+    public AnimationHolder(WXAnimationBean wxAnimationBean, String callback) {
       this.wxAnimationBean = wxAnimationBean;
       this.callback = callback;
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/AbstractEditComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/AbstractEditComponent.java
index 21063d9..c5aa02b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/AbstractEditComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/AbstractEditComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -227,10 +41,13 @@
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.bridge.WXBridgeManager;
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.dom.WXStyle;
+import com.taobao.weex.ui.component.helper.SoftKeyboardDetector;
 import com.taobao.weex.ui.component.helper.WXTimeInputHelper;
 import com.taobao.weex.ui.view.WXEditText;
+import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXResourceUtils;
 import com.taobao.weex.utils.WXUtils;
 
@@ -254,6 +71,8 @@
   private int mEditorAction = EditorInfo.IME_ACTION_DONE;
   private String mReturnKeyType = null;
   private List<TextView.OnEditorActionListener> mEditorActionListeners;
+  private boolean mListeningKeyboard = false;
+  private SoftKeyboardDetector.Unregister mUnregister;
 
   public AbstractEditComponent(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, boolean isLazy) {
     super(instance, dom, parent, isLazy);
@@ -279,6 +98,14 @@
         setPseudoClassStatus(Constants.PSEUDO.FOCUS,hasFocus);
       }
     });
+
+    addKeyboardListener(host);
+  }
+
+  @Override
+  protected boolean isConsumeTouch() {
+    //EditText always consume touch event except disabled.
+    return !isDisabled();
   }
 
   private void applyOnClickListener() {
@@ -326,7 +153,7 @@
       editText.setHintTextColor(colorInt);
     }
 
-    editText.setTextSize(TypedValue.COMPLEX_UNIT_PX, WXStyle.getFontSize(getDomObject().getStyles(),getInstance().getViewPortWidth()));
+    editText.setTextSize(TypedValue.COMPLEX_UNIT_PX, WXStyle.getFontSize(getDomObject().getStyles(),getInstance().getInstanceViewPortWidth()));
     editText.setText(getDomObject().getAttrs().optString(Constants.Name.VALUE));
   }
 
@@ -343,13 +170,18 @@
       addFocusChangeListener(new OnFocusChangeListener() {
         @Override
         public void onFocusChange(boolean hasFocus) {
+          ImmutableDomObject domObject = getDomObject();
+          if(domObject == null){
+            return;
+          }
+
           if (hasFocus) {
             mLastValue = text.getText().toString();
           } else {
             CharSequence newValue = text.getText();
             newValue = newValue == null ? "" : newValue;
             if (!newValue.toString().equals(mLastValue)) {
-              String event = getDomObject().getEvents().contains(Constants.Event.CHANGE) ? Constants.Event.CHANGE : null;
+              String event = domObject.getEvents().contains(Constants.Event.CHANGE) ? Constants.Event.CHANGE : null;
               fireEvent(event, newValue.toString());
               mLastValue = text.getText().toString();
             }
@@ -360,11 +192,12 @@
       addEditorActionListener(new TextView.OnEditorActionListener() {
         @Override
         public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
-          if (actionId == mEditorAction) {
+          ImmutableDomObject domObject = getDomObject();
+          if (domObject != null && actionId == mEditorAction) {
             CharSequence newValue = text.getText();
             newValue = newValue == null ? "" : newValue;
             if (!newValue.toString().equals(mLastValue)) {
-              String eventName = getDomObject().getEvents().contains(Constants.Event.CHANGE) ? Constants.Event.CHANGE : null;
+              String eventName = domObject.getEvents().contains(Constants.Event.CHANGE) ? Constants.Event.CHANGE : null;
               fireEvent(eventName, newValue.toString());
               mLastValue = text.getText().toString();
             }
@@ -386,11 +219,12 @@
 
         @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) {
-          if (mBeforeText.equals(s.toString())) {
+          ImmutableDomObject domObject = getDomObject();
+          if (mBeforeText.equals(s.toString()) || domObject == null) {
             return;
           }
 
-          String event = getDomObject().getEvents().contains(Constants.Event.INPUT) ? Constants.Event.INPUT : null;
+          String event = domObject.getEvents().contains(Constants.Event.INPUT) ? Constants.Event.INPUT : null;
           fireEvent(event, s.toString());
 
           mBeforeText = s.toString();
@@ -418,6 +252,10 @@
         }
       });
     }
+
+    if (Constants.Event.KEYBOARD.equals(type)) {
+      mListeningKeyboard = true;
+    }
   }
 
   private void fireEvent(String event, String value) {
@@ -619,7 +457,7 @@
   @WXComponentProp(name = Constants.Name.FONT_SIZE)
   public void setFontSize(String fontSize) {
     if (getHostView() != null && fontSize != null ) {
-      getHostView().setTextSize(TypedValue.COMPLEX_UNIT_PX, WXStyle.getFontSize(getDomObject().getStyles(),getInstance().getViewPortWidth()));
+      getHostView().setTextSize(TypedValue.COMPLEX_UNIT_PX, WXStyle.getFontSize(getDomObject().getStyles(),getInstance().getInstanceViewPortWidth()));
     }
   }
 
@@ -699,6 +537,9 @@
       case Constants.Value.URL:
         inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI;
         break;
+      case Constants.Value.NUMBER:
+        inputType = InputType.TYPE_CLASS_NUMBER;
+        break;
       default:
         inputType = InputType.TYPE_CLASS_TEXT;
     }
@@ -862,6 +703,41 @@
     }
   }
 
+  private void addKeyboardListener(final WXEditText host) {
+    if (host == null) {
+      return;
+    }
+    Context context = host.getContext();
+    if (context != null && context instanceof Activity) {
+      SoftKeyboardDetector.registerKeyboardEventListener((Activity) context, new SoftKeyboardDetector.OnKeyboardEventListener() {
+        @Override
+        public void onKeyboardEvent(boolean isShown) {
+          if (mListeningKeyboard) {
+            Map<String, Object> event = new HashMap<>(1);
+            event.put("isShow", isShown);
+            fireEvent(Constants.Event.KEYBOARD, event);
+          }
+          if (!isShown) {
+            blur();
+          }
+        }
+      });
+    }
+  }
+
+  @Override
+  public void destroy() {
+    super.destroy();
+    if (mUnregister != null) {
+      try {
+        mUnregister.execute();
+        mUnregister = null;
+      } catch (Throwable throwable) {
+        WXLogUtils.w("Unregister throw ", throwable);
+      }
+    }
+  }
+
   private interface ReturnTypes {
     String DEFAULT = "default";
     String GO = "go";
@@ -870,4 +746,4 @@
     String SEND = "send";
     String DONE = "done";
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/AppearanceHelper.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/AppearanceHelper.java
index dcf7309..a9ea9fd 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/AppearanceHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/AppearanceHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/NestedContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/NestedContainer.java
index 5a94bc5..0451502 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/NestedContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/NestedContainer.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -217,6 +31,8 @@
 
   void renderNewURL(String url);
 
+  void reload();
+
   interface OnNestedInstanceEventListener {
     void onException(NestedContainer comp, String errCode, String msg);
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/Scrollable.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/Scrollable.java
index 7b2fd6c..1094bd1 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/Scrollable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/Scrollable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/Textarea.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/Textarea.java
index 89db676..44b5754 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/Textarea.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/Textarea.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXA.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXA.java
old mode 100755
new mode 100644
index 420d935..aae667f
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXA.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXA.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBaseRefresh.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBaseRefresh.java
old mode 100755
new mode 100644
index 6d53c28..146fd27
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBaseRefresh.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBaseRefresh.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -236,16 +50,6 @@
   }
 
   @Override
-  protected void setHostLayoutParams(WXFrameLayout host, int width, int height, int left, int right, int top, int bottom) {
-    if (getParent() instanceof Scrollable) {
-      //do nothing
-      return;
-    }else{
-      super.setHostLayoutParams(host, width, height, left, right, top, bottom);
-    }
-  }
-
-  @Override
   public void addChild(WXComponent child, int index) {
     super.addChild(child, index);
     this.checkLoadingIndicator(child);
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBasicComponentType.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBasicComponentType.java
old mode 100755
new mode 100644
index 6d8da28..f5c79bc
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBasicComponentType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXBasicComponentType.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -218,6 +32,8 @@
   public static final String SLIDER = "slider";
   public static final String SLIDER_NEIGHBOR = "slider-neighbor";
   public static final String LIST = "list";
+  public static final String RECYCLER = "recycler";
+  public static final String WATERFALL = "waterfall";
   public static final String VLIST = "vlist";
   public static final String HLIST = "hlist";
   public static final String CELL = "cell";
@@ -234,5 +50,6 @@
   public static final String REFRESH = "refresh";
   public static final String LOADING = "loading";
   public static final String LOADING_INDICATOR = "loading-indicator";
+  public static final String CYCLE_SLIDER = "cycleslider";
 
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
old mode 100755
new mode 100644
index cd7a11b..df50a48
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
@@ -1,132 +1,24 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/
- * TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- * 1. Definitions.
- * "License" shall mean the terms and conditions for use, reproduction, and distribution as defined
- * by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License.
- * "Legal Entity" shall mean the union of the acting entity and all other entities that control, are
- * controlled by, or are under common control with that entity. For the purposes of this definition,
- * "control" means (i) the power, direct or indirect, to cause the direction or management of such
- * entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
- * outstanding shares, or (iii) beneficial ownership of such entity.
- * "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this
- * License.
- * "Source" form shall mean the preferred form for making modifications, including but not limited
- * to software source code, documentation source, and configuration files.
- * "Object" form shall mean any form resulting from mechanical transformation or translation of a
- * Source form, including but not limited to compiled object code, generated documentation, and
- * conversions to other media types.
- * "Work" shall mean the work of authorship, whether in Source or Object form, made available under
- * the License, as indicated by a copyright notice that is included in or attached to the work (an
- * example is provided in the Appendix below).
- * "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or
- * derived from) the Work and for which the editorial revisions, annotations, elaborations, or other
- * modifications represent, as a whole, an original work of authorship. For the purposes of this
- * License, Derivative Works shall not include works that remain separable from, or merely link (or
- * bind by name) to the interfaces of, the Work and Derivative Works thereof.
- * "Contribution" shall mean any work of authorship, including the original version of the Work and
- * any modifications or additions to that Work or Derivative Works thereof, that is intentionally
- * submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or
- * Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this
- * definition, "submitted" means any form of electronic, verbal, or written communication sent to
- * the Licensor or its representatives, including but not limited to communication on electronic
- * mailing lists, source code control systems, and issue tracking systems that are managed by, or on
- * behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding
- * communication that is conspicuously marked or otherwise designated in writing by the copyright
- * owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work.
- * 2. Grant of Copyright License. Subject to the terms and conditions of this License, each
- * Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,
- * irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display,
- * publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or
- * Object form.
- * 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * (except as stated in this section) patent license to make, have made, use, offer to sell, sell,
- * import, and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed.
- * 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works
- * thereof in any medium, with or without modifications, and in Source or Object form, provided that
- * You meet the following conditions:
- * (a) You must give any other recipients of the Work or Derivative Works a copy of this License;
- * and
- * (b) You must cause any modified files to carry prominent notices stating that You changed the
- * files; and
- * (c) You must retain, in the Source form of any Derivative Works that You distribute, all
- * copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding
- * those notices that do not pertain to any part of the Derivative Works; and
- * (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative
- * Works that You distribute must include a readable copy of the attribution notices contained
- * within such NOTICE file, excluding those notices that do not pertain to any part of the
- * Derivative Works, in at least one of the following places: within a NOTICE text file distributed
- * as part of the Derivative Works; within the Source form or documentation, if provided along with
- * the Derivative Works; or, within a display generated by the Derivative Works, if and wherever
- * such third-party notices normally appear. The contents of the NOTICE file are for informational
- * purposes only and do not modify the License. You may add Your own attribution notices within
- * Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the
- * Work, provided that such additional attribution notices cannot be construed as modifying the
- * License.
- * You may add Your own copyright statement to Your modifications and may provide additional or
- * different license terms and conditions for use, reproduction, or distribution of Your
- * modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and
- * distribution of the Work otherwise complies with the conditions stated in this License.
- * 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution
- * intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms
- * and conditions of this License, without any additional terms or conditions. Notwithstanding the
- * above, nothing herein shall supersede or modify the terms of any separate license agreement you
- * may have executed with Licensor regarding such Contributions.
- * 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file.
- * 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor
- * provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation,
- * any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- * PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or
- * redistributing the Work and assume any risks associated with Your exercise of permissions under
- * this License.
- * 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages.
- * 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works
- * thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty,
- * indemnity, or other liability obligations and/or rights consistent with this License. However, in
- * accepting such obligations, You may act only on Your own behalf and on Your sole responsibility,
- * not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each
- * Contributor harmless for any liability incurred by, or claims asserted against, such Contributor
- * by reason of your accepting any such warranty or additional liability.
- * END OF TERMS AND CONDITIONS
- * APPENDIX: How to apply the Apache License to your work.
- * To apply the Apache License to your work, attach the following boilerplate notice, with the
- * fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include
- * the brackets!)  The text should be enclosed in the appropriate comment syntax for the file
- * format. We also recommend that a file or class name and description of purpose be included on the
- * same "printed page" as the copyright notice for easier identification within third-party
- * archives.
- * Copyright 2016 Alibaba Group
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
+import android.annotation.TargetApi;
 import android.content.Context;
 import android.content.Intent;
 import android.graphics.Color;
@@ -135,6 +27,7 @@
 import android.graphics.Shader;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.LayerDrawable;
+import android.os.Build;
 import android.os.Message;
 import android.support.annotation.CallSuper;
 import android.support.annotation.CheckResult;
@@ -162,6 +55,7 @@
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.dom.WXDomTask;
 import com.taobao.weex.dom.WXStyle;
+import com.taobao.weex.dom.action.Actions;
 import com.taobao.weex.dom.flex.Spacing;
 import com.taobao.weex.ui.IFComponentHolder;
 import com.taobao.weex.ui.animation.WXAnimationModule;
@@ -226,7 +120,11 @@
   private WXAnimationModule.AnimationHolder mAnimationHolder;
   private PesudoStatus mPesudoStatus = new PesudoStatus();
   private boolean mIsDestroyed = false;
-  private boolean mCanRecycled = true;
+  private boolean mIsDisabled = false;
+  private int mType = TYPE_COMMON;
+
+  public static final int TYPE_COMMON = 0;
+  public static final int TYPE_VIRTUAL = 1;
 
   //Holding the animation bean when component is uninitialized
   public void postAnimation(WXAnimationModule.AnimationHolder holder) {
@@ -240,10 +138,10 @@
       Map<String, Object> position = WXDataStructureUtil.newHashMapWithExpectedSize(4);
       int[] location = new int[2];
       mHost.getLocationOnScreen(location);
-      position.put("x", WXViewUtils.getWebPxByWidth(location[0],mInstance.getViewPortWidth()));
-      position.put("y", WXViewUtils.getWebPxByWidth(location[1],mInstance.getViewPortWidth()));
-      position.put("width", WXViewUtils.getWebPxByWidth(mDomObj.getLayoutWidth(),mInstance.getViewPortWidth()));
-      position.put("height", WXViewUtils.getWebPxByWidth(mDomObj.getLayoutHeight(),mInstance.getViewPortWidth()));
+      position.put("x", WXViewUtils.getWebPxByWidth(location[0],mInstance.getInstanceViewPortWidth()));
+      position.put("y", WXViewUtils.getWebPxByWidth(location[1],mInstance.getInstanceViewPortWidth()));
+      position.put("width", WXViewUtils.getWebPxByWidth(mDomObj.getLayoutWidth(),mInstance.getInstanceViewPortWidth()));
+      position.put("height", WXViewUtils.getWebPxByWidth(mDomObj.getLayoutHeight(),mInstance.getInstanceViewPortWidth()));
       param.put(Constants.Name.POSITION, position);
       fireEvent(Constants.Event.CLICK,param);
     }
@@ -315,12 +213,16 @@
   }
 
   public WXComponent(WXSDKInstance instance, WXDomObject dom, WXVContainer parent) {
+    this(instance, dom, parent, TYPE_COMMON);
+  }
+
+  public WXComponent(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, int type) {
     mInstance = instance;
     mContext = mInstance.getContext();
     mParent = parent;
+    mType = type;
     mDomObj = dom.clone();
     mCurrentRef = mDomObj.getRef();
-    mCanRecycled = dom.canRecycled();
     mGestureType = new HashSet<>();
     ++mComponentNum;
     onCreate();
@@ -420,6 +322,10 @@
         view.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
+            if(mGesture != null && mGesture.isTouchEventConsumedByAdvancedGesture()){
+              //event is already consumed by gesture
+              return;
+            }
             for (OnClickListener listener : mHostClickListeners){
               if(listener != null) {
                 listener.onHostViewClick();
@@ -443,12 +349,26 @@
         component = this;
       }
       mCurrentRef = component.getDomObject().getRef();
-      updateProperties(component.getDomObject().getStyles());
-      updateProperties(component.getDomObject().getAttrs());
+      updateStyle(component);
+      updateAttrs(component);
       updateExtra(component.getDomObject().getExtra());
     }
   }
 
+  public void updateStyle(WXComponent component){
+    ImmutableDomObject domObject = component.getDomObject();
+    if(domObject !=null){
+      updateProperties(domObject.getStyles());
+    }
+  }
+
+  public void updateAttrs(WXComponent component){
+    ImmutableDomObject domObject = component.getDomObject();
+    if(domObject !=null){
+      updateProperties(domObject.getAttrs());
+    }
+  }
+
   public void refreshData(WXComponent component){
 
   }
@@ -550,17 +470,13 @@
   }
 
   private void setFixedHostLayoutParams(T host, int width, int height, int left, int right, int top, int bottom){
-    if (host.getParent() instanceof ViewGroup) {
-      ViewGroup viewGroup = (ViewGroup) host.getParent();
-      viewGroup.removeView(host);
-    }
     FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
 
     params.width = width;
     params.height = height;
     params.setMargins(left, top, right, bottom);
     host.setLayoutParams(params);
-    mInstance.addFixedView(host);
+    mInstance.moveFixedView(host);
 
     if (WXEnvironment.isApkDebugable()) {
       WXLogUtils.d("Weex_Fixed_Style", "WXComponent:setLayout :" + left + " " + top + " " + width + " " + height);
@@ -572,8 +488,11 @@
    * After component's layout result is apply to view. May be invoke multiple times since
    * DOM can be changed in js runtime.
    */
-  protected void onFinishLayout(){
-
+  protected void onFinishLayout() {
+    Object param = mDomObj.getStyles() != null ? mDomObj.getStyles().get(Constants.Name.BACKGROUND_IMAGE) : null;
+    if (param != null) {
+      setBackgroundImage(param.toString());
+    }
   }
 
   public void setPadding(Spacing padding, Spacing border) {
@@ -621,8 +540,9 @@
   }
 
 
+  @Deprecated
   public void updateProperties(Map<String, Object> props) {
-    if (props == null || mHost == null) {
+    if (props == null || (mHost == null && !isVirtualComponent())) {
       return;
     }
 
@@ -687,8 +607,8 @@
           setBackgroundColor(bgColor);
         return true;
       case Constants.Name.BACKGROUND_IMAGE:
-        String bgImage = WXUtils.getString(param,null);
-        if(bgImage!=null){
+        String bgImage = WXUtils.getString(param, null);
+        if (bgImage != null && mHost != null) {
           setBackgroundImage(bgImage);
         }
         return true;
@@ -747,6 +667,14 @@
         String fixedSize = WXUtils.getString(param, PROP_FS_MATCH_PARENT);
         setFixedSize(fixedSize);
         return true;
+      case Constants.Name.ARIA_LABEL:
+        String label = WXUtils.getString(param,"");
+        setAriaLabel(label);
+        return true;
+      case Constants.Name.ARIA_HIDDEN:
+        boolean isHidden = WXUtils.getBoolean(param,false);
+        setAriaHidden(isHidden);
+        return true;
       case Constants.Name.WIDTH:
       case Constants.Name.MIN_WIDTH:
       case Constants.Name.MAX_WIDTH:
@@ -779,6 +707,21 @@
     }
   }
 
+  @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+  protected void setAriaHidden(boolean isHidden) {
+    View host = getHostView();
+    if(host != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
+      host.setImportantForAccessibility(isHidden?View.IMPORTANT_FOR_ACCESSIBILITY_NO:View.IMPORTANT_FOR_ACCESSIBILITY_YES);
+    }
+  }
+
+  protected void setAriaLabel(String label) {
+    View host = getHostView();
+    if(host != null){
+      host.setContentDescription(label);
+    }
+  }
+
   /**
    * Avoid large size view fail in GPU-Animation.
    * @param fixedSize
@@ -807,15 +750,7 @@
    * @param type
    */
   protected void appendEventToDOM(String type){
-    Message message = Message.obtain();
-    WXDomTask task = new WXDomTask();
-    task.instanceId = getInstanceId();
-    task.args = new ArrayList<>();
-    task.args.add(getRef());
-    task.args.add(type);
-    message.obj = task;
-    message.what = WXDomHandler.MsgType.WX_DOM_ADD_EVENT;
-    WXSDKManager.getInstance().getWXDomManager().sendMessage(message);
+    WXSDKManager.getInstance().getWXDomManager().postAction(getInstanceId(), Actions.getAddEvent(getRef(),type),false);
   }
 
   /**
@@ -938,7 +873,7 @@
   protected void createViewImpl() {
     if (mContext != null) {
       mHost = initComponentHostView(mContext);
-      if (mHost == null) {
+      if (mHost == null && !isVirtualComponent()) {
         //compatible
         initView();
       }
@@ -1045,6 +980,9 @@
       return;
     }
     for (String event : mDomObj.getEvents()) {
+      if(event == null){
+        continue;
+      }
       removeEventFromView(event);
     }
     mAppendEvents.clear();//only clean append events, not dom's events.
@@ -1056,7 +994,10 @@
     }
     if(mHost != null) {
       mHost.setOnFocusChangeListener(null);
-      mHost.setOnClickListener(null);
+      if (mHostClickListeners != null && mHostClickListeners.size() > 0) {
+        mHostClickListeners.clear();
+        mHost.setOnClickListener(null);
+      }
     }
   }
 
@@ -1077,13 +1018,22 @@
     return mDomObj.getStyles().isSticky();
   }
 
+  public boolean isFixed() {
+    return mDomObj.getStyles().isFixed();
+  }
+
   public void setDisabled(boolean disabled) {
+    mIsDisabled = disabled;
     if (mHost == null) {
       return;
     }
     mHost.setEnabled(!disabled);
   }
 
+  public boolean isDisabled(){
+    return mIsDisabled;
+  }
+
   public void setSticky(String sticky) {
     if (!TextUtils.isEmpty(sticky) && sticky.equals(Constants.Value.STICKY)) {
       Scrollable waScroller = getParentScroller();
@@ -1102,8 +1052,10 @@
     }
   }
 
-  public void setBackgroundImage(String bgImage) {
-    if (!TextUtils.isEmpty(bgImage) && mHost != null) {
+  public void setBackgroundImage(@NonNull String bgImage) {
+    if ("".equals(bgImage.trim())) {
+      getOrCreateBorder().setImage(null);
+    } else {
       Shader shader = WXResourceUtils.getShader(bgImage, mDomObj.getLayoutWidth(), mDomObj.getLayoutHeight());
       getOrCreateBorder().setImage(shader);
     }
@@ -1111,7 +1063,9 @@
 
   public void setOpacity(float opacity) {
     if (opacity >= 0 && opacity <= 1 && mHost.getAlpha() != opacity) {
-      mHost.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+      if (isLayerTypeEnabled()) {
+        mHost.setLayerType(View.LAYER_TYPE_HARDWARE, null);
+      }
       mHost.setAlpha(opacity);
     }
   }
@@ -1120,19 +1074,19 @@
     if (borderRadius >= 0) {
       switch (key) {
         case Constants.Name.BORDER_RADIUS:
-          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_RADIUS_ALL, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getViewPortWidth()));
+          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_RADIUS_ALL, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_TOP_LEFT_RADIUS:
-          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_TOP_LEFT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getViewPortWidth()));
+          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_TOP_LEFT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_TOP_RIGHT_RADIUS:
-          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_TOP_RIGHT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getViewPortWidth()));
+          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_TOP_RIGHT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_BOTTOM_RIGHT_RADIUS:
-          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_BOTTOM_RIGHT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getViewPortWidth()));
+          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_BOTTOM_RIGHT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_BOTTOM_LEFT_RADIUS:
-          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_BOTTOM_LEFT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getViewPortWidth()));
+          getOrCreateBorder().setBorderRadius(BorderDrawable.BORDER_BOTTOM_LEFT_RADIUS, WXViewUtils.getRealSubPxByWidth(borderRadius,mInstance.getInstanceViewPortWidth()));
           break;
       }
     }
@@ -1142,19 +1096,19 @@
     if (borderWidth >= 0) {
       switch (key) {
         case Constants.Name.BORDER_WIDTH:
-          getOrCreateBorder().setBorderWidth(Spacing.ALL, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getViewPortWidth()));
+          getOrCreateBorder().setBorderWidth(Spacing.ALL, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_TOP_WIDTH:
-          getOrCreateBorder().setBorderWidth(Spacing.TOP, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getViewPortWidth()));
+          getOrCreateBorder().setBorderWidth(Spacing.TOP, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_RIGHT_WIDTH:
-          getOrCreateBorder().setBorderWidth(Spacing.RIGHT, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getViewPortWidth()));
+          getOrCreateBorder().setBorderWidth(Spacing.RIGHT, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_BOTTOM_WIDTH:
-          getOrCreateBorder().setBorderWidth(Spacing.BOTTOM, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getViewPortWidth()));
+          getOrCreateBorder().setBorderWidth(Spacing.BOTTOM, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getInstanceViewPortWidth()));
           break;
         case Constants.Name.BORDER_LEFT_WIDTH:
-          getOrCreateBorder().setBorderWidth(Spacing.LEFT, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getViewPortWidth()));
+          getOrCreateBorder().setBorderWidth(Spacing.LEFT, WXViewUtils.getRealSubPxByWidth(borderWidth,getInstance().getInstanceViewPortWidth()));
           break;
       }
     }
@@ -1232,7 +1186,7 @@
    * This is an experimental feature for elevation of material design.
    */
   private void updateElevation() {
-    float elevation = getDomObject().getAttrs().getElevation(getInstance().getViewPortWidth());
+    float elevation = getDomObject().getAttrs().getElevation(getInstance().getInstanceViewPortWidth());
     if (!Float.isNaN(elevation)) {
       ViewCompat.setElevation(getHostView(), elevation);
     }
@@ -1288,21 +1242,28 @@
   /********************************
    *  end hook Activity life cycle callback
    ********************************************************/
+  public void recycled() {
+    if(mDomObj.isFixed())
+      return;
 
+  }
 
   public void destroy() {
     if (WXEnvironment.isApkDebugable() && !WXUtils.isUiThread()) {
       throw new WXRuntimeException("[WXComponent] destroy can only be called in main thread");
     }
-    if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE) {
+    if(mHost!= null && mHost.getLayerType()==View.LAYER_TYPE_HARDWARE && isLayerTypeEnabled()) {
       mHost.setLayerType(View.LAYER_TYPE_NONE, null);
     }
     removeAllEvent();
     removeStickyStyle();
-    if (mDomObj != null) {
-      mDomObj = null;
+
+    View view;
+    if(mDomObj.isFixed() && (view = getHostView()) != null){
+      getInstance().removeFixedView(view);
     }
 
+    mDomObj = ImmutableDomObject.DESTROYED;
     mIsDestroyed = true;
   }
 
@@ -1382,11 +1343,15 @@
    * @return false component add subview
    */
   public boolean isVirtualComponent(){
-    return false;
+    return mType == TYPE_VIRTUAL;
   }
   public void removeVirtualComponent() {
   }
 
+  public void setType(int type) {
+    mType = type;
+  }
+
   public boolean hasScrollParent(WXComponent component) {
     if (component.getParent() == null) {
       return true;
@@ -1413,11 +1378,15 @@
     boolean hasActivePesudo = mDomObj.getStyles().getPesudoStyles().containsKey(Constants.PSEUDO.ACTIVE);
     View view;
     if(hasActivePesudo && (view = getRealView()) != null) {
-      boolean hasTouchConsumer = (mHostClickListeners != null && mHostClickListeners.size() > 0) || mGesture != null;
+      boolean hasTouchConsumer = isConsumeTouch();
       view.setOnTouchListener(new TouchActivePseudoListener(this,!hasTouchConsumer));
     }
   }
 
+  protected boolean isConsumeTouch(){
+    return (mHostClickListeners != null && mHostClickListeners.size() > 0) || mGesture != null;
+  }
+
   @Override
   public void updateActivePseudo(boolean isSet) {
     setPseudoClassStatus(Constants.PSEUDO.ACTIVE,isSet);
@@ -1463,7 +1432,7 @@
   }
 
   public boolean canRecycled(){
-    return mCanRecycled;
+    return (!isFixed() || !isSticky()) && mDomObj.getAttrs().canRecycled();
   }
   
   /**
@@ -1473,4 +1442,12 @@
   public void setStickyOffset(int stickyOffset) {
     mStickyOffset = stickyOffset;
   }
-}
+
+  /**
+   * For now, this method respect the result of {@link WXSDKInstance#isLayerTypeEnabled()}
+   * @return Refer {@link WXSDKInstance#isLayerTypeEnabled()}
+   */
+  public boolean isLayerTypeEnabled() {
+    return getInstance().isLayerTypeEnabled();
+  }
+}
\ No newline at end of file
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
old mode 100755
new mode 100644
index 52f1808..4323821
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
old mode 100755
new mode 100644
index b95b2a6..31364f0
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponentProp.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
old mode 100755
new mode 100644
index dec86e9..2772cc6
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXDiv.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -238,7 +52,9 @@
 
   @Override
   protected WXFrameLayout initComponentHostView(@NonNull Context context) {
-    return new WXFrameLayout(context);
+    WXFrameLayout frameLayout =new WXFrameLayout(context);
+    frameLayout.holdComponent(this);
+    return frameLayout;
   }
 
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
old mode 100755
new mode 100644
index 18aaafb..2917a60
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -359,8 +173,8 @@
     super(instance, node, parent);
     mListener = new EmbedRenderListener(this);
 
-    ERROR_IMG_WIDTH = (int) WXViewUtils.getRealPxByWidth(270,instance.getViewPortWidth());
-    ERROR_IMG_HEIGHT = (int) WXViewUtils.getRealPxByWidth(260,instance.getViewPortWidth());
+    ERROR_IMG_WIDTH = (int) WXViewUtils.getRealPxByWidth(270,instance.getInstanceViewPortWidth());
+    ERROR_IMG_HEIGHT = (int) WXViewUtils.getRealPxByWidth(260,instance.getInstanceViewPortWidth());
     if(instance instanceof EmbedManager) {
       Object itemId = node.getAttrs().get(ITEM_ID);
       if (itemId != null) {
@@ -397,6 +211,12 @@
     loadContent();
   }
 
+  @Override
+  public void reload() {
+    if (!TextUtils.isEmpty(src)) {
+      loadContent();
+    }
+  }
 
   public String getOriginUrl() {
     return originUrl;
@@ -416,7 +236,7 @@
       mNestedInstance.destroy();
       mNestedInstance = null;
     }
-    if (mIsVisible) {
+    if (mIsVisible && !TextUtils.isEmpty(this.src)) {
       loadContent();
     }
   }
@@ -493,6 +313,9 @@
       mNestedInstance = null;
     }
     src = null;
+    if (getInstance() != null) {
+      getInstance().removeOnInstanceVisibleListener(this);
+    }
   }
 
   @Override
@@ -514,4 +337,44 @@
         comp.fireEvent(Constants.Event.VIEWDISAPPEAR);
     }
   }
-}
\ No newline at end of file
+
+  @Override
+  public void onActivityStart() {
+    super.onActivityStart();
+    if (mNestedInstance != null) {
+      mNestedInstance.onActivityStart();
+    }
+  }
+
+  @Override
+  public void onActivityResume() {
+    super.onActivityResume();
+    if (mNestedInstance != null) {
+      mNestedInstance.onActivityResume();
+    }
+  }
+
+  @Override
+  public void onActivityPause() {
+    super.onActivityPause();
+    if (mNestedInstance != null) {
+      mNestedInstance.onActivityPause();
+    }
+  }
+
+  @Override
+  public void onActivityStop() {
+    super.onActivityStop();
+    if (mNestedInstance != null) {
+      mNestedInstance.onActivityStop();
+    }
+  }
+
+  @Override
+  public void onActivityDestroy() {
+    super.onActivityDestroy();
+    if (mNestedInstance != null) {
+      mNestedInstance.onActivityDestroy();
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
old mode 100755
new mode 100644
index e988d46..6771196
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXHeader.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -223,7 +37,9 @@
 
   public WXHeader(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
     super(instance, node, parent, lazy);
-    setSticky(Constants.Value.STICKY);
+    if(WXBasicComponentType.LIST.equals((parent.getDomObject().getType()))){
+      setSticky(Constants.Value.STICKY);
+    }
   }
 
   @Override
@@ -235,4 +51,9 @@
   public boolean isSticky() {
     return true;
   }
+
+  @Override
+  public boolean canRecycled() {
+    return false;
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
old mode 100755
new mode 100644
index d7a7e56..89ceedc
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXImage.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -210,10 +24,12 @@
 import android.net.Uri;
 import android.os.Build;
 import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.widget.ImageView;
 import android.widget.ImageView.ScaleType;
 
+import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.adapter.IWXImgLoaderAdapter;
 import com.taobao.weex.adapter.URIAdapter;
@@ -221,6 +37,7 @@
 import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.WXImageSharpen;
 import com.taobao.weex.common.WXImageStrategy;
+import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.ui.ComponentCreator;
@@ -228,13 +45,16 @@
 import com.taobao.weex.ui.view.border.BorderDrawable;
 import com.taobao.weex.utils.ImageDrawable;
 import com.taobao.weex.utils.ImgURIUtil;
+import com.taobao.weex.utils.SingleFunctionParser;
 import com.taobao.weex.utils.WXDomUtils;
+import com.taobao.weex.utils.WXLogUtils;
 import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
 
 import java.lang.reflect.InvocationTargetException;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -242,6 +62,15 @@
  */
 @Component(lazyload = false)
 public class WXImage extends WXComponent<ImageView> {
+  private String mSrc;
+  private int mBlurRadius;
+
+  private static SingleFunctionParser.FlatMapper<Integer> BLUR_RADIUS_MAPPER = new SingleFunctionParser.FlatMapper<Integer>() {
+    @Override
+    public Integer map(String raw) {
+      return WXUtils.getInteger(raw,0);
+    }
+  };
 
   public static class Ceator implements ComponentCreator {
     public WXComponent createInstance(WXSDKInstance instance, WXDomObject node, WXVContainer parent) throws IllegalAccessException, InvocationTargetException, InstantiationException {
@@ -292,6 +121,13 @@
         case Constants.Name.IMAGE_QUALITY:
           return true;
         case Constants.Name.FILTER:
+          int blurRadius = 0;
+          if(param != null && param instanceof String) {
+            blurRadius = parseBlurRadius((String)param);
+          }
+          if(!TextUtils.isEmpty(this.mSrc)) {
+            setBlurRadius(this.mSrc,blurRadius);
+          }
           return true;
       }
     return super.setProperty(key, param);
@@ -353,17 +189,70 @@
       return;
     }
 
+    ImageView image = getHostView();
+    if("".equals(src) && image != null){
+      image.setImageDrawable(null);
+      return;
+    }
+
+    this.mSrc = src;
     WXSDKInstance instance = getInstance();
     Uri rewrited = instance.rewriteUri(Uri.parse(src), URIAdapter.IMAGE);
 
     if (Constants.Scheme.LOCAL.equals(rewrited.getScheme())) {
       setLocalSrc(rewrited);
     } else {
-      setRemoteSrc(rewrited);
+      int blur = 0;
+      if(getDomObject() != null) {
+        String blurStr = getDomObject().getStyles().getBlur();
+        blur = parseBlurRadius(blurStr);
+      }
+      setRemoteSrc(rewrited, blur);
     }
   }
 
-  private void setRemoteSrc(Uri rewrited) {
+  private void setBlurRadius(@NonNull String src, int blurRadius) {
+    if(getInstance() != null && blurRadius != mBlurRadius) {
+      Uri parsedUri = getInstance().rewriteUri(Uri.parse(src), URIAdapter.IMAGE);
+      if(!Constants.Scheme.LOCAL.equals(parsedUri.getScheme())) {
+        setRemoteSrc(parsedUri,blurRadius);
+      }
+    }
+  }
+
+  private int parseBlurRadius(@Nullable String rawRadius) {
+    if(rawRadius == null) {
+      return 0;
+    }
+    SingleFunctionParser<Integer> parser = new SingleFunctionParser<Integer>(rawRadius,BLUR_RADIUS_MAPPER);
+    List<Integer> list = null;
+    try {
+       list = parser.parse("blur");
+    }catch (Exception e) {
+      return 0;
+    }
+    if(list == null || list.isEmpty()) {
+      return 0;
+    }
+    return list.get(0);
+  }
+
+  @Override
+  public void recycled() {
+    super.recycled();
+
+    if (getInstance().getImgLoaderAdapter() != null) {
+      getInstance().getImgLoaderAdapter().setImage(null, mHost,
+              null, null);
+    } else {
+      if (WXEnvironment.isApkDebugable()) {
+        throw new WXRuntimeException("getImgLoaderAdapter() == null");
+      }
+      WXLogUtils.e("Error getImgLoaderAdapter() == null");
+    }
+  }
+
+  private void setRemoteSrc(Uri rewrited,int blurRadius) {
 
       WXImageStrategy imageStrategy = new WXImageStrategy();
       imageStrategy.isClipping = true;
@@ -371,9 +260,8 @@
       WXImageSharpen imageSharpen = getDomObject().getAttrs().getImageSharpen();
       imageStrategy.isSharpen = imageSharpen == WXImageSharpen.SHARPEN;
 
-      int radius = getDomObject().getStyles().getBlur();
-      radius = Math.max(0, radius);
-      imageStrategy.blurRadius = Math.min(10, radius);
+      imageStrategy.blurRadius = Math.max(0, blurRadius);
+      this.mBlurRadius = blurRadius;
 
       imageStrategy.setImageListener(new WXImageStrategy.ImageListener() {
         @Override
@@ -381,9 +269,9 @@
           if (getDomObject() != null && getDomObject().getEvents().contains(Constants.Event.ONLOAD)) {
             Map<String, Object> params = new HashMap<String, Object>();
             Map<String, Object> size = new HashMap<>(2);
-            if (imageView != null && imageView.getDrawable() != null && imageView.getDrawable() instanceof ImageDrawable) {
-              size.put("naturalWidth", ((ImageDrawable) imageView.getDrawable()).getBitmapWidth());
-              size.put("naturalHeight", ((ImageDrawable) imageView.getDrawable()).getBitmapHeight());
+            if (imageView != null && imageView instanceof Measurable) {
+              size.put("naturalWidth", ((Measurable) imageView).getNaturalWidth());
+              size.put("naturalHeight", ((Measurable) imageView).getNaturalHeight());
             } else {
               size.put("naturalWidth", 0);
               size.put("naturalHeight", 0);
@@ -443,4 +331,9 @@
       readyToRender();
     }
   }
+
+  public interface Measurable {
+    int getNaturalWidth();
+    int getNaturalHeight();
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
old mode 100755
new mode 100644
index f8f87d9..02f8a21
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXIndicator.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -321,7 +135,7 @@
     if (itemSize < 0) {
       return;
     }
-    getHostView().setRadius(WXViewUtils.getRealPxByWidth(itemSize,getInstance().getViewPortWidth()) / 2.0f);
+    getHostView().setRadius(WXViewUtils.getRealPxByWidth(itemSize,getInstance().getInstanceViewPortWidth()) / 2.0f);
     getHostView().forceLayout();
     getHostView().requestLayout();
   }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
old mode 100755
new mode 100644
index f2d0209..339165a
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXInput.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
old mode 100755
new mode 100644
index 64e6d40..c7c48ce
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoading.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -211,6 +25,7 @@
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.ui.component.list.WXListComponent;
 import com.taobao.weex.ui.view.WXFrameLayout;
@@ -241,14 +56,16 @@
 
   @Override
   public void onLoading() {
-    if (getDomObject().getEvents().contains(Constants.Event.ONLOADING)) {
+    ImmutableDomObject domObject = getDomObject();
+    if (domObject != null && domObject.getEvents().contains(Constants.Event.ONLOADING)) {
       fireEvent(Constants.Event.ONLOADING);
     }
   }
 
   @Override
   public void onPullingUp(float dy, int pullOutDistance, float viewHeight) {
-    if (getDomObject().getEvents() != null && getDomObject().getEvents().contains(Constants.Event.ONPULLING_UP)) {
+    ImmutableDomObject domObject = getDomObject();
+    if (domObject != null && domObject.getEvents().contains(Constants.Event.ONPULLING_UP)) {
       Map<String, Object> data = new HashMap<>();
       data.put(Constants.Name.DISTANCE_Y, dy);
       data.put(Constants.Name.PULLING_DISTANCE, pullOutDistance);
@@ -258,6 +75,11 @@
   }
 
   @Override
+  public boolean canRecycled() {
+    return false;
+  }
+
+  @Override
   protected boolean setProperty(String key, Object param) {
     switch (key) {
       case Constants.Name.DISPLAY:
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
index 81b0cb5..5c0a886 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXLoadingIndicator.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
old mode 100755
new mode 100644
index 9ca6b3c..5759231
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXRefresh.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -246,6 +60,11 @@
   }
 
   @Override
+  public boolean canRecycled() {
+    return false;
+  }
+
+  @Override
   public void onRefresh() {
     if(isDestoryed()){
       return;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
old mode 100755
new mode 100644
index 9b6c7d9..ca2e174
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXScroller.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -260,7 +74,7 @@
   protected int mOrientation = Constants.Orientation.VERTICAL;
   private List<WXComponent> mRefreshs=new ArrayList<>();
   private int mChildrenLayoutOffset = 0;//Use for offset children layout
-  private String mLoadMoreRetry = "";
+  private boolean mForceLoadmoreNextTime = false;
   private int mOffsetAccuracy = 10;
   private Point mLastReport = new Point(-1, -1);
 
@@ -277,7 +91,7 @@
   /**
    * Map for storing component that is sticky.
    **/
-  private Map<String, HashMap<String, WXComponent>> mStickyMap = new HashMap<>();
+  private Map<String, Map<String, WXComponent>> mStickyMap = new HashMap<>();
   private FrameLayout mRealView;
 
   private int mContentHeight = 0;
@@ -344,11 +158,13 @@
             Map<String, Object> contentSize = new HashMap<>(2);
             Map<String, Object> contentOffset = new HashMap<>(2);
 
-            contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(frame.width(), getInstance().getViewPortWidth()));
-            contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(frame.height(), getInstance().getViewPortWidth()));
+            int viewport = getInstance().getInstanceViewPortWidth();
 
-            contentOffset.put(Constants.Name.X, - WXViewUtils.getWebPxByWidth(x, getInstance().getViewPortWidth()));
-            contentOffset.put(Constants.Name.Y, - WXViewUtils.getWebPxByWidth(y, getInstance().getViewPortWidth()));
+            contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(frame.width(), viewport));
+            contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(frame.height(), viewport));
+
+            contentOffset.put(Constants.Name.X, - WXViewUtils.getWebPxByWidth(x, viewport));
+            contentOffset.put(Constants.Name.Y, - WXViewUtils.getWebPxByWidth(y, viewport));
 
             event.put(Constants.Name.CONTENT_SIZE, contentSize);
             event.put(Constants.Name.CONTENT_OFFSET, contentOffset);
@@ -624,7 +440,7 @@
     return mOrientation;
   }
 
-  public Map<String, HashMap<String, WXComponent>> getStickMap() {
+  public Map<String, Map<String, WXComponent>> getStickMap() {
     return mStickyMap;
   }
 
@@ -673,7 +489,7 @@
 
   @WXComponentProp(name = Constants.Name.OFFSET_ACCURACY)
   public void setOffsetAccuracy(int accuracy) {
-    float realPx = WXViewUtils.getRealPxByWidth(accuracy, getInstance().getViewPortWidth());
+    float realPx = WXViewUtils.getRealPxByWidth(accuracy, getInstance().getInstanceViewPortWidth());
     this.mOffsetAccuracy = (int) realPx;
   }
 
@@ -748,7 +564,7 @@
       smooth = WXUtils.getBoolean(options.get(Constants.Name.ANIMATED), true);
       if (offset != null) {
         try {
-          offsetFloat = WXViewUtils.getRealPxByWidth(Float.parseFloat(offset), getInstance().getViewPortWidth());
+          offsetFloat = WXViewUtils.getRealPxByWidth(Float.parseFloat(offset), getInstance().getInstanceViewPortWidth());
         }catch (Exception e ){
           WXLogUtils.e("Float parseFloat error :"+e.getMessage());
         }
@@ -855,26 +671,22 @@
   protected void onLoadMore(WXScrollView scrollView, int x, int y) {
     try {
       String offset = getDomObject().getAttrs().getLoadMoreOffset();
-
       if (TextUtils.isEmpty(offset)) {
         return;
       }
+      int offsetInt = (int)WXViewUtils.getRealPxByWidth(Float.parseFloat(offset), getInstance().getInstanceViewPortWidth());
 
       int contentH = scrollView.getChildAt(0).getHeight();
       int scrollerH = scrollView.getHeight();
       int offScreenY = contentH - y - scrollerH;
-      if (offScreenY < Integer.parseInt(offset)) {
+      if (offScreenY < offsetInt) {
         if (WXEnvironment.isApkDebugable()) {
           WXLogUtils.d("[WXScroller-onScroll] offScreenY :" + offScreenY);
         }
-        String loadMoreRetry = getDomObject().getAttrs().getLoadMoreRetry();
-        if (loadMoreRetry == null) {
-          loadMoreRetry = mLoadMoreRetry;
-        }
-        if (mContentHeight != contentH || !mLoadMoreRetry.equals(loadMoreRetry)) {
+        if (mContentHeight != contentH || mForceLoadmoreNextTime) {
           fireEvent(Constants.Event.LOADMORE);
           mContentHeight = contentH;
-          mLoadMoreRetry = loadMoreRetry;
+          mForceLoadmoreNextTime = false;
         }
       }
     } catch (Exception e) {
@@ -885,6 +697,6 @@
 
   @JSMethod
   public void resetLoadmore() {
-    mLoadMoreRetry = "";
+    mForceLoadmoreNextTime = true;
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
old mode 100755
new mode 100644
index 6586e83..db20ef2
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSlider.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -209,6 +23,8 @@
 import android.support.v4.view.ViewPager;
 import android.support.v4.view.ViewPager.OnPageChangeListener;
 import android.text.TextUtils;
+import android.view.GestureDetector;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
@@ -230,6 +46,7 @@
 import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
 
+import java.lang.ref.WeakReference;
 import java.lang.reflect.InvocationTargetException;
 import java.util.HashMap;
 import java.util.Map;
@@ -239,6 +56,9 @@
 public class WXSlider extends WXVContainer<FrameLayout> {
 
   public static final String INDEX = "index";
+  public static final String INFINITE = "infinite";
+
+  private boolean isInfinite = true;
 
   Map<String, Object> params = new HashMap<>();
   private float offsetXAccuracy = 0.1f;
@@ -283,13 +103,18 @@
   protected FrameLayout initComponentHostView(@NonNull Context context) {
     FrameLayout view = new FrameLayout(context);
     // init view pager
+    if (getDomObject() != null && getDomObject().getAttrs() != null) {
+      Object obj = getDomObject().getAttrs().get(INFINITE);
+      isInfinite = WXUtils.getBoolean(obj, true);
+    }
     FrameLayout.LayoutParams pagerParams = new FrameLayout.LayoutParams(
         LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
     mViewPager = new WXCircleViewPager(context);
+    mViewPager.setCircle(isInfinite);
     mViewPager.setLayoutParams(pagerParams);
 
     // init adapter
-    mAdapter = new WXCirclePageAdapter();
+    mAdapter = new WXCirclePageAdapter(isInfinite);
     mViewPager.setAdapter(mAdapter);
     // add to parent
     view.addView(mViewPager);
@@ -328,9 +153,6 @@
   @Override
   public void addEvent(String type) {
     super.addEvent(type);
-    if (getRealView() != null) {
-      getRealView().setOnTouchListener(null);
-    }
     if (Constants.Event.SCROLL.equals(type)) {
       if (mViewPager == null) {
         return;
@@ -360,6 +182,8 @@
       return;
     }
     mAdapter.addPageView(view);
+    hackTwoItemsInfiniteScroll();
+
     mViewPager.setCurrentItem(0);
     if (mIndicator != null) {
       mIndicator.getHostView().forceLayout();
@@ -374,7 +198,7 @@
     }
 
     mAdapter.removePageView(child.getHostView());
-    mAdapter.notifyDataSetChanged();
+    hackTwoItemsInfiniteScroll();
     super.remove(child,destroy);
   }
 
@@ -644,9 +468,86 @@
 
     @Override
     public void onPageScrollStateChanged(int state) {
-      if (state == ViewPager.SCROLL_STATE_IDLE) {
-        lastPositionOffset = 99f;
+
+      /**
+       * @homeblog@vip.qq.com
+       *
+       *  add scrollstart & scrollend event
+       *
+       */
+      switch (state) {
+        case ViewPager.SCROLL_STATE_IDLE:
+          lastPositionOffset = 99f;
+          target.fireEvent("scrollend");
+          break;
+        case ViewPager.SCROLL_STATE_DRAGGING:
+          target.fireEvent("scrollstart");
+          break;
+        case ViewPager.SCROLL_STATE_SETTLING:
+          break;
+
       }
     }
   }
+
+  private void hackTwoItemsInfiniteScroll() {
+    if (mViewPager == null || mAdapter == null) {
+      return;
+    }
+    if (isInfinite) {
+      if (mAdapter.getRealCount() == 2) {
+        final GestureDetector gestureDetector = new GestureDetector(getContext(), new FlingGestureListener(mViewPager));
+        mViewPager.setOnTouchListener(new View.OnTouchListener() {
+          @Override
+          public boolean onTouch(View v, MotionEvent event) {
+            return gestureDetector.onTouchEvent(event);
+          }
+        });
+      } else {
+        mViewPager.setOnTouchListener(null);
+      }
+    }
+  }
+
+  private static class FlingGestureListener extends GestureDetector.SimpleOnGestureListener {
+    private static final int SWIPE_MIN_DISTANCE = WXViewUtils.dip2px(50);
+    private static final int SWIPE_MAX_OFF_PATH = WXViewUtils.dip2px(250);
+    private static final int SWIPE_THRESHOLD_VELOCITY = WXViewUtils.dip2px(200);
+    private WeakReference<WXCircleViewPager> pagerRef;
+
+    FlingGestureListener(WXCircleViewPager pager) {
+      this.pagerRef = new WeakReference<>(pager);
+    }
+
+    @Override
+    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+      WXCircleViewPager mViewPager = pagerRef.get();
+      if (mViewPager == null) {
+        return false;
+      }
+
+      try {
+        if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH) {
+          return false;
+        }
+
+        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
+                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
+                && mViewPager.superGetCurrentItem() == 1) {
+          // right to left swipe
+          mViewPager.setCurrentItem(0, false);
+          return true;
+        } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
+                && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY
+                && mViewPager.superGetCurrentItem() == 0) {
+          // left to right swipe
+          mViewPager.setCurrentItem(1, false);
+          return true;
+        }
+      } catch (Exception e) {
+        // ignore
+      }
+      return false;
+    }
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
index 2b40f46..b1001b7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSliderNeighbor.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -214,9 +28,7 @@
 import android.widget.FrameLayout;
 
 import com.taobao.weex.WXSDKInstance;
-import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.common.WXThread;
-import com.taobao.weex.dom.WXDomManager;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.ui.ComponentCreator;
 import com.taobao.weex.ui.view.WXCircleIndicator;
@@ -225,10 +37,8 @@
 import com.taobao.weex.utils.WXUtils;
 import com.taobao.weex.utils.WXViewUtils;
 
-import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Known Issus: In auto play mode, neighbor view not scaled or aplhaed rarely.
@@ -239,16 +49,17 @@
     public static final String NEIGHBOR_SCALE = "neighborScale"; // the init scale of neighbor page
     public static final String NEIGHBOR_ALPHA = "neighborAlpha"; // the init alpha of neighbor page
     public static final String NEIGHBOR_SPACE = "neighborSpace"; // the init space of neighbor page
+    public static final String CURRENT_ITEM_SCALE = "currentItemScale"; // the scale of middle item
 
     private static final int DEFAULT_NEIGHBOR_SPACE = 25;
     private static final float DEFAULT_NEIGHBOR_SCALE = 0.8F;
     private static final float DEFAULT_NEIGHBOR_ALPHA = 0.6F;
+    private static final float DEFAULT_CURRENT_ITEM_SCALE = 0.9F;
 
     private float mNeighborScale = DEFAULT_NEIGHBOR_SCALE;
     private float mNeighborAlpha = DEFAULT_NEIGHBOR_ALPHA;
     private float mNeighborSpace = DEFAULT_NEIGHBOR_SPACE;
-
-    private static final float WX_DEFAULT_MAIN_NEIGHBOR_SCALE = 0.9f;
+    private float mCurrentItemScale = DEFAULT_CURRENT_ITEM_SCALE;
 
     private ZoomTransformer mCachedTransformer;
 
@@ -361,20 +172,20 @@
 
         if(pageViews.size() > 0) {
             final View currentPage = pageViews.get(curPos);
-            updateScaleAndAlpha(((ViewGroup)currentPage).getChildAt(0),1.0F,WX_DEFAULT_MAIN_NEIGHBOR_SCALE);
+            updateScaleAndAlpha(((ViewGroup)currentPage).getChildAt(0), 1.0F, mCurrentItemScale);
 
             if(pageViews.size() < 2) {
                 return;
             }
             //make sure View's width & height are measured.
-            currentPage.post(WXThread.secure(new Runnable() {
+            currentPage.postDelayed(WXThread.secure(new Runnable() {
                 @Override
                 public void run() {
                     //change left and right page's translation
                     updateNeighbor(currentPage, alpha, scale);
 
                 }
-            }));
+            }), 17);
 
             // make sure only display view current, left, right.
             int left = (curPos == 0) ? pageViews.size()-1 : curPos-1;
@@ -468,6 +279,23 @@
         }
     }
 
+    @WXComponentProp(name = CURRENT_ITEM_SCALE)
+    @SuppressWarnings("unused")
+    public void setCurrentItemScale(String input) {
+        float currentItemScale = DEFAULT_CURRENT_ITEM_SCALE;
+        if (!TextUtils.isEmpty(input)) {
+            try {
+                currentItemScale = Float.parseFloat(input);
+            } catch (NumberFormatException e) {
+            }
+        }
+
+        if(this.mCurrentItemScale != currentItemScale) {
+            this.mCurrentItemScale = currentItemScale;
+            updateAdapterScaleAndAlpha(-1, -1);
+        }
+    }
+
     @Override
     protected boolean setProperty(String key, Object param) {
         String input;
@@ -490,6 +318,12 @@
                     setNeighborSpace(input);
                 }
                 return true;
+            case CURRENT_ITEM_SCALE:
+                input = WXUtils.getString(param, null);
+                if (input != null) {
+                    setCurrentItemScale(input);
+                }
+                return true;
         }
         return super.setProperty(key, param);
     }
@@ -503,7 +337,7 @@
         }
         View realView = ((ViewGroup)hostPage).getChildAt(0);
         float translation = (hostPage.getMeasuredWidth()-realView.getMeasuredWidth()*mNeighborScale)/4;
-        translation += ((hostPage.getMeasuredWidth()-realView.getMeasuredWidth()*WX_DEFAULT_MAIN_NEIGHBOR_SCALE)/2 - WXViewUtils.getRealPxByWidth(mNeighborSpace))/2 ;
+        translation += ((hostPage.getMeasuredWidth()-realView.getMeasuredWidth() * mCurrentItemScale)/2 - WXViewUtils.getRealPxByWidth(mNeighborSpace, getInstance().getInstanceViewPortWidth()))/2 ;
         return translation;
     }
 
@@ -546,7 +380,7 @@
 
             if (position >= -1 && position <= 1) {
                 float factor = Math.abs(Math.abs(position) - 1);
-                scale = mNeighborScale + factor * (WX_DEFAULT_MAIN_NEIGHBOR_SCALE- mNeighborScale);
+                scale = mNeighborScale + factor * (mCurrentItemScale - mNeighborScale);
                 alpha = (1- mNeighborAlpha) * factor + mNeighborAlpha;
 
                 float translation = calculateTranslation(page);
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
old mode 100755
new mode 100644
index aa935f9..7893440
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXSwitch.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
old mode 100755
new mode 100644
index a85c644..e93263b
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXText.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -264,6 +78,14 @@
   }
 
   @Override
+  protected void setAriaLabel(String label) {
+    WXTextView text = getHostView();
+    if(text != null){
+      text.setAriaLabel(label);
+    }
+  }
+
+  @Override
   public void refreshData(WXComponent component) {
     super.refreshData(component);
     if (component instanceof WXText) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
old mode 100755
new mode 100644
index d98b95f..d7a2471
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXTextDecoration.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
old mode 100755
new mode 100644
index 98289b2..2e75f31
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -370,6 +184,20 @@
     super.destroy();
   }
 
+  /**
+   * recycle component resources
+   */
+  public void recycled() {
+    if (mChildren != null && !getDomObject().isFixed() && getDomObject().getAttrs().canRecycled()) {
+      int count = mChildren.size();
+      for (int i = 0; i < count; ++i) {
+        mChildren.get(i).recycled();
+      }
+    }
+    super.recycled();
+
+  }
+
   @Override
   public View detachViewAndClearPreInfo(){
     View original = super.detachViewAndClearPreInfo();
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVideo.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVideo.java
old mode 100755
new mode 100644
index cf57266..f2dc6ef
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVideo.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVideo.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.component;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXWeb.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXWeb.java
index fabaab3..d2fe72b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXWeb.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXWeb.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/SoftKeyboardDetector.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/SoftKeyboardDetector.java
new file mode 100644
index 0000000..afbabd0
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/SoftKeyboardDetector.java
@@ -0,0 +1,148 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.component.helper;
+
+import android.app.Activity;
+import android.graphics.Rect;
+import android.os.Build;
+import android.support.annotation.Nullable;
+import android.view.View;
+import android.view.ViewTreeObserver;
+import android.view.WindowManager;
+
+import com.taobao.weex.utils.WXLogUtils;
+import com.taobao.weex.utils.WXViewUtils;
+
+import java.lang.ref.WeakReference;
+
+/**
+ * Created by moxun on 17/3/24.
+ */
+
+public class SoftKeyboardDetector {
+
+    private static final int KEYBOARD_VISIBLE_THRESHOLD_DIP = 100;
+
+    public static Unregister registerKeyboardEventListener(Activity activity, final OnKeyboardEventListener listener) {
+        if (activity == null || listener == null) {
+            WXLogUtils.e("Activity or listener is null!");
+            return null;
+        }
+
+        if (activity.getWindow() != null) {
+            WindowManager.LayoutParams attributes = activity.getWindow().getAttributes();
+            if (attributes != null) {
+                int softInputMode = attributes.softInputMode;
+                if (softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING
+                        || softInputMode == WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) {
+                    WXLogUtils.e("SoftKeyboard detector can't work with softInputMode is SOFT_INPUT_ADJUST_NOTHING or SOFT_INPUT_ADJUST_PAN");
+                    return null;
+                }
+            }
+        }
+
+        final View activityRoot = getActivityRoot(activity);
+
+        if (activityRoot == null) {
+            WXLogUtils.e("Activity root is null!");
+            return null;
+        }
+
+        final ViewTreeObserver.OnGlobalLayoutListener layoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
+
+            private final Rect visibleFrame = new Rect();
+            private final int threshold = WXViewUtils.dip2px(KEYBOARD_VISIBLE_THRESHOLD_DIP);
+            private boolean wasKeyboardOpened = false;
+
+            @Override
+            public void onGlobalLayout() {
+                activityRoot.getWindowVisibleDisplayFrame(visibleFrame);
+                int heightDiff = activityRoot.getRootView().getHeight() - visibleFrame.height();
+                boolean isOpen = heightDiff > threshold;
+                if (isOpen == wasKeyboardOpened) {
+                    return;
+                }
+
+                wasKeyboardOpened = isOpen;
+                listener.onKeyboardEvent(isOpen);
+            }
+        };
+
+        activityRoot.getViewTreeObserver().addOnGlobalLayoutListener(layoutListener);
+        return new DefaultUnRegister(activity, layoutListener);
+    }
+
+    public static boolean isKeyboardVisible(Activity activity) {
+        Rect windowFrame = new Rect();
+        View root = getActivityRoot(activity);
+
+        if (root != null) {
+            root.getWindowVisibleDisplayFrame(windowFrame);
+            int heightDiff = root.getRootView().getHeight() - windowFrame.height();
+            return heightDiff > WXViewUtils.dip2px(KEYBOARD_VISIBLE_THRESHOLD_DIP);
+        }
+        return false;
+    }
+
+    public static @Nullable View getActivityRoot(Activity activity) {
+        if (activity != null) {
+            return activity.findViewById(android.R.id.content);
+        }
+        return null;
+    }
+
+    public static final class DefaultUnRegister implements Unregister {
+
+        private WeakReference<Activity> activityRef;
+        private WeakReference<ViewTreeObserver.OnGlobalLayoutListener> listenerRef;
+
+        public DefaultUnRegister(Activity activity, ViewTreeObserver.OnGlobalLayoutListener listener) {
+            this.activityRef = new WeakReference<>(activity);
+            this.listenerRef = new WeakReference<>(listener);
+        }
+
+        @Override
+        public void execute() {
+            Activity activity = activityRef.get();
+            ViewTreeObserver.OnGlobalLayoutListener listener = listenerRef.get();
+
+            if (activity != null && listener != null) {
+                View root = SoftKeyboardDetector.getActivityRoot(activity);
+                if (root != null) {
+                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+                        root.getViewTreeObserver().removeOnGlobalLayoutListener(listener);
+                    } else {
+                        root.getViewTreeObserver().removeGlobalOnLayoutListener(listener);
+                    }
+                }
+            }
+
+            activityRef.clear();
+            listenerRef.clear();
+        }
+    }
+
+    public interface Unregister {
+        void execute();
+    }
+
+    public interface OnKeyboardEventListener {
+        void onKeyboardEvent(boolean isShown);
+    }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXStickyHelper.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXStickyHelper.java
index 7ebee84..fca3c14 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXStickyHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXStickyHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.helper;
 
@@ -209,6 +23,7 @@
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Created by miomin on 16/7/7.
@@ -221,15 +36,15 @@
         this.scrollable = scrollable;
     }
 
-    public void bindStickStyle(WXComponent component, Map<String, HashMap<String, WXComponent>> mStickyMap) {
+    public void bindStickStyle(WXComponent component, Map<String, Map<String, WXComponent>> mStickyMap) {
         Scrollable scroller = component.getParentScroller();
         if (scroller == null) {
             return;
         }
-        HashMap<String, WXComponent> stickyMap = mStickyMap.get(scroller
+        Map<String, WXComponent> stickyMap = mStickyMap.get(scroller
                 .getRef());
         if (stickyMap == null) {
-            stickyMap = new HashMap<>();
+            stickyMap = new ConcurrentHashMap<>();
         }
         if (stickyMap.containsKey(component.getRef())) {
             return;
@@ -238,12 +53,12 @@
         mStickyMap.put(scroller.getRef(), stickyMap);
     }
 
-    public void unbindStickStyle(WXComponent component, Map<String, HashMap<String, WXComponent>> mStickyMap) {
+    public void unbindStickStyle(WXComponent component, Map<String, Map<String, WXComponent>> mStickyMap) {
         Scrollable scroller = component.getParentScroller();
         if (scroller == null) {
             return;
         }
-        HashMap<String, WXComponent> stickyMap = mStickyMap.get(scroller
+        Map<String, WXComponent> stickyMap = mStickyMap.get(scroller
                 .getRef());
         if (stickyMap == null) {
             return;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXTimeInputHelper.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXTimeInputHelper.java
index 442c66b..5056f5c 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXTimeInputHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/helper/WXTimeInputHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.helper;
 
@@ -251,4 +65,4 @@
                 }
         );
     }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
index 65993f4..9c869f4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -213,6 +27,7 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.util.ArrayMap;
+import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.StaggeredGridLayoutManager;
@@ -222,7 +37,6 @@
 import android.view.ViewGroup;
 import android.view.ViewTreeObserver;
 import android.widget.FrameLayout;
-import android.widget.ImageView;
 import android.widget.LinearLayout;
 
 import com.taobao.weex.WXEnvironment;
@@ -230,7 +44,7 @@
 import com.taobao.weex.annotation.JSMethod;
 import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.OnWXScrollListener;
-import com.taobao.weex.common.WXRuntimeException;
+import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.ui.component.AppearanceHelper;
 import com.taobao.weex.ui.component.Scrollable;
@@ -270,7 +84,7 @@
   public static final String LOADMOREOFFSET = "loadmoreoffset";
   private String TAG = "BasicListComponent";
   private int mListCellCount = 0;
-  private String mLoadMoreRetry = "";
+  private boolean mForceLoadmoreNextTime = false;
   private ArrayList<ListBaseViewHolder> recycleViewList = new ArrayList<>();
   private static final Pattern transformPattern = Pattern.compile("([a-z]+)\\(([0-9\\.]+),?([0-9\\.]+)?\\)");
 
@@ -285,13 +99,21 @@
   private static boolean mAllowCacheViewHolder = true;
   private static boolean mDownForBidCacheViewHolder = false;
 
+
+  protected int mLayoutType = WXRecyclerView.TYPE_LINEAR_LAYOUT;
+  protected int mColumnCount = 1;
+  protected float mColumnGap = 0;
+  protected float mColumnWidth = 0;
+
   private int mOffsetAccuracy = 10;
   private Point mLastReport = new Point(-1, -1);
 
+  private RecyclerView.ItemAnimator mItemAnimator;
+
   /**
    * Map for storing component that is sticky.
    **/
-  private Map<String, HashMap<String, WXComponent>> mStickyMap = new HashMap<>();
+  private Map<String, Map<String, WXComponent>> mStickyMap = new HashMap<>();
   private WXStickyHelper stickyHelper;
 
 
@@ -312,7 +134,7 @@
     int screenH = WXViewUtils.getScreenHeight(WXEnvironment.sApplication);
     int weexH = WXViewUtils.getWeexHeight(getInstanceId());
     int outHeight = height > (weexH >= screenH ? screenH : weexH) ? weexH - getAbsoluteY() : height;
-    return super.measure(width, outHeight);
+    return super.measure((int)(width+mColumnGap), outHeight);
   }
 
   public int getOrientation() {
@@ -407,6 +229,8 @@
       bounceRecyclerView.getInnerView().addItemDecoration(parseTransforms(transforms));
     }
 
+    mItemAnimator=bounceRecyclerView.getInnerView().getItemAnimator();
+
     RecyclerViewBaseAdapter recyclerViewBaseAdapter = new RecyclerViewBaseAdapter<>(this);
     recyclerViewBaseAdapter.setHasStableIds(true);
     bounceRecyclerView.setRecyclerViewBaseAdapter(recyclerViewBaseAdapter);
@@ -423,7 +247,7 @@
             if (holder != null
                 && holder.getComponent() != null
                 && !holder.getComponent().isUsing()) {
-              recycleImage(holder.getView());
+               holder.recycled();
             }
           }
           recycleViewList.clear();
@@ -526,7 +350,7 @@
 
   @WXComponentProp(name = Constants.Name.OFFSET_ACCURACY)
   public void setOffsetAccuracy(int accuracy) {
-    float real = WXViewUtils.getRealPxByWidth(accuracy, getInstance().getViewPortWidth());
+    float real = WXViewUtils.getRealPxByWidth(accuracy, getInstance().getInstanceViewPortWidth());
     this.mOffsetAccuracy = (int) real;
   }
 
@@ -583,7 +407,7 @@
       smooth = WXUtils.getBoolean(options.get(Constants.Name.ANIMATED), true);
       if (offsetStr != null) {
         try {
-          offsetFloat = WXViewUtils.getRealPxByWidth(Float.parseFloat(offsetStr), getInstance().getViewPortWidth());
+          offsetFloat = WXViewUtils.getRealPxByWidth(Float.parseFloat(offsetStr), getInstance().getInstanceViewPortWidth());
         }catch (Exception e ){
           WXLogUtils.e("Float parseFloat error :"+e.getMessage());
         }
@@ -647,13 +471,14 @@
     if (mStickyMap == null || bounceRecyclerView == null) {
       return;
     }
-    HashMap<String, WXComponent> stickyMap = mStickyMap.get(getRef());
+    Map<String, WXComponent> stickyMap = mStickyMap.get(getRef());
     if (stickyMap == null) {
       return;
     }
     Iterator<Map.Entry<String, WXComponent>> iterator = stickyMap.entrySet().iterator();
     Map.Entry<String, WXComponent> entry;
     WXComponent stickyComponent;
+    int currentStickyPos = -1;
     while (iterator.hasNext()) {
       entry = iterator.next();
       stickyComponent = entry.getValue();
@@ -666,17 +491,24 @@
           return;
         }
 
-        if (stickyComponent != null && stickyComponent.getDomObject() != null
-            && stickyComponent instanceof WXCell) {
-          if (stickyComponent.getHostView() == null) {
-            return;
-          }
-
           RecyclerView.LayoutManager layoutManager;
           boolean beforeFirstVisibleItem = false;
-          if ((layoutManager = getHostView().getInnerView().getLayoutManager()) instanceof LinearLayoutManager) {
+          layoutManager = getHostView().getInnerView().getLayoutManager();
+          if (layoutManager instanceof LinearLayoutManager || layoutManager instanceof GridLayoutManager) {
             int fVisible = ((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition();
             int pos = mChildren.indexOf(cell);
+            cell.setScrollPositon(pos);
+
+            if (pos <= fVisible) {
+              beforeFirstVisibleItem = true;
+              if(pos > currentStickyPos) {
+                currentStickyPos = pos;
+              }
+            }
+          } else if(layoutManager instanceof StaggeredGridLayoutManager){
+            int [] firstItems= new int[3];
+            int fVisible = ((StaggeredGridLayoutManager) layoutManager).findFirstVisibleItemPositions(firstItems)[0];
+            int pos = mChildren.indexOf(cell);
 
             if (pos <= fVisible) {
               beforeFirstVisibleItem = true;
@@ -699,7 +531,10 @@
           }
           cell.setLocationFromStart(top);
         }
-      }
+    }
+
+    if(currentStickyPos>=0){
+      bounceRecyclerView.updateStickyView(currentStickyPos);
     }
   }
 
@@ -752,11 +587,56 @@
     int adapterPosition = index == -1 ? mChildren.size() - 1 : index;
     T view = getHostView();
     if (view != null) {
-      view.getRecyclerViewBaseAdapter().notifyItemInserted(adapterPosition);
+      boolean isAddAnimation = isAddAnimation(child);
+      if (isAddAnimation) {
+        view.getInnerView().setItemAnimator(mItemAnimator);
+      } else {
+        view.getInnerView().setItemAnimator(null);
+      }
+      boolean isKeepScrollPosition = isKeepScrollPosition(child,index);
+      if (isKeepScrollPosition) {
+        int last=((LinearLayoutManager)view.getInnerView().getLayoutManager()).findLastVisibleItemPosition();
+        view.getInnerView().getLayoutManager().scrollToPosition(last);
+        view.getRecyclerViewBaseAdapter().notifyItemInserted(adapterPosition);
+      } else {
+        view.getRecyclerViewBaseAdapter().notifyItemChanged(adapterPosition);
+      }
     }
     relocateAppearanceHelper();
   }
 
+  /**
+   * To determine whether an animation is needed
+   * @param child
+   * @return
+   */
+  private boolean isAddAnimation(WXComponent child) {
+    ImmutableDomObject domObject = child.getDomObject();
+    if (domObject != null) {
+      Object attr = domObject.getAttrs().get(Constants.Name.INSERT_CELL_ANIMATION);
+      if (Constants.Value.DEFAULT.equals(attr)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Determine if the component needs to be fixed at the time of insertion
+   * @param child Need to insert the component
+   * @return fixed=true
+   */
+  private boolean isKeepScrollPosition(WXComponent child,int index) {
+    ImmutableDomObject domObject = child.getDomObject();
+    if (domObject != null) {
+      Object attr = domObject.getAttrs().get(Constants.Name.KEEP_SCROLL_POSITION);
+      if (WXUtils.getBoolean(attr, false) && index <= getChildCount() && index>-1) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 
   private void relocateAppearanceHelper() {
     Iterator<Map.Entry<String, AppearanceHelper>> iterator = mAppearComponents.entrySet().iterator();
@@ -800,6 +680,14 @@
     if (view == null) {
       return;
     }
+
+    boolean isRemoveAnimation = isRemoveAnimation(child);
+    if (isRemoveAnimation) {
+      view.getInnerView().setItemAnimator(mItemAnimator);
+    } else {
+      view.getInnerView().setItemAnimator(null);
+    }
+
     view.getRecyclerViewBaseAdapter().notifyItemRemoved(index);
     if (WXEnvironment.isApkDebugable()) {
       WXLogUtils.d(TAG, "removeChild child at " + index);
@@ -807,6 +695,22 @@
     super.remove(child, destroy);
   }
 
+  /**
+   * To determine whether an animation is needed
+   * @param child
+   * @return
+   */
+  private boolean isRemoveAnimation(WXComponent child) {
+    ImmutableDomObject domObject = child.getDomObject();
+    if (domObject != null) {
+      Object attr = domObject.getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
+      if (Constants.Value.DEFAULT.equals(attr)) {
+        return true;
+      }
+    }
+    return false;
+  }
+
 
   @Override
   public void computeVisiblePointInViewCoordinate(PointF pointF) {
@@ -823,6 +727,7 @@
   @Override
   public void onViewRecycled(ListBaseViewHolder holder) {
     long begin = System.currentTimeMillis();
+
     holder.setComponentUsing(false);
     if(holder.canRecycled()) {
       recycleViewList.add(holder);
@@ -857,15 +762,21 @@
     }
 
     if (holder.getComponent() != null && holder.getComponent() instanceof WXCell) {
-      holder.getComponent().bindData(component);
-//              holder.getComponent().refreshData(component);
+      if(holder.isRecycled()) {
+        holder.bindData(component);
+      }
     }
 
   }
 
+  protected void markComponentUsable(){
+    for (WXComponent component : mChildren){
+      component.setUsing(false);
+    }
+  }
   /**
    * Create an instance of {@link ListBaseViewHolder} for the given viewType (not for the given
-   * index). This method will look up for the first component that fits the viewType requirement and
+   * index). This  markComponentUsable();method will look up for the first component that fits the viewType requirement and
    * doesn't be used. Then create the certain type of view, detach the view f[rom the component.
    *
    * @param parent   the ViewGroup into which the new view will be inserted
@@ -1056,18 +967,15 @@
       if (TextUtils.isEmpty(offset)) {
         offset = "0";
       }
+      float offsetParsed = WXViewUtils.getRealPxByWidth(Integer.parseInt(offset),getInstance().getInstanceViewPortWidth());
 
-      if (offScreenY < Integer.parseInt(offset)) {
-        String loadMoreRetry = getDomObject().getAttrs().getLoadMoreRetry();
-        if (loadMoreRetry == null) {
-          loadMoreRetry = mLoadMoreRetry;
-        }
+      if (offScreenY < offsetParsed) {
 
         if (mListCellCount != mChildren.size()
-            || mLoadMoreRetry == null || !mLoadMoreRetry.equals(loadMoreRetry)) {
+            || mForceLoadmoreNextTime) {
           fireEvent(Constants.Event.LOADMORE);
           mListCellCount = mChildren.size();
-          mLoadMoreRetry = loadMoreRetry;
+          mForceLoadmoreNextTime = false;
         }
       }
     } catch (Exception e) {
@@ -1113,25 +1021,6 @@
     }
   }
 
-  private void recycleImage(View view) {
-    if (view instanceof ImageView) {
-      if (getInstance().getImgLoaderAdapter() != null) {
-        getInstance().getImgLoaderAdapter().setImage(null, (ImageView) view,
-            null, null);
-      } else {
-        if (WXEnvironment.isApkDebugable()) {
-          throw new WXRuntimeException("getImgLoaderAdapter() == null");
-        }
-        WXLogUtils.e("Error getImgLoaderAdapter() == null");
-      }
-
-    } else if (view instanceof ViewGroup) {
-      for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
-        recycleImage(((ViewGroup) view).getChildAt(i));
-      }
-    }
-  }
-
   @NonNull
   private ListBaseViewHolder createVHForFakeComponent(int viewType) {
     FrameLayout view = new FrameLayout(getContext());
@@ -1151,7 +1040,8 @@
 
   @JSMethod
   public void resetLoadmore() {
-    mLoadMoreRetry = "";
+    mForceLoadmoreNextTime = true;
+    mListCellCount = 0;
   }
 
   @Override
@@ -1173,12 +1063,11 @@
             Map<String, Object> contentSize = new HashMap<>(2);
             Map<String, Object> contentOffset = new HashMap<>(2);
 
-            contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(contentWidth, getInstance().getViewPortWidth()));
-            contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(contentHeight, getInstance().getViewPortWidth()));
+            contentSize.put(Constants.Name.WIDTH, WXViewUtils.getWebPxByWidth(contentWidth, getInstance().getInstanceViewPortWidth()));
+            contentSize.put(Constants.Name.HEIGHT, WXViewUtils.getWebPxByWidth(contentHeight, getInstance().getInstanceViewPortWidth()));
 
-            contentOffset.put(Constants.Name.X, - WXViewUtils.getWebPxByWidth(offsetX, getInstance().getViewPortWidth()));
-            contentOffset.put(Constants.Name.Y, - WXViewUtils.getWebPxByWidth(offsetY, getInstance().getViewPortWidth()));
-
+            contentOffset.put(Constants.Name.X, - WXViewUtils.getWebPxByWidth(offsetX, getInstance().getInstanceViewPortWidth()));
+            contentOffset.put(Constants.Name.Y, - WXViewUtils.getWebPxByWidth(offsetY, getInstance().getInstanceViewPortWidth()));
             event.put(Constants.Name.CONTENT_SIZE, contentSize);
             event.put(Constants.Name.CONTENT_OFFSET, contentOffset);
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/HorizontalListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/HorizontalListComponent.java
index e576151..495d4fa 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/HorizontalListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/HorizontalListComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
index 648c747..d29aeec 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/ListComponentView.java
@@ -1,212 +1,23 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
-import android.support.v7.widget.RecyclerView;
-import android.view.View;
-
 import com.taobao.weex.ui.view.listview.WXRecyclerView;
 import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
 
@@ -219,5 +30,6 @@
   void setRecyclerViewBaseAdapter(RecyclerViewBaseAdapter adapter);
   void notifyStickyShow(WXCell component);
   void notifyStickyRemove(WXCell component);
+  void updateStickyView(int currentStickyPos);
   RecyclerViewBaseAdapter getRecyclerViewBaseAdapter();
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
index 4fb0e80..778fc50 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleListComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -224,8 +38,12 @@
 
   @Override
   protected SimpleRecyclerView generateListView(Context context, int orientation) {
+    return generateListView(context,WXRecyclerView.TYPE_LINEAR_LAYOUT,orientation);
+  }
+
+  protected SimpleRecyclerView generateListView(Context context, int type,int orientation) {
     SimpleRecyclerView view = new SimpleRecyclerView(context);
-    view.initView(context, WXRecyclerView.TYPE_LINEAR_LAYOUT, orientation);
+    view.initView(context, type, orientation);
     return view;
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
index 1523717..269e804 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/SimpleRecyclerView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -216,13 +30,12 @@
 import java.util.Stack;
 
 /**
+ * Simple list is used for specific occasion, NOT Support sticky,load more,bounce etc.
  * Created by sospartan on 13/12/2016.
  */
 
 class SimpleRecyclerView extends WXRecyclerView implements ListComponentView{
   private RecyclerViewBaseAdapter mAdapter = null;
-  private Stack<View> headerViewStack = new Stack<>();
-  private Stack<WXCell> headComponentStack = new Stack<>();
 
   public SimpleRecyclerView(Context context) {
     super(context);
@@ -243,83 +56,19 @@
    * @param component
    */
   public void notifyStickyShow(WXCell component) {
-    if (component == null)
-      return;
-    if (!headComponentStack.isEmpty()) {
-      WXCell oldCom = headComponentStack.pop();
-      if (!oldCom.getRef().equals(component.getRef())) {
-        headComponentStack.push(oldCom);
-        headComponentStack.push(component);
-        showSticky();
-      } else {
-        headComponentStack.push(oldCom);
-        return;
-      }
-    } else {
-      headComponentStack.push(component);
-      showSticky();
-    }
+    //Simple list is used for specific occasion, NOT Support sticky,load more,bounce etc.
   }
 
   /**
    * @param component
    */
   public void notifyStickyRemove(WXCell component) {
-    if (component == null)
-      return;
-    if (!headComponentStack.isEmpty() && !headerViewStack.isEmpty()) {
-      removeSticky(component);
-    }
+    //Simple list is used for specific occasion, NOT Support sticky,load more,bounce etc.
   }
 
-  /**
-   * Pop stickyView to stack
-   */
-  private void showSticky() {
-    WXCell headComponent = headComponentStack.pop();
-    headComponentStack.push(headComponent);
-    final View headerView = headComponent.getRealView();
-    if (headerView == null)
-      return;
-    headerViewStack.push(headerView);
-    headComponent.removeSticky();
-    final ViewGroup parent = (ViewGroup) getParent();
-    if(parent != null){
-      parent.post(WXThread.secure(new Runnable() {
-        @Override
-        public void run() {
-          ViewGroup existedParent;
-          if((existedParent = (ViewGroup)headerView.getParent())!= null){
-            existedParent.removeView(headerView);
-          }
-          parent.addView(headerView);
-        }
-      }));
-    }
-  }
-
-  /**
-   * remove top stickyView
-   * @param component
-   */
-  private void removeSticky(WXComponent component) {
-    final WXCell headComponent = headComponentStack.pop();
-    if (!component.getRef().equals(headComponent.getRef())) {
-      headComponentStack.push(headComponent);
-      return;
-    }
-    final View headerView = headerViewStack.pop();
-    final ViewGroup parent = (ViewGroup) getParent();
-    if(parent != null){
-      parent.post(WXThread.secure(new Runnable() {
-        @Override
-        public void run() {
-          parent.removeView(headerView);
-          headComponent.recoverySticky();
-        }
-      }));
-    }
-
+  @Override
+  public void updateStickyView(int currentStickyPos) {
+    //Simple list is used for specific occasion, NOT Support sticky,load more,bounce etc.
   }
 
   @Override
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
new file mode 100644
index 0000000..dd49a5a
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/StickyHeaderHelper.java
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.component.list;
+
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.taobao.weex.common.WXThread;
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created by sospartan on 17/03/2017.
+ */
+
+public class StickyHeaderHelper {
+  private final ViewGroup mParent;
+  private Map<String,View> mHeaderViews = new HashMap<>(); // map for <ref,view>
+  private Map<String,WXCell> mHeaderComps = new HashMap<>(); // map for <ref,comp>
+  private String mCurrentStickyRef = null;
+
+  public StickyHeaderHelper(ViewGroup parent){
+    this.mParent = parent;
+  }
+
+  /**
+   * @param component
+   */
+  public void notifyStickyShow(WXCell component) {
+    if (component == null)
+      return;
+    mHeaderComps.put(component.getRef(),component);
+    if(mCurrentStickyRef != null){
+      WXCell cell = mHeaderComps.get(mCurrentStickyRef);
+      if(component.getScrollPositon() > cell.getScrollPositon()){
+        mCurrentStickyRef = component.getRef();
+      }
+    }else{
+      mCurrentStickyRef = component.getRef();
+    }
+    showSticky();
+  }
+
+  /**
+   * Bring component with bigest pos to Front
+   */
+  private void showSticky() {
+    if(mCurrentStickyRef==null){
+      WXLogUtils.e("Current Sticky ref is null.");
+      return;
+    }
+
+    WXCell headComponent = mHeaderComps.get(mCurrentStickyRef);
+    final View headerView = headComponent.getRealView();
+    if (headerView == null) {
+      WXLogUtils.e("Sticky header's real view is null.");
+      return;
+    }
+    View header = mHeaderViews.get(headComponent.getRef());
+    if( header != null){
+      //already there
+      header.bringToFront();
+    }else {
+      mHeaderViews.put(headComponent.getRef(), headerView);
+      //record translation, it should not change after transformation
+      final float translationX = headerView.getTranslationX();
+      final float translationY = headerView.getTranslationY();
+      headComponent.removeSticky();
+      mParent.post(WXThread.secure(new Runnable() {
+        @Override
+        public void run() {
+          ViewGroup existedParent;
+          if ((existedParent = (ViewGroup) headerView.getParent()) != null) {
+            existedParent.removeView(headerView);
+          }
+          mParent.addView(headerView);
+          //recover translation, sometimes it will be changed on fling
+          headerView.setTranslationX(translationX);
+          headerView.setTranslationY(translationY);
+        }
+      }));
+    }
+  }
+
+  public void notifyStickyRemove(WXCell compToRemove) {
+    if (compToRemove == null)
+      return;
+    final WXCell component = mHeaderComps.remove(compToRemove.getRef());
+    final View headerView = mHeaderViews.remove(compToRemove.getRef());
+
+
+    if(component == null || headerView == null){
+      WXLogUtils.e(" sticky header to remove not found."+compToRemove.getRef());
+      return;
+    }
+    if(mCurrentStickyRef != null && mCurrentStickyRef.equals(compToRemove.getRef())){
+      mCurrentStickyRef = null;
+    }
+    mParent.post(WXThread.secure(new Runnable() {
+      @Override
+      public void run() {
+        mParent.removeView(headerView);
+        component.recoverySticky();
+      }
+    }));
+  }
+
+
+  public void updateStickyView(int currentStickyPos) {
+    Iterator<Map.Entry<String, WXCell>> iterator = mHeaderComps.entrySet().iterator();
+    List<WXCell> toRemove = new ArrayList<>();
+    while(iterator.hasNext()){
+      Map.Entry<String, WXCell> next = iterator.next();
+      WXCell cell = next.getValue();
+      int pos = cell.getScrollPositon();
+      if(pos > currentStickyPos){
+        toRemove.add(cell);
+      }else if(pos == currentStickyPos){
+        mCurrentStickyRef = cell.getRef();
+        View view = mHeaderViews.get(cell.getRef());
+        if(view != null){
+          view.bringToFront();
+        }
+      }
+    }
+    for(WXCell cell:toRemove){
+      notifyStickyRemove(cell);
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
old mode 100755
new mode 100644
index cf9419d..0bf7b92
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXCell.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -230,6 +44,9 @@
     private View mHeadView;
     private boolean mLazy = true;
 
+    /** used in list sticky detect **/
+    private int mScrollPositon = -1;
+
 
     @Deprecated
     public WXCell(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
@@ -274,6 +91,14 @@
         mLastLocationY = l;
     }
 
+    void setScrollPositon(int pos){
+        mScrollPositon = pos;
+    }
+
+    public int getScrollPositon() {
+        return mScrollPositon;
+    }
+
     @Override
     public ViewGroup getRealView() {
         return mRealView;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
old mode 100755
new mode 100644
index 3e68de1..9b36be4
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/WXListComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -208,16 +22,24 @@
 
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.annotation.Component;
+import com.taobao.weex.common.Constants;
 import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.dom.WXRecyclerDomObject;
+import com.taobao.weex.dom.flex.Spacing;
 import com.taobao.weex.ui.component.WXBaseRefresh;
+import com.taobao.weex.ui.component.WXBasicComponentType;
 import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXComponentProp;
 import com.taobao.weex.ui.component.WXLoading;
 import com.taobao.weex.ui.component.WXRefresh;
 import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.ui.view.listview.WXRecyclerView;
 import com.taobao.weex.ui.view.listview.adapter.ListBaseViewHolder;
 import com.taobao.weex.ui.view.refresh.wrapper.BounceRecyclerView;
 import com.taobao.weex.utils.WXLogUtils;
 
+import java.util.Map;
+
 /**
  * Unlike other components, there is immutable bi-directional association between View and
  * ViewHolder, while only mutable and temporal uni-directional association between view and
@@ -229,19 +51,36 @@
 
 public class WXListComponent extends BasicListComponent<BounceRecyclerView> {
   private String TAG = "WXListComponent";
+  private WXRecyclerDomObject mDomObject;
+  private float mPaddingLeft;
+  private float mPaddingRight;
 
   @Deprecated
   public WXListComponent(WXSDKInstance instance, WXDomObject dom, WXVContainer parent, String instanceId, boolean isLazy) {
     this(instance, dom, parent, isLazy);
   }
 
+
   public WXListComponent(WXSDKInstance instance, WXDomObject node, WXVContainer parent, boolean lazy) {
     super(instance, node, parent);
+    if (node != null && node instanceof WXRecyclerDomObject) {
+      mDomObject = (WXRecyclerDomObject) node;
+      mDomObject.preCalculateCellWidth();
+
+      if(WXBasicComponentType.WATERFALL.equals(node.getType())){
+        mLayoutType = WXRecyclerView.TYPE_STAGGERED_GRID_LAYOUT;
+      }else{
+        mLayoutType = mDomObject.getLayoutType();
+      }
+      updateRecyclerAttr();
+
+    }
   }
 
   @Override
   protected BounceRecyclerView generateListView(Context context, int orientation) {
-    return new BounceRecyclerView(context, orientation);
+
+    return new BounceRecyclerView(context,mLayoutType,mColumnCount,mColumnGap,orientation);
   }
 
   @Override
@@ -286,10 +125,72 @@
       }, 100);
       return true;
     }
-
     return false;
   }
 
+  private void updateRecyclerAttr(){
+    mColumnCount = mDomObject.getColumnCount();
+    mColumnGap = mDomObject.getColumnGap();
+    mColumnWidth = mDomObject.getColumnWidth();
+    mPaddingLeft =mDomObject.getPadding().get(Spacing.LEFT);
+    mPaddingRight =mDomObject.getPadding().get(Spacing.RIGHT);
+  }
+
+  @WXComponentProp(name = Constants.Name.COLUMN_WIDTH)
+  public void setColumnWidth(int columnCount)  {
+    if(mDomObject.getColumnWidth() != mColumnWidth){
+      markComponentUsable();
+      updateRecyclerAttr();
+      WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+      wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
+    }
+  }
+
+  @WXComponentProp(name = Constants.Name.COLUMN_COUNT)
+  public void setColumnCount(int columnCount){
+    if(mDomObject.getColumnCount() != mColumnCount){
+      markComponentUsable();
+      updateRecyclerAttr();
+      WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+      wxRecyclerView.initView(getContext(), mLayoutType,mColumnCount,mColumnGap,getOrientation());
+    }
+  }
+
+  @WXComponentProp(name = Constants.Name.COLUMN_GAP)
+  public void setColumnGap(float columnGap) throws InterruptedException {
+    if(mDomObject.getColumnGap() != mColumnGap) {
+      markComponentUsable();
+      updateRecyclerAttr();
+      WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+      wxRecyclerView.initView(getContext(), mLayoutType, mColumnCount, mColumnGap, getOrientation());
+    }
+  }
+
+  @WXComponentProp(name = Constants.Name.SCROLLABLE)
+  public void setScrollable(boolean scrollable) {
+    WXRecyclerView inner = getHostView().getInnerView();
+    inner.setScrollable(scrollable);
+  }
+
+  @Override
+  public void updateProperties(Map<String, Object> props) {
+    super.updateProperties(props);
+    if(props.containsKey(Constants.Name.PADDING)
+            ||props.containsKey(Constants.Name.PADDING_LEFT)
+            || props.containsKey(Constants.Name.PADDING_RIGHT)){
+
+      if(mPaddingLeft !=mDomObject.getPadding().get(Spacing.LEFT)
+              || mPaddingRight !=mDomObject.getPadding().get(Spacing.RIGHT)) {
+
+        markComponentUsable();
+        updateRecyclerAttr();
+        WXRecyclerView wxRecyclerView = getHostView().getInnerView();
+        wxRecyclerView.initView(getContext(), mLayoutType, mColumnCount, mColumnGap, getOrientation());
+      }
+    }
+
+  }
+
   @Override
   public void createChildViewAt(int index) {
     int indexToCreate = index;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/OnActivePseudoListner.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/OnActivePseudoListner.java
index b0eccd9..961e3b8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/OnActivePseudoListner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/OnActivePseudoListner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.pesudo;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/PesudoStatus.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/PesudoStatus.java
index 26b0fc3..04e5fee 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/PesudoStatus.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/PesudoStatus.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.pesudo;
 
@@ -297,7 +111,7 @@
      * NEW INSTANCE, DO NOT USE MAP OBJECT FROM pesudoStyles
      */
     Map<String,Object> resultStyles = new ArrayMap<>();
-    if(prevStatusesStr != null){
+    if(prevUpdateStyles != null){
       resultStyles.putAll(prevUpdateStyles);
     }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/TouchActivePseudoListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/TouchActivePseudoListener.java
index 92fdbf9..8caf3f2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/TouchActivePseudoListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/pesudo/TouchActivePseudoListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.pesudo;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
index 9ca3f50..0b89242 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java
@@ -1,209 +1,24 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
+import android.content.Context;
 import android.text.TextUtils;
 
 import com.alibaba.fastjson.JSON;
@@ -230,12 +45,16 @@
             try {
                 param = URLDecoder.decode(param, "utf-8");
                 JSONObject jsObj = JSON.parseObject(param);
+                Context cxt = mWXSDKInstance.getContext();
                 if (DEVICE_WIDTH.endsWith(jsObj.getString(WIDTH))) {
-                    mWXSDKInstance.setViewPortWidth(WXViewUtils.getScreenWidth(mWXSDKInstance.getContext()));
+                    int width = (int)(WXViewUtils.getScreenWidth(cxt)/WXViewUtils.getScreenDensity(cxt));
+                    mWXSDKInstance.setViewPortWidth(width);
+                    mWXSDKInstance.setInstanceViewPortWidth(width);
                 } else {
                     int width = jsObj.getInteger(WIDTH);
                     if (width > 0) {
                         mWXSDKInstance.setViewPortWidth(width);
+                        mWXSDKInstance.setInstanceViewPortWidth(width);
                     }
                 }
             } catch (Exception e) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXModalUIModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXModalUIModule.java
old mode 100755
new mode 100644
index 5e0c704..7d27d07
--- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXModalUIModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXModalUIModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -454,4 +268,4 @@
       activeDialog.dismiss();
     }
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXTimerModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXTimerModule.java
index 971a92b..d60184a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXTimerModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXTimerModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -336,4 +150,4 @@
       handler.sendMessageDelayed(message, interval);
     }
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXWebViewModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXWebViewModule.java
index 2eab6d4..5e058b9 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXWebViewModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXWebViewModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderResult.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderResult.java
new file mode 100644
index 0000000..dab1106
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderResult.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.ui.view;
+
+
+import com.taobao.weex.ui.component.WXComponent;
+
+public interface IRenderResult<T extends WXComponent> {
+    T getComponent();
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderStatus.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderStatus.java
index 0c3de42..f61b0fa 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderStatus.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/IRenderStatus.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXScroller.java
old mode 100755
new mode 100644
index 719d9ed..942c7aa
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXScroller.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXTextView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXTextView.java
index 87ce9bc..60b2533 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXTextView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWXTextView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWebView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWebView.java
index 9a6da6f..9b3f0c7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/IWebView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/IWebView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseCircleIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseCircleIndicator.java
old mode 100755
new mode 100644
index 879813c..18b88af
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseCircleIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseCircleIndicator.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -502,4 +316,4 @@
     }
     return mCircleViewPager.getRealCount();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseRefreshLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseRefreshLayout.java
old mode 100755
new mode 100644
index 97821aa..ff45491
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseRefreshLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXBaseRefreshLayout.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleIndicator.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleIndicator.java
old mode 100755
new mode 100644
index 5da98c7..b3acdb7
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleIndicator.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleIndicator.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCirclePageAdapter.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCirclePageAdapter.java
old mode 100755
new mode 100644
index 482e1f8..281c4e2
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCirclePageAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCirclePageAdapter.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
old mode 100755
new mode 100644
index 2abf675..160dcb1
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXCircleViewPager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -233,7 +47,7 @@
   private boolean scrollable = true;
   private int mState = ViewPager.SCROLL_STATE_IDLE;
 
-  private Runnable scrollAction = new ScrollAction(this, intervalTime);
+  private Runnable scrollAction = new ScrollAction(this);
 
   @SuppressLint("NewApi")
   public WXCircleViewPager(Context context) {
@@ -468,6 +282,17 @@
     this.scrollable = scrollable;
   }
 
+  private void showNextItem() {
+    if (!needLoop && superGetCurrentItem() == getRealCount() - 1) {
+      return;
+    }
+    if (getRealCount() == 2 && superGetCurrentItem() == 1) {
+      superSetCurrentItem(0, true);
+    } else {
+      superSetCurrentItem(superGetCurrentItem() + 1, true);
+    }
+  }
+
   @Override
   protected void onDetachedFromWindow() {
     super.onDetachedFromWindow();
@@ -476,10 +301,8 @@
 
   private static final class ScrollAction implements Runnable {
     private WeakReference<WXCircleViewPager> targetRef;
-    private long intervalTime;
-    private ScrollAction(WXCircleViewPager target, long intervalTime) {
+    private ScrollAction(WXCircleViewPager target) {
       this.targetRef = new WeakReference<>(target);
-      this.intervalTime = intervalTime;
     }
 
     @Override
@@ -487,9 +310,9 @@
       WXLogUtils.d("[CircleViewPager] trigger auto play action");
       WXCircleViewPager target;
       if ((target = targetRef.get()) != null) {
-        target.superSetCurrentItem(target.superGetCurrentItem() + 1, true);
+        target.showNextItem();
         target.removeCallbacks(this);
-        target.postDelayed(this, intervalTime);
+        target.postDelayed(this, target.getIntervalTime());
       }
     }
   }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
old mode 100755
new mode 100644
index 04ee8fe..3bbc9ac
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXEditText.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
old mode 100755
new mode 100644
index 53b9749..ec39462
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXFrameLayout.java
@@ -1,226 +1,46 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
 import android.content.Context;
 import android.graphics.Canvas;
+import android.support.annotation.Nullable;
 import android.view.MotionEvent;
 import android.widget.FrameLayout;
 
+import com.taobao.weex.ui.component.WXDiv;
 import com.taobao.weex.ui.view.gesture.WXGesture;
 import com.taobao.weex.ui.view.gesture.WXGestureObservable;
 import com.taobao.weex.utils.WXViewUtils;
 
+import java.lang.ref.WeakReference;
+
 /**
  * FrameLayout wrapper
  *
  */
-public class WXFrameLayout extends FrameLayout implements WXGestureObservable {
+public class WXFrameLayout extends FrameLayout implements WXGestureObservable,IRenderStatus<WXDiv>,IRenderResult<WXDiv> {
 
   private WXGesture wxGesture;
 
+  private WeakReference<WXDiv> mWeakReference;
+
   public WXFrameLayout(Context context) {
     super(context);
   }
@@ -244,4 +64,15 @@
     WXViewUtils.clipCanvasWithinBorderBox(this, canvas);
     super.onDraw(canvas);
   }
+
+  @Override
+  public void holdComponent(WXDiv component) {
+    mWeakReference = new WeakReference<WXDiv>(component);
+  }
+
+  @Nullable
+  @Override
+  public WXDiv getComponent() {
+    return null != mWeakReference ? mWeakReference.get() : null;
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
old mode 100755
new mode 100644
index 39c6040..f44a224
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXHorizontalScrollView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
old mode 100755
new mode 100644
index 4c6bc04..32baa00
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXImageView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -223,7 +37,8 @@
 import java.util.Arrays;
 
 public class WXImageView extends ImageView implements WXGestureObservable,
-                                                      IRenderStatus<WXImage> {
+                                                      IRenderStatus<WXImage>,
+                                                      IRenderResult<WXImage>, WXImage.Measurable {
 
   private WeakReference<WXImage> mWeakReference;
   private WXGesture wxGesture;
@@ -305,4 +120,28 @@
   public void holdComponent(WXImage component) {
     mWeakReference = new WeakReference<>(component);
   }
+
+  @Nullable
+  @Override
+  public WXImage getComponent() {
+    return null != mWeakReference ? mWeakReference.get() : null;
+  }
+
+  @Override
+  public int getNaturalWidth() {
+    Drawable drawable = getDrawable();
+    if (drawable != null && drawable instanceof ImageDrawable) {
+      return ((ImageDrawable) drawable).getBitmapWidth();
+    }
+    return -1;
+  }
+
+  @Override
+  public int getNaturalHeight() {
+    Drawable drawable = getDrawable();
+    if (drawable != null && drawable instanceof ImageDrawable) {
+      return ((ImageDrawable) drawable).getBitmapHeight();
+    }
+    return -1;
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXLoadingLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXLoadingLayout.java
index e3e2e84..e4b356d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXLoadingLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXLoadingLayout.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXRefreshLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXRefreshLayout.java
index 39ffef5..427adc5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXRefreshLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXRefreshLayout.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
old mode 100755
new mode 100644
index a11eb40..b6e9914
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXScrollView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -548,11 +362,11 @@
     }
   }
 
-  private View procSticky(Map<String, HashMap<String, WXComponent>> mStickyMap) {
+  private View procSticky(Map<String, Map<String, WXComponent>> mStickyMap) {
     if (mStickyMap == null) {
       return null;
     }
-    HashMap<String, WXComponent> stickyMap = mStickyMap.get(mWAScroller.getRef());
+    Map<String, WXComponent> stickyMap = mStickyMap.get(mWAScroller.getRef());
     if (stickyMap == null) {
       return null;
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSmoothScroller.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSmoothScroller.java
old mode 100755
new mode 100644
index d8e1746..4dfed7e
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSmoothScroller.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSmoothScroller.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSwitchView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSwitchView.java
old mode 100755
new mode 100644
index e8d221e..fc96a7d
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSwitchView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXSwitchView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXTextView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXTextView.java
old mode 100755
new mode 100644
index d56b196..a98be22
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXTextView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXTextView.java
@@ -1,212 +1,28 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
 import android.content.Context;
 import android.graphics.Canvas;
+import android.support.annotation.Nullable;
 import android.text.Layout;
+import android.text.TextUtils;
 import android.view.MotionEvent;
 import android.view.View;
 
@@ -220,11 +36,13 @@
  * TextView wrapper
  */
 public class WXTextView extends View implements WXGestureObservable, IWXTextView,
-                                                IRenderStatus<WXText> {
+                                                IRenderStatus<WXText>, IRenderResult<WXText> {
 
   private WeakReference<WXText> mWeakReference;
   private WXGesture wxGesture;
   private Layout textLayout;
+  private boolean mIsLabelSet = false;
+
   public WXTextView(Context context) {
     super(context);
   }
@@ -266,7 +84,7 @@
 
   public void setTextLayout(Layout layout) {
     this.textLayout = layout;
-    if(layout!=null){
+    if(layout!=null && !mIsLabelSet){
       setContentDescription(layout.getText());
     }
     if (mWeakReference != null) {
@@ -277,8 +95,27 @@
     }
   }
 
+  public void setAriaLabel(String label){
+    if(!TextUtils.isEmpty(label)){
+      mIsLabelSet = true;
+      setContentDescription(label);
+    }else{
+      mIsLabelSet = false;
+      if(textLayout != null){
+        setContentDescription(textLayout.getText());
+      }
+    }
+
+  }
+
   @Override
   public void holdComponent(WXText component) {
     mWeakReference = new WeakReference<>(component);
   }
+
+  @Nullable
+  @Override
+  public WXText getComponent() {
+     return null != mWeakReference ? mWeakReference.get() : null;
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXVideoView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXVideoView.java
old mode 100755
new mode 100644
index b8e2730..f679c38
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXVideoView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXVideoView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXWebView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXWebView.java
index 5ea1f33..68fac88 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/WXWebView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/WXWebView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderCorner.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderCorner.java
index f351a4d..a396063 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderCorner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderCorner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
old mode 100755
new mode 100644
index 174b4f7..42d518a
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderDrawable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
@@ -450,11 +264,15 @@
     invalidateSelf();
   }
 
-  public void setImage(Shader shader){
-    mShader=shader;
+  public void setImage(Shader shader) {
+    mShader = shader;
     invalidateSelf();
   }
 
+  public boolean hasImage(){
+    return mShader!=null;
+  }
+
   public boolean isRounded() {
     return mBorderRadius != null &&
            (!FloatUtil.floatsEqual(getBorderRadius(mBorderRadius, BORDER_TOP_LEFT_RADIUS), 0) ||
@@ -629,7 +447,6 @@
     Shader shader = borderStyle.getLineShader(borderWidth, color, side);
     mPaint.setShader(shader);
     mPaint.setColor(color);
-    mPaint.setStrokeWidth(borderWidth);
     mPaint.setStrokeCap(Paint.Cap.ROUND);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderEdge.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderEdge.java
index fa10854..0da0354 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderEdge.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderEdge.java
@@ -1,213 +1,27 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
 import android.graphics.Canvas;
 import android.graphics.Paint;
-import android.graphics.Path;
 import android.graphics.PointF;
+import android.graphics.RectF;
 import android.support.annotation.NonNull;
 
 import com.taobao.weex.dom.flex.Spacing;
@@ -243,46 +57,53 @@
    * @param paint the paint which is used to draw.
    */
   void drawEdge(@NonNull Canvas canvas, @NonNull Paint paint) {
+    RectF oval;
     PointF lineStart = mPreCorner.getCornerEnd();
-    Path path;
-    if (mPreCorner.hasOuterCorner()) {
-      path = new Path();
-      if (mPreCorner.hasInnerCorner()) {
-        path.addArc(mPreCorner.getOvalIfInnerCornerExist(),
-                    mPreCorner.getAngleBisectorDegree(),
-                    BorderCorner.SWEEP_ANGLE);
-      } else {
-        paint.setStrokeWidth(mPreCorner.getOuterCornerRadius());
-        path.addArc(mPreCorner.getOvalIfInnerCornerNotExist(),
-                    mPreCorner.getAngleBisectorDegree(),
-                    BorderCorner.SWEEP_ANGLE);
-      }
-      canvas.drawPath(path, paint);
-    } else {
-      PointF actualStart = mPreCorner.getSharpCornerStart();
-      canvas.drawLine(actualStart.x, actualStart.y, lineStart.x, lineStart.y, paint);
-    }
+    paint.setStrokeWidth(mBorderWidth);
+
+    drawRoundedCorner(canvas, paint, mPreCorner,
+                      mPreCorner.getAngleBisectorDegree(),
+                      mPreCorner.getSharpCornerStart(), lineStart);
 
     paint.setStrokeWidth(mBorderWidth);
     PointF lineEnd = mPostCorner.getCornerStart();
     canvas.drawLine(lineStart.x, lineStart.y, lineEnd.x, lineEnd.y, paint);
 
-    if (mPostCorner.hasOuterCorner()) {
-      path = new Path();
-      if (mPostCorner.hasInnerCorner()) {
-        path.addArc(mPostCorner.getOvalIfInnerCornerExist(),
-                    mPostCorner.getAngleBisectorDegree() - BorderCorner.SWEEP_ANGLE,
-                    BorderCorner.SWEEP_ANGLE);
+    drawRoundedCorner(canvas, paint, mPostCorner,
+                      mPostCorner.getAngleBisectorDegree() - BorderCorner.SWEEP_ANGLE,
+                      lineEnd, mPostCorner.getSharpCornerEnd());
+  }
+
+  /**
+   * Draw the Rounded corner.
+   * @param canvas the canvas where the edge will be drawn
+   * @param paint the paint which is used to draw
+   * @param borderCorner the corner to be drawn
+   * @param startAngle the startAngle of the corner
+   * @param startPoint the startPoint of the line
+   * @param endPoint the endPoint of the line
+   */
+  private void drawRoundedCorner(@NonNull Canvas canvas, @NonNull Paint paint,
+                                 @NonNull BorderCorner borderCorner, float startAngle,
+                                 @NonNull PointF startPoint, @NonNull PointF endPoint) {
+    if (borderCorner.hasOuterCorner()) {
+      RectF oval;
+      if (borderCorner.hasInnerCorner()) {
+        oval = borderCorner.getOvalIfInnerCornerExist();
       } else {
-        paint.setStrokeWidth(mPostCorner.getOuterCornerRadius());
-        path.addArc(mPostCorner.getOvalIfInnerCornerNotExist(),
-                    mPostCorner.getAngleBisectorDegree() - BorderCorner.SWEEP_ANGLE,
-                    BorderCorner.SWEEP_ANGLE);
+        paint.setStrokeWidth(borderCorner.getOuterCornerRadius());
+        oval = borderCorner.getOvalIfInnerCornerNotExist();
       }
-      canvas.drawPath(path, paint);
+      /*Due to the problem of hardware-acceleration, border-radius in some case will not
+       be rendered if Path.addArc used instead and the following condition met.
+       1. hardware-acceleration enabled
+       2. System version is Android 4.1
+       3. Screen width is 720px.
+       http://dotwe.org/weex/421b9ad09fde51c0b49bb56b37fcf955
+      */
+      canvas.drawArc(oval, startAngle, BorderCorner.SWEEP_ANGLE, false, paint);
     } else {
-      PointF actualEnd = mPostCorner.getSharpCornerEnd();
-      canvas.drawLine(lineEnd.x, lineEnd.y, actualEnd.x, actualEnd.y, paint);
+      canvas.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, paint);
     }
   }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderRadiusType.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderRadiusType.java
index 607e4ab..930ef14 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderRadiusType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderRadiusType.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view.border;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderStyle.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderStyle.java
index eb442d9..aab38f7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderStyle.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderStyle.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderUtil.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderUtil.java
index 64896bf..4ce218e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderUtil.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view.border;
@@ -290,4 +104,4 @@
     }
     return false;
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderWidthStyleColorType.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderWidthStyleColorType.java
index e621a08..44ec8f8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderWidthStyleColorType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BorderWidthStyleColorType.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view.border;
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomLeftCorner.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomLeftCorner.java
index 8867069..cf24477 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomLeftCorner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomLeftCorner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomRightCorner.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomRightCorner.java
index bbecbb4..de444c1 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomRightCorner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/BottomRightCorner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopLeftCorner.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopLeftCorner.java
index 1bd100e..ce63c4b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopLeftCorner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopLeftCorner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopRightCorner.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopRightCorner.java
index e6c82d3..77a513f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopRightCorner.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/border/TopRightCorner.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.border;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGesture.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGesture.java
old mode 100755
new mode 100644
index f0afd7c..8d3d480
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGesture.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGesture.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.gesture;
 
@@ -256,6 +70,7 @@
   private WXGestureType mPendingPan = null;//event type to notify when action_up or action_cancel
   private int mParentOrientation =-1;
   private boolean mIsPreventMoveEvent = false;
+  private boolean mIsTouchEventConsumed = false; //Reset to false when first touch event, set to true when gesture event fired.
 
   public WXGesture(WXComponent wxComponent, Context context) {
     this.component = wxComponent;
@@ -288,6 +103,15 @@
     mIsPreventMoveEvent = preventMoveEvent;
   }
 
+  /**
+   *
+   * @return true if current touch event is already consumed by gesture.
+   * Reset to false when next first touch event, set to true when gesture event fired.
+   */
+  public boolean isTouchEventConsumedByAdvancedGesture(){
+    return mIsTouchEventConsumed;
+  }
+
   @Override
   public boolean onTouch(View v, MotionEvent event) {
     try {
@@ -295,6 +119,7 @@
       switch (event.getActionMasked()) {
         case MotionEvent.ACTION_POINTER_DOWN:
         case MotionEvent.ACTION_DOWN:
+          mIsTouchEventConsumed = false;
           /**
            * If component has same scroll orientation with it's parent and it's parent not scrollable
            * , we should disallow parent in DOWN.
@@ -559,8 +384,8 @@
     globalEventOffset.set((int) eventX, (int) eventY);
     component.getRealView().getGlobalVisibleRect(globalRect, globalOffset);
     globalEventOffset.offset(globalOffset.x, globalOffset.y);
-    return new PointF(WXViewUtils.getWebPxByWidth(globalEventOffset.x,component.getInstance().getViewPortWidth()),
-                      WXViewUtils.getWebPxByWidth(globalEventOffset.y,component.getInstance().getViewPortWidth()));
+    return new PointF(WXViewUtils.getWebPxByWidth(globalEventOffset.x,component.getInstance().getInstanceViewPortWidth()),
+                      WXViewUtils.getWebPxByWidth(globalEventOffset.y,component.getInstance().getInstanceViewPortWidth()));
   }
 
   /**
@@ -605,8 +430,8 @@
     locLeftTop.set(0, 0);
     component.computeVisiblePointInViewCoordinate(locLeftTop);
     locEventOffset.offset(locLeftTop.x, locLeftTop.y);
-    return new PointF(WXViewUtils.getWebPxByWidth(locEventOffset.x,component.getInstance().getViewPortWidth()),
-                      WXViewUtils.getWebPxByWidth(locEventOffset.y,component.getInstance().getViewPortWidth()));
+    return new PointF(WXViewUtils.getWebPxByWidth(locEventOffset.x,component.getInstance().getInstanceViewPortWidth()),
+                      WXViewUtils.getWebPxByWidth(locEventOffset.y,component.getInstance().getInstanceViewPortWidth()));
   }
 
   private static class GestureHandler extends android.os.Handler {
@@ -627,6 +452,7 @@
           component.getDomObject().getRef(),
           HighLevelGesture.LONG_PRESS.toString(),
           list.get(list.size() - 1));
+      mIsTouchEventConsumed = true;
     }
   }
 
@@ -689,6 +515,7 @@
         result = true;
       }
     }
+    mIsTouchEventConsumed = mIsTouchEventConsumed || result;
     return result;
   }
 
@@ -698,4 +525,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureObservable.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureObservable.java
old mode 100755
new mode 100644
index e361f0a..1735c30
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureObservable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureObservable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.gesture;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureType.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureType.java
old mode 100755
new mode 100644
index b5518c7..807daac
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureType.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/gesture/WXGestureType.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.gesture;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/ExtendedLinearLayoutManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/ExtendedLinearLayoutManager.java
index be8afae..ad5a370 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/ExtendedLinearLayoutManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/ExtendedLinearLayoutManager.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview;
 
@@ -227,6 +41,31 @@
     }
 
     @Override
+    public boolean supportsPredictiveItemAnimations() {
+        return false;
+    }
+
+    public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
+        try {
+            super.onLayoutChildren(recycler, state);
+        } catch (IndexOutOfBoundsException e) {
+            e.printStackTrace();
+
+        }
+    }
+
+    @Override
+    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
+        try {
+            return super.scrollVerticallyBy(dy, recycler, state);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return 0;
+    }
+
+
+    @Override
     public void smoothScrollToPosition(RecyclerView recyclerView, RecyclerView.State state,
                                        int position) {
         if (smoothScroller == null) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
old mode 100755
new mode 100644
index fe912af..2d2c960
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/WXRecyclerView.java
@@ -1,210 +1,26 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview;
 
+import android.annotation.TargetApi;
 import android.content.Context;
+import android.os.Build;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.OrientationHelper;
@@ -212,6 +28,7 @@
 import android.support.v7.widget.StaggeredGridLayoutManager;
 import android.view.MotionEvent;
 
+import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.WXThread;
 import com.taobao.weex.ui.view.gesture.WXGesture;
 import com.taobao.weex.ui.view.gesture.WXGestureObservable;
@@ -222,7 +39,6 @@
   public static final int TYPE_GRID_LAYOUT = 2;
   public static final int TYPE_STAGGERED_GRID_LAYOUT = 3;
   private WXGesture mGesture;
-
   private boolean scrollable = true;
 
   public WXRecyclerView(Context context) {
@@ -241,6 +57,10 @@
   public boolean postDelayed(Runnable action, long delayMillis) {
     return super.postDelayed(WXThread.secure(action), delayMillis);
   }
+  public void initView(Context context, int type,int orientation) {
+    initView(context,type, Constants.Value.COLUMN_COUNT_NORMAL,Constants.Value.COLUMN_GAP_NORMAL,orientation);
+  }
+
 
   /**
    *
@@ -248,39 +68,14 @@
    * @param type
    * @param orientation should be {@link OrientationHelper#HORIZONTAL} or {@link OrientationHelper#VERTICAL}
    */
-  public void initView(Context context, int type,int orientation) {
+  @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
+  public void initView(Context context, int type, int columnCount, float columnGap, int orientation) {
     if (type == TYPE_GRID_LAYOUT) {
-      setLayoutManager(new GridLayoutManager(context, 2,orientation,false));
+      setLayoutManager(new GridLayoutManager(context, columnCount,orientation,false));
     } else if (type == TYPE_STAGGERED_GRID_LAYOUT) {
-      setLayoutManager(new StaggeredGridLayoutManager(2, orientation));
+      setLayoutManager(new StaggeredGridLayoutManager(columnCount, orientation));
     } else if (type == TYPE_LINEAR_LAYOUT) {
-      setLayoutManager(new ExtendedLinearLayoutManager(context,orientation,false){
-
-        @Override
-        public boolean supportsPredictiveItemAnimations() {
-          return false;
-        }
-
-        public void onLayoutChildren(RecyclerView.Recycler recycler, RecyclerView.State state) {
-          try {
-            super.onLayoutChildren(recycler, state);
-          } catch (IndexOutOfBoundsException e) {
-             e.printStackTrace();
-
-          }
-        }
-
-        @Override
-        public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
-          try {
-            return super.scrollVerticallyBy(dy, recycler, state);
-          } catch (Exception e) {
-            e.printStackTrace();
-          }
-          return 0;
-        }
-
-      });
+      setLayoutManager(new ExtendedLinearLayoutManager(context,orientation,false));
     }
   }
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IOnLoadMoreListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IOnLoadMoreListener.java
old mode 100755
new mode 100644
index 7015dff..e703149
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IOnLoadMoreListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IOnLoadMoreListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IRecyclerAdapterListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IRecyclerAdapterListener.java
old mode 100755
new mode 100644
index 5ac295e..36094f2
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IRecyclerAdapterListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/IRecyclerAdapterListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/ListBaseViewHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/ListBaseViewHolder.java
old mode 100755
new mode 100644
index e78c10a..844cdc0
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/ListBaseViewHolder.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/ListBaseViewHolder.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
@@ -208,6 +22,7 @@
 import android.view.View;
 
 import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.ui.component.WXHeader;
 
 import java.lang.ref.WeakReference;
 
@@ -219,6 +34,7 @@
  */
 public class ListBaseViewHolder extends RecyclerView.ViewHolder {
   private int mViewType;
+  private boolean isRecycled = true;
   private WeakReference<WXComponent> mComponent;
 
   public ListBaseViewHolder(WXComponent component, int viewType) {
@@ -226,18 +42,42 @@
     mViewType = viewType;
     mComponent = new WeakReference(component);
   }
+
   public ListBaseViewHolder(View view, int viewType) {
     super(view);
     mViewType = viewType;
   }
 
+  public boolean isRecycled() {
+    return isRecycled;
+  }
 
-  public boolean canRecycled(){
-    if (mComponent!=null && mComponent.get() != null) {
-        return mComponent.get().canRecycled();
+  public void recycled() {
+    if (mComponent != null && mComponent.get() != null) {
+      mComponent.get().recycled();
+      isRecycled = true;
+
+    }
+  }
+
+  public void bindData(WXComponent component) {
+    if (mComponent != null && mComponent.get() != null) {
+      mComponent.get().bindData(component);
+      isRecycled = false;
+    }
+  }
+    
+  public boolean isFullSpan() {
+    return mComponent != null && mComponent.get() instanceof WXHeader;
+  }
+
+  public boolean canRecycled() {
+    if (mComponent != null && mComponent.get() != null) {
+      return mComponent.get().canRecycled();
     }
     return true;
   }
+
   public View getView() {
     return itemView;
   }
@@ -245,11 +85,13 @@
   public int getViewType() {
     return mViewType;
   }
-  public void setComponentUsing(boolean using){
-    if(mComponent!=null && mComponent.get() != null)
-        mComponent.get().setUsing(using);
+
+  public void setComponentUsing(boolean using) {
+    if (mComponent != null && mComponent.get() != null)
+      mComponent.get().setUsing(using);
   }
-  public WXComponent getComponent(){
+
+  public WXComponent getComponent() {
     return mComponent != null ? mComponent.get() : null;
   }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/RecyclerViewBaseAdapter.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/RecyclerViewBaseAdapter.java
old mode 100755
new mode 100644
index 9c89ed1..7c3f92d
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/RecyclerViewBaseAdapter.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/RecyclerViewBaseAdapter.java
@@ -1,210 +1,25 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
 import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.StaggeredGridLayoutManager;
 import android.view.ViewGroup;
 
 
@@ -213,7 +28,6 @@
  */
 public class RecyclerViewBaseAdapter<T extends ListBaseViewHolder> extends RecyclerView.Adapter<T> {
 
-  private String TAG = "RecyclerViewBaseAdapter";
   private IRecyclerAdapterListener iRecyclerAdapterListener;
 
   public RecyclerViewBaseAdapter(IRecyclerAdapterListener Listener) {
@@ -222,7 +36,6 @@
 
   @Override
   public T onCreateViewHolder(ViewGroup parent, int viewType) {
-    //        WXLogUtils.d(TAG, "onCreateViewHolder viewType:" + viewType);
     if (iRecyclerAdapterListener != null) {
       return (T) iRecyclerAdapterListener.onCreateViewHolder(parent, viewType);
     }
@@ -231,8 +44,21 @@
   }
 
   @Override
+  public void onViewAttachedToWindow(T holder) {
+    super.onViewAttachedToWindow(holder);
+    if( holder !=null && holder.isFullSpan()){
+      ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
+      if(lp != null
+              && lp instanceof StaggeredGridLayoutManager.LayoutParams
+              ) {
+        StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp;
+        p.setFullSpan(true);
+      }
+    }
+  }
+
+  @Override
   public void onBindViewHolder(T viewHolder, int i) {
-    //        WXLogUtils.d(TAG, "onBindViewHolder position: " + i);
     if (iRecyclerAdapterListener != null) {
       iRecyclerAdapterListener.onBindViewHolder(viewHolder, i);
     }
@@ -240,7 +66,6 @@
 
   @Override
   public int getItemViewType(int position) {
-    //        WXLogUtils.d(TAG, "getItemViewType position:"+position);
     if (iRecyclerAdapterListener != null) {
       return iRecyclerAdapterListener.getItemViewType(position);
     }
@@ -262,7 +87,6 @@
 
   @Override
   public void onViewRecycled(T holder) {
-    //        WXLogUtils.d(TAG, "onViewRecycled position ");
     if (iRecyclerAdapterListener != null) {
       iRecyclerAdapterListener.onViewRecycled(holder);
     }
@@ -271,10 +95,9 @@
 
   @Override
   public boolean onFailedToRecycleView(T holder) {
-    //        WXLogUtils.d(TAG, "onFailedToRecycleView ");
     if (iRecyclerAdapterListener != null) {
       return iRecyclerAdapterListener.onFailedToRecycleView(holder);
     }
     return super.onFailedToRecycleView(holder);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/TransformItemDecoration.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/TransformItemDecoration.java
index 098c131..415c7d5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/TransformItemDecoration.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/TransformItemDecoration.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
old mode 100755
new mode 100644
index e9e0eb8..694c8b5
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/listview/adapter/WXRecyclerViewOnScrollListener.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.listview.adapter;
 
@@ -209,6 +23,8 @@
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.StaggeredGridLayoutManager;
 
+import com.taobao.weex.utils.WXLogUtils;
+
 import java.lang.ref.WeakReference;
 
 
@@ -225,17 +41,27 @@
   /**
    * The last position
    */
-  private int[] lastPositions;
+  private int[] mLastPositions;
+  /**
+   * The first position
+   */
+  private int[] mFirstPositions;
+
 
   /**
    * The location of last visible item
    */
-  private int lastVisibleItemPosition;
+  private int mLastVisibleItemPosition;
+
+  /**
+   * The location of last visible item
+   */
+  private int mFirstVisibleItemPosition;
 
   /**
    * The state of scroll status
    */
-  private int currentScrollState = 0;
+  private int mCurrentScrollState = 0;
 
   private WeakReference<IOnLoadMoreListener> listener;
 
@@ -246,14 +72,14 @@
   @Override
   public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
     super.onScrollStateChanged(recyclerView, newState);
-    currentScrollState = newState;
+    mCurrentScrollState = newState;
     RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
     int visibleItemCount = layoutManager.getChildCount();
     int totalItemCount = layoutManager.getItemCount();
 
     if (visibleItemCount != 0) {
-      int bottomOffset = (totalItemCount - lastVisibleItemPosition - 1) * (recyclerView.getHeight()) / visibleItemCount;
-      if (visibleItemCount > 0 && currentScrollState == RecyclerView.SCROLL_STATE_IDLE) {
+      int bottomOffset = (totalItemCount - mLastVisibleItemPosition - 1) * (recyclerView.getHeight()) / visibleItemCount;
+      if (visibleItemCount > 0 && mCurrentScrollState == RecyclerView.SCROLL_STATE_IDLE) {
         if (listener != null && listener.get() != null) {
           listener.get().onLoadMore(bottomOffset);
         }
@@ -265,48 +91,65 @@
   public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
     super.onScrolled(recyclerView, dx, dy);
     RecyclerView.LayoutManager layoutManager = recyclerView.getLayoutManager();
-    IOnLoadMoreListener l;
-    if((l = listener.get()) != null){
-      l.onBeforeScroll(dx,dy);
+    if(listener == null){
+      return;
     }
+    IOnLoadMoreListener iOnLoadMoreListener = listener.get();
 
-    //  int lastVisibleItemPosition = -1;
-    if (layoutManagerType == null) {
+    if(iOnLoadMoreListener!=null) {
+
+      iOnLoadMoreListener.onBeforeScroll(dx, dy);
+
       if (layoutManager instanceof LinearLayoutManager) {
         layoutManagerType = LAYOUT_MANAGER_TYPE.LINEAR;
+        LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager;
+        mLastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();
+        int firstVisible = linearLayoutManager.findFirstVisibleItemPosition();
+        iOnLoadMoreListener.notifyAppearStateChange(firstVisible
+            , mLastVisibleItemPosition
+            , dx
+            , dy);
       } else if (layoutManager instanceof GridLayoutManager) {
         layoutManagerType = LAYOUT_MANAGER_TYPE.GRID;
+        GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager;
+        mLastVisibleItemPosition = gridLayoutManager.findLastVisibleItemPosition();
+        iOnLoadMoreListener.notifyAppearStateChange(gridLayoutManager.findFirstVisibleItemPosition()
+            , mLastVisibleItemPosition
+            , dx
+            , dy);
+
       } else if (layoutManager instanceof StaggeredGridLayoutManager) {
         layoutManagerType = LAYOUT_MANAGER_TYPE.STAGGERED_GRID;
+        StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager;
+        int newSpanCount = staggeredGridLayoutManager.getSpanCount();
+        if (mLastPositions == null || newSpanCount != mLastPositions.length) {
+          mLastPositions = new int[newSpanCount];
+        }
+        if (mFirstPositions == null || newSpanCount != mFirstPositions.length) {
+          mFirstPositions = new int[newSpanCount];
+        }
+        //avoid crash of support-v7 original bug
+        try{
+          staggeredGridLayoutManager.findFirstVisibleItemPositions(mFirstPositions);
+          mFirstVisibleItemPosition = findMin(mFirstPositions);
+          staggeredGridLayoutManager.findLastVisibleItemPositions(mLastPositions);
+          mLastVisibleItemPosition = findMax(mLastPositions);
+          iOnLoadMoreListener.notifyAppearStateChange(
+              mFirstVisibleItemPosition
+              , mLastVisibleItemPosition
+              , dx
+              , dy);
+
+        }catch(Exception e){
+          e.printStackTrace();
+          WXLogUtils.e(e.toString());
+        }
+
       } else {
         throw new RuntimeException(
             "Unsupported LayoutManager used. Valid ones are LinearLayoutManager, GridLayoutManager and StaggeredGridLayoutManager");
       }
     }
-
-    switch (layoutManagerType) {
-      case LINEAR:
-        lastVisibleItemPosition = ((LinearLayoutManager) layoutManager)
-            .findLastVisibleItemPosition();
-        listener.get().notifyAppearStateChange(((LinearLayoutManager) layoutManager).findFirstVisibleItemPosition()
-            ,lastVisibleItemPosition
-            ,dx
-            ,dy);
-        break;
-      case GRID:
-        lastVisibleItemPosition = ((GridLayoutManager) layoutManager)
-            .findLastVisibleItemPosition();
-        break;
-      case STAGGERED_GRID:
-        StaggeredGridLayoutManager staggeredGridLayoutManager
-            = (StaggeredGridLayoutManager) layoutManager;
-        if (lastPositions == null) {
-          lastPositions = new int[staggeredGridLayoutManager.getSpanCount()];
-        }
-        staggeredGridLayoutManager.findLastVisibleItemPositions(lastPositions);
-        lastVisibleItemPosition = findMax(lastPositions);
-        break;
-    }
   }
 
   private int findMax(int[] lastPositions) {
@@ -319,6 +162,16 @@
     return max;
   }
 
+  private int findMin(int[] firstPositions) {
+    int min = firstPositions[0];
+    for (int value : firstPositions) {
+      if (value < min) {
+        min = value;
+      }
+    }
+    return min;
+  }
+
   public enum LAYOUT_MANAGER_TYPE {
     LINEAR,
     GRID,
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
old mode 100755
new mode 100644
index 10df4ff..5bd0146
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/CircleProgressBar.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.circlebar;
 
@@ -503,4 +317,4 @@
   public void setProgressRotation(float rotation) {
     mProgressDrawable.setProgressRotation(rotation);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/MaterialProgressDrawable.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/MaterialProgressDrawable.java
old mode 100755
new mode 100644
index 5b555f7..476e6c1
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/MaterialProgressDrawable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/circlebar/MaterialProgressDrawable.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.circlebar;
 
@@ -980,4 +794,4 @@
       mCallback.invalidateDrawable(null);
     }
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXRefreshView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXRefreshView.java
old mode 100755
new mode 100644
index bdccf3e..83a78f2
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXRefreshView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXRefreshView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.core;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
index 19ddcbe..1312250 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/core/WXSwipeLayout.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.core;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BaseBounceView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BaseBounceView.java
index e517ab1..c8c25dc 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BaseBounceView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BaseBounceView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.wrapper;
 
@@ -213,6 +27,7 @@
 import android.widget.FrameLayout;
 
 import com.taobao.weex.common.Constants;
+import com.taobao.weex.dom.ImmutableDomObject;
 import com.taobao.weex.ui.component.WXComponent;
 import com.taobao.weex.ui.view.WXLoadingLayout;
 import com.taobao.weex.ui.view.WXRefreshLayout;
@@ -229,23 +44,22 @@
 
     private int mOrientation = OrientationHelper.VERTICAL;
     protected WXSwipeLayout swipeLayout;
-    private T innerView;
+    private T mInnerView;
 
     public BaseBounceView(Context context,int orientation) {
         this(context, null,orientation);
     }
 
-    public BaseBounceView(Context context, AttributeSet attrs,int orientataion) {
+    public BaseBounceView(Context context, AttributeSet attrs,int orientation) {
         super(context, attrs);
-        mOrientation = orientataion;
-        init(context);
+        mOrientation = orientation;
     }
 
     public int getOrientation(){
         return mOrientation;
     }
 
-    private void init(Context context) {
+    public void init(Context context) {
         createBounceView(context);
     }
 
@@ -274,15 +88,15 @@
     }
 
     /**
-     * Init Swipelayout
+     * Init wipelayout
      */
     private WXSwipeLayout createBounceView(Context context) {
         swipeLayout = new WXSwipeLayout(context);
         swipeLayout.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
-        innerView = setInnerView(context);
-        if (innerView == null)
+        mInnerView = setInnerView(context);
+        if (mInnerView == null)
             return null;
-        swipeLayout.addView(innerView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
+        swipeLayout.addView(mInnerView, new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
         addView(swipeLayout, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
         return swipeLayout;
     }
@@ -291,7 +105,7 @@
      * @return the child of swipelayout : recyclerview or scrollview
      */
     public T getInnerView() {
-        return innerView;
+        return mInnerView;
     }
 
     public abstract T setInnerView(Context context);
@@ -303,21 +117,24 @@
     public void setHeaderView(WXComponent refresh) {
         setRefreshEnable(true);
         if (swipeLayout != null) {
-            if (swipeLayout.getHeaderView() != null) {
-                swipeLayout.setRefreshHeight((int) refresh.getDomObject().getLayoutHeight());
-
-                String colorStr = (String) refresh.getDomObject().getStyles().get(Constants.Name.BACKGROUND_COLOR);
-                String bgColor = WXUtils.getString(colorStr, null);
-
-                if (bgColor != null) {
-                    if (!TextUtils.isEmpty(bgColor)) {
-                        int colorInt = WXResourceUtils.getColor(bgColor);
-                        if (!(colorInt == Color.TRANSPARENT)) {
-                            swipeLayout.setRefreshBgColor(colorInt);
+            WXRefreshView refreshView = swipeLayout.getHeaderView();
+            if (refreshView != null) {
+                ImmutableDomObject immutableDomObject = refresh.getDomObject();
+                if (immutableDomObject != null) {
+                    int refreshHeight = (int) immutableDomObject.getLayoutHeight();
+                    swipeLayout.setRefreshHeight(refreshHeight);
+                    String colorStr = (String) immutableDomObject.getStyles().get(Constants.Name.BACKGROUND_COLOR);
+                    String bgColor = WXUtils.getString(colorStr, null);
+                    if (bgColor != null) {
+                        if (!TextUtils.isEmpty(bgColor)) {
+                            int colorInt = WXResourceUtils.getColor(bgColor);
+                            if (!(colorInt == Color.TRANSPARENT)) {
+                                swipeLayout.setRefreshBgColor(colorInt);
+                            }
                         }
                     }
+                    refreshView.setRefreshView(refresh.getHostView());
                 }
-                swipeLayout.getHeaderView().setRefreshView(refresh.getHostView());
             }
         }
     }
@@ -329,21 +146,24 @@
     public void setFooterView(WXComponent loading) {
         setLoadmoreEnable(true);
         if (swipeLayout != null) {
-            if (swipeLayout.getFooterView() != null) {
-                swipeLayout.setLoadingHeight((int) loading.getDomObject().getLayoutHeight());
-
-                String colorStr = (String) loading.getDomObject().getStyles().get(Constants.Name.BACKGROUND_COLOR);
-                String bgColor = WXUtils.getString(colorStr, null);
-
-                if (bgColor != null) {
-                    if (!TextUtils.isEmpty(bgColor)) {
-                        int colorInt = WXResourceUtils.getColor(bgColor);
-                        if (!(colorInt == Color.TRANSPARENT)) {
-                            swipeLayout.setLoadingBgColor(colorInt);
+            WXRefreshView refreshView = swipeLayout.getFooterView();
+            if (refreshView != null) {
+                ImmutableDomObject immutableDomObject = loading.getDomObject();
+                if (immutableDomObject != null) {
+                    int loadingHeight = (int) immutableDomObject.getLayoutHeight();
+                    swipeLayout.setLoadingHeight(loadingHeight);
+                    String colorStr = (String) immutableDomObject.getStyles().get(Constants.Name.BACKGROUND_COLOR);
+                    String bgColor = WXUtils.getString(colorStr, null);
+                    if (bgColor != null) {
+                        if (!TextUtils.isEmpty(bgColor)) {
+                            int colorInt = WXResourceUtils.getColor(bgColor);
+                            if (!(colorInt == Color.TRANSPARENT)) {
+                                swipeLayout.setLoadingBgColor(colorInt);
+                            }
                         }
                     }
+                    refreshView.setRefreshView(loading.getHostView());
                 }
-                swipeLayout.getFooterView().setRefreshView(loading.getHostView());
             }
         }
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
index 2d81b37..932630f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceRecyclerView.java
@@ -1,246 +1,64 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.wrapper;
 
 import android.content.Context;
 import android.support.annotation.Nullable;
-import android.support.v7.widget.OrientationHelper;
-import android.util.AttributeSet;
 import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
 
 import com.taobao.weex.common.WXThread;
-import com.taobao.weex.ui.component.WXComponent;
 import com.taobao.weex.ui.component.list.ListComponentView;
+import com.taobao.weex.ui.component.list.StickyHeaderHelper;
 import com.taobao.weex.ui.component.list.WXCell;
 import com.taobao.weex.ui.view.gesture.WXGesture;
 import com.taobao.weex.ui.view.gesture.WXGestureObservable;
 import com.taobao.weex.ui.view.listview.WXRecyclerView;
 import com.taobao.weex.ui.view.listview.adapter.RecyclerViewBaseAdapter;
 
-import java.util.Stack;
-
 public class BounceRecyclerView extends BaseBounceView<WXRecyclerView> implements ListComponentView,WXGestureObservable {
 
+  public static final int DEFAULT_COLUMN_COUNT = 1;
+  public static final int DEFAULT_COLUMN_GAP = 1;
   private RecyclerViewBaseAdapter adapter = null;
-  private Stack<View> headerViewStack = new Stack<>();
-  private Stack<WXCell> headComponentStack = new Stack<>();
   private WXGesture mGesture;
+  private int mLayoutType = WXRecyclerView.TYPE_LINEAR_LAYOUT;
+  private int mColumnCount = DEFAULT_COLUMN_COUNT;
+  private float mColumnGap = DEFAULT_COLUMN_GAP;
+  private StickyHeaderHelper mStickyHeaderHelper;
+
 
   @Override
   public boolean postDelayed(Runnable action, long delayMillis) {
     return super.postDelayed(WXThread.secure(action), delayMillis);
   }
 
-  public BounceRecyclerView(Context context, int orientation) {
+  public BounceRecyclerView(Context context,int type,int columnCount,float columnGap,int orientation) {
     super(context, orientation);
+    mLayoutType = type;
+    mColumnCount = columnCount;
+    mColumnGap = columnGap;
+    init(context);
+    mStickyHeaderHelper = new StickyHeaderHelper(this);
   }
 
-  public BounceRecyclerView(Context context, AttributeSet attrs) {
-    super(context, attrs, OrientationHelper.VERTICAL);
+  public BounceRecyclerView(Context context,int type,int orientation) {
+    this(context,type, DEFAULT_COLUMN_COUNT, DEFAULT_COLUMN_GAP,orientation);
   }
 
   public void setRecyclerViewBaseAdapter(RecyclerViewBaseAdapter adapter) {
@@ -262,11 +80,11 @@
     }
     return result;
   }
-    
+
   @Override
   public WXRecyclerView setInnerView(Context context) {
     WXRecyclerView wxRecyclerView = new WXRecyclerView(context);
-    wxRecyclerView.initView(context, WXRecyclerView.TYPE_LINEAR_LAYOUT, getOrientation());
+    wxRecyclerView.initView(context, mLayoutType,mColumnCount,mColumnGap,getOrientation());
     return wxRecyclerView;
   }
 
@@ -288,96 +106,24 @@
    * @param component
    */
   public void notifyStickyShow(WXCell component) {
-    if (component == null)
-      return;
-    if (!headComponentStack.isEmpty()) {
-      WXCell oldCom = headComponentStack.pop();
-      if (!oldCom.getRef().equals(component.getRef())) {
-        headComponentStack.push(oldCom);
-        headComponentStack.push(component);
-        showSticky();
-      } else {
-        headComponentStack.push(oldCom);
-        return;
-      }
-    } else {
-      headComponentStack.push(component);
-      showSticky();
-    }
+    mStickyHeaderHelper.notifyStickyShow(component);
+  }
+
+  @Override
+  public void updateStickyView(int currentStickyPos) {
+    mStickyHeaderHelper.updateStickyView(currentStickyPos);
   }
 
   /**
-   * @param component
+   *
+   * @param compToRemove
    */
-  public void notifyStickyRemove(WXCell component) {
-    if (component == null)
-      return;
-    if (!headComponentStack.isEmpty() && !headerViewStack.isEmpty()) {
-      removeSticky(component);
-    }
+  @Override
+  public void notifyStickyRemove(WXCell compToRemove) {
+    mStickyHeaderHelper.notifyStickyRemove(compToRemove);
   }
 
-  /**
-   * Pop stickyView to stack
-   */
-  private void showSticky() {
-    WXCell headComponent = headComponentStack.pop();
-    headComponentStack.push(headComponent);
-    final View headerView = headComponent.getRealView();
-    if (headerView == null)
-      return;
-    headerViewStack.push(headerView);
-    //record translation, it should not change after transformation
-    final float translationX = headerView.getTranslationX();
-    final float translationY = headerView.getTranslationY();
-    headComponent.removeSticky();
-    post(WXThread.secure(new Runnable() {
-      @Override
-      public void run() {
-        ViewGroup existedParent;
-        if((existedParent = (ViewGroup)headerView.getParent())!= null){
-          existedParent.removeView(headerView);
-        }
-        addView(headerView);
-        //recover translation, sometimes it will be changed on fling
-        headerView.setTranslationX(translationX);
-        headerView.setTranslationY(translationY);
-      }
-    }));
-  }
 
-  /**
-   * remove top stickyView
-   * @param component
-   */
-  private void removeSticky(WXComponent component) {
-    final WXCell headComponent = headComponentStack.pop();
-    if (!component.getRef().equals(headComponent.getRef())) {
-      headComponentStack.push(headComponent);
-      return;
-    }
-    final View headerView = headerViewStack.pop();
-    post(WXThread.secure(new Runnable() {
-      @Override
-      public void run() {
-        removeView(headerView);
-        headComponent.recoverySticky();
-      }
-    }));
-  }
-
-  /**
-   * Clear All Sticky of stack
-   */
-  public void clearSticky() {
-    int size = headComponentStack.size();
-    while (size > 0 && headerViewStack.size() == size) {
-      WXCell headComponent = headComponentStack.pop();
-      View headerView = headerViewStack.pop();
-      ((ViewGroup) getParent()).removeView(headerView);
-      headComponent.recoverySticky();
-    }
-  }
 
   @Override
   public void registerGestureListener(@Nullable WXGesture wxGesture) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceScrollerView.java b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceScrollerView.java
index cc30556..8c838b9 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceScrollerView.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/view/refresh/wrapper/BounceScrollerView.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.refresh.wrapper;
 
@@ -219,6 +33,7 @@
 
     public BounceScrollerView(Context context, int orientation, WXScroller waScroller) {
         super(context,orientation);
+        init(context);
         if (getInnerView() != null)
             getInnerView().setWAScroller(waScroller);
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/ATagUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/ATagUtil.java
index c6fa86a..cc179e3 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/ATagUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/ATagUtil.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.utils;
@@ -209,13 +23,17 @@
 import android.view.View;
 
 import com.alibaba.fastjson.JSONArray;
+import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
 import com.taobao.weex.adapter.URIAdapter;
 
 public class ATagUtil {
   public static void onClick(View widget, String instanceId, String url) {
-    String href = WXSDKManager.getInstance().getSDKInstance(instanceId).
-        rewriteUri(Uri.parse(url), URIAdapter.LINK).toString();
+    WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId);
+    if (instance == null) {
+      return;
+    }
+    String href = instance.rewriteUri(Uri.parse(url), URIAdapter.LINK).toString();
     JSONArray array = new JSONArray();
     array.add(href);
     WXSDKManager.getInstance().getWXBridgeManager().
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/FontDO.java b/android/sdk/src/main/java/com/taobao/weex/utils/FontDO.java
index f56bce3..7059a74 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/FontDO.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/FontDO.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -308,4 +122,4 @@
   public void setState(int state) {
     this.mState = state;
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/FunctionParser.java b/android/sdk/src/main/java/com/taobao/weex/utils/FunctionParser.java
old mode 100755
new mode 100644
index 3a6d56c..e138213
--- a/android/sdk/src/main/java/com/taobao/weex/utils/FunctionParser.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/FunctionParser.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java b/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
index 84e9b7c..142bf7a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/ImageDrawable.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.utils;
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/ImgURIUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/ImgURIUtil.java
index 3a56fa8..db8a538 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/ImgURIUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/ImgURIUtil.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.utils;
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/LogLevel.java b/android/sdk/src/main/java/com/taobao/weex/utils/LogLevel.java
index 6bb336d..95dfd8a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/LogLevel.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/LogLevel.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java b/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java
new file mode 100644
index 0000000..ef2f0c9
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/OsVersion.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.util;
+
+/**
+ * Android OS version utilities.
+ */
+public class OsVersion {
+  private static boolean sIsAtLeastJB_MR2;
+
+
+  static {
+    final int v = getApiVersion();
+    sIsAtLeastJB_MR2 = v >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR2;
+  }
+
+  /**
+   * @return True if the version of Android that we're running on is at
+   * least Jelly Bean MR2(API level 18).
+   */
+  public static boolean isAtLeastJB_MR2() {
+    return sIsAtLeastJB_MR2;
+  }
+
+  /**
+   * @return The Android API version of the running OS.
+   */
+  public static int getApiVersion() {
+    return android.os.Build.VERSION.SDK_INT;
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/SingleFunctionParser.java b/android/sdk/src/main/java/com/taobao/weex/utils/SingleFunctionParser.java
index bd5df63..e785fe5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/SingleFunctionParser.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/SingleFunctionParser.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.utils;
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
new file mode 100644
index 0000000..7506804
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/Trace.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.utils;
+
+import android.annotation.TargetApi;
+import android.os.Build;
+
+import com.taobao.weex.util.OsVersion;
+
+/**
+ * Hepler class for systrace.
+ *
+ * Note that this will run only on JBMR2 or later.
+ *
+ * Trace will be enabled in debug production and be disabled in release
+ * production, see build.gradle.
+ * If you want to enable it in release, just set sEnabled to true.
+ */
+public class Trace {
+  private static final String TAG = "Weex_Trace";
+  private abstract static class AbstractTrace {
+    abstract void beginSection(String sectionName);
+    abstract void endSection();
+  }
+
+  private static final AbstractTrace sTrace;
+  private static final boolean sEnabled;
+
+  // Pick the correct trace class to handle tracing.
+  static {
+    // If you want to enable it in release, just set sEnabled to true.
+    // If you turn sEnabled on, weex would trace logs on Java side
+    // as well as on V8 side, please take care of turning sEnabled on
+    // to avoid performance impact.
+    // FIXME: weex sdk may use another build files to build and cause
+    // compiling errors if these build files don't contain any
+    // ENABLE_TRACE, just comment out the line below.
+    //sEnabled = com.taobao.weappplus_sdk.BuildConfig.ENABLE_TRACE;
+    sEnabled = false;
+
+    if (sEnabled == true && OsVersion.isAtLeastJB_MR2()) {
+      sTrace = new TraceJBMR2();
+    } else {
+      sTrace = new TraceDummy();
+    }
+  }
+
+  public static final boolean getTraceEnabled() {
+    return sEnabled;
+  }
+
+  /**
+   * Writes a trace message to indicate that a given section of code has begun.
+   * This call must be followed by a corresponding call to {@link #endSection()}
+   * on the same thread.
+   *
+   * <p class="note"> If sectionName contains '|', '\n' and '\0', these characters
+   * will be repaced with a space character.
+   *
+   * @param sectionName The name of code section to appear in the trace.
+   */
+  public static void beginSection(String sectionName) {
+    android.util.Log.i(TAG, "beginSection() " + sectionName);
+    sTrace.beginSection(sectionName);
+  }
+
+  /**
+   * Writes a trace message to indicate that a given section of code has ended.
+   * This call must be preceeded by a corresponding call to {@link #beginSection()}
+   * on the same thread.
+   */
+  public static void endSection() {
+    sTrace.endSection();
+    android.util.Log.i(TAG, "endSection()");
+  }
+
+  @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
+  private static final class TraceJBMR2 extends AbstractTrace {
+    @Override
+    void beginSection(String sectionName) {
+      android.os.Trace.beginSection(sectionName);
+    }
+
+    @Override
+    void endSection() {
+      android.os.Trace.endSection();
+    }
+  }
+
+  private static final class TraceDummy extends AbstractTrace {
+    @Override
+    void beginSection(String sectionName) {
+    }
+
+    @Override
+    void endSection() {
+    }
+  }
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
index 96e5288..72f7924 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/TypefaceUtil.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXDataStructureUtil.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXDataStructureUtil.java
old mode 100755
new mode 100644
index b6ca858..d8e0bf0
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXDataStructureUtil.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXDataStructureUtil.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXDomUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXDomUtils.java
index fe1f2bc..afa8152 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXDomUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXDomUtils.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.utils;
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
old mode 100755
new mode 100644
index d4269fd..0083326
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXFileUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -208,6 +22,9 @@
 import android.text.TextUtils;
 
 import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -216,6 +33,29 @@
 public class WXFileUtils {
 
   /**
+   * Load file in device directory, if not exist, load from asset directory.
+   * @param path FilePath
+   * @param context Weex Context
+   * @return the Content of the file
+   */
+  public static String loadFileOrAsset(String path, Context context) {
+    if (!TextUtils.isEmpty(path)) {
+      File file = new File(path);
+      if (file.exists()) {
+        try {
+          FileInputStream fis = new FileInputStream(file);
+          return readStreamToString(fis);
+        } catch (FileNotFoundException e) {
+          e.printStackTrace();
+        }
+      } else {
+        return loadAsset(path, context);
+      }
+    }
+    return "";
+  }
+
+  /**
    * Load file in asset directory.
    * @param path FilePath
    * @param context Weex Context
@@ -226,9 +66,18 @@
       return null;
     }
     InputStream inputStream = null;
-    BufferedReader bufferedReader = null;
     try {
       inputStream = context.getAssets().open(path);
+      return readStreamToString(inputStream);
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+    return "";
+  }
+
+  private static String readStreamToString(InputStream inputStream) {
+    BufferedReader bufferedReader = null;
+    try {
       StringBuilder builder = new StringBuilder(inputStream.available() + 10);
       bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
       char[] data = new char[4096];
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXInterception.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXInterception.java
old mode 100755
new mode 100644
index 4a703c7..c667c94
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXInterception.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXInterception.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXJsonUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXJsonUtils.java
old mode 100755
new mode 100644
index a56bead..cb8e2a7
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXJsonUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXJsonUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
old mode 100755
new mode 100644
index 025fd67..1107003
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
old mode 100755
new mode 100644
index ab8923d..930c383
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXReflectionUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
old mode 100755
new mode 100644
index cafdb53..4690fb2
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXResourceUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -208,6 +22,7 @@
 import android.graphics.LinearGradient;
 import android.graphics.Shader;
 import android.support.annotation.NonNull;
+import android.support.v4.util.Pair;
 import android.text.TextUtils;
 
 import java.util.ArrayList;
@@ -424,18 +239,18 @@
     color = color.trim(); //remove non visible codes
 
     int resultColor = defaultColor;
-    try {
-      ColorConvertHandler[] handlers = ColorConvertHandler.values();
-      for (ColorConvertHandler handler : handlers) {
-        try {
-          resultColor = handler.handle(color);
+    Pair<Boolean, Integer> result;
+    ColorConvertHandler[] handlers = ColorConvertHandler.values();
+    for (ColorConvertHandler handler : handlers) {
+      try {
+        result = handler.handle(color);
+        if (result.first) {
+          resultColor = result.second;
           break;
-        } catch (IllegalArgumentException e) {
-          WXLogUtils.v("Color", "Color convert fails");
         }
+      } catch (RuntimeException e) {
+        WXLogUtils.v("Color_Parser", WXLogUtils.getStackTrace(e));
       }
-    } catch (Exception e) {
-      WXLogUtils.e("WXResourceUtils getColor failed: " + color);
     }
     return resultColor;
   }
@@ -548,70 +363,58 @@
   enum ColorConvertHandler {
     NAMED_COLOR_HANDLER {
       @Override
-      int handle(String rawColor) {
-        try {
-          return colorMap.get(rawColor);
-        } catch (RuntimeException e) {
-          throw new IllegalArgumentException(e);
+      @NonNull Pair<Boolean, Integer> handle(String rawColor) {
+        if (colorMap.containsKey(rawColor)) {
+          return new Pair<>(Boolean.TRUE, colorMap.get(rawColor));
+        } else {
+          return new Pair<>(Boolean.FALSE, Color.TRANSPARENT);
         }
       }
     },
     RGB_HANDLER {
       @Override
-      int handle(String rawColor) {
-        try {
-          if (rawColor.length() == 4) {
-            //#eee, #333
-            int r, g, b;
-            r = Integer.parseInt(rawColor.substring(1, 2), HEX);
-            g = Integer.parseInt(rawColor.substring(2, 3), HEX);
-            b = Integer.parseInt(rawColor.substring(3, 4), HEX);
-            return Color.rgb(r + (r << 4), g + (g << 4), b + (b << 4));
-          } else if (rawColor.length() == 7 || rawColor.length() == 9) {
-            //#eeeeee, #333333
-            return Color.parseColor(rawColor);
-          } else {
-            throw new IllegalArgumentException("ColorConvertHandler invalid color: " + rawColor);
-          }
-        } catch (RuntimeException e) {
-          throw new IllegalArgumentException(e);
+      @NonNull Pair<Boolean, Integer> handle(String rawColor) {
+        if (rawColor.length() == 4) {
+          //#eee, #333
+          int r, g, b;
+          r = Integer.parseInt(rawColor.substring(1, 2), HEX);
+          g = Integer.parseInt(rawColor.substring(2, 3), HEX);
+          b = Integer.parseInt(rawColor.substring(3, 4), HEX);
+          return new Pair<>(Boolean.TRUE, Color.rgb(r + (r << 4), g + (g << 4), b + (b << 4)));
+        } else if (rawColor.length() == 7 || rawColor.length() == 9) {
+          //#eeeeee, #333333
+          return new Pair<>(Boolean.TRUE, Color.parseColor(rawColor));
+        } else {
+          return new Pair<>(Boolean.FALSE, Color.TRANSPARENT);
         }
       }
     },
     FUNCTIONAL_RGB_HANDLER {
       @Override
-      int handle(String rawColor) {
-        try {
-          SingleFunctionParser<Integer> functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGB_MAPPER);
-          List<Integer> rgb = functionParser.parse(RGB);
-          if (rgb.size() == RGB_SIZE) {
-            return Color.rgb(rgb.get(0), rgb.get(1), rgb.get(2));
-          } else {
-            throw new IllegalArgumentException("Conversion of functional RGB fails");
-          }
-        } catch (RuntimeException e) {
-          throw new IllegalArgumentException(e);
+      @NonNull Pair<Boolean, Integer> handle(String rawColor) {
+        SingleFunctionParser<Integer> functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGB_MAPPER);
+        List<Integer> rgb = functionParser.parse(RGB);
+        if (rgb.size() == RGB_SIZE) {
+          return new Pair<>(Boolean.TRUE, Color.rgb(rgb.get(0), rgb.get(1), rgb.get(2)));
+        } else {
+          return new Pair<>(Boolean.FALSE, Color.TRANSPARENT);
         }
       }
     },
 
     FUNCTIONAL_RGBA_HANDLER {
       @Override
-      int handle(String rawColor) {
-        try {
-          SingleFunctionParser<Number> functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGBA_MAPPER);
-          List<Number> rgba = functionParser.parse(RGBA);
-          if (rgba.size() == RGBA_SIZE) {
-            return Color.argb(
-                parseAlpha(rgba.get(3).floatValue()),
-                rgba.get(0).intValue(),
-                rgba.get(1).intValue(),
-                rgba.get(2).intValue());
-          } else {
-            throw new IllegalArgumentException("Conversion of functional RGBA fails");
-          }
-        } catch (RuntimeException e) {
-          throw new IllegalArgumentException(e);
+      @NonNull Pair<Boolean, Integer> handle(String rawColor) {
+        SingleFunctionParser<Number> functionParser = new SingleFunctionParser<>(rawColor, FUNCTIONAL_RGBA_MAPPER);
+        List<Number> rgba = functionParser.parse(RGBA);
+        if (rgba.size() == RGBA_SIZE) {
+          return new Pair<>(Boolean.TRUE, Color.argb(
+              parseAlpha(rgba.get(3).floatValue()),
+              rgba.get(0).intValue(),
+              rgba.get(1).intValue(),
+              rgba.get(2).intValue()));
+        } else {
+          return new Pair<>(Boolean.FALSE, Color.TRANSPARENT);
         }
       }
     };
@@ -622,7 +425,7 @@
      * @param rawColor color, maybe functional RGB(RGBA), #RGB, keywords color or transparent
      * @return #RRGGBB or #AARRGGBB
      */
-    abstract int handle(String rawColor) throws IllegalArgumentException;
+    @NonNull abstract Pair<Boolean, Integer> handle(String rawColor);
 
     /**
      * Parse alpha gradient of color from range 0-1 to range 0-255
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
old mode 100755
new mode 100644
index b64dd35..75b4840
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXSoInstallMgrSdk.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -208,7 +22,10 @@
 import android.content.pm.ApplicationInfo;
 import android.os.Build;
 
+import com.taobao.weex.IWXStatisticsListener;
+import com.taobao.weappplus_sdk.BuildConfig;
 import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.adapter.IWXSoLoaderAdapter;
 import com.taobao.weex.adapter.IWXUserTrackAdapter;
 import com.taobao.weex.common.WXErrorCode;
 import com.taobao.weex.common.WXPerformance;
@@ -250,13 +67,20 @@
   private final static String ARMEABI = "armeabi"; //default
   private final static String X86 = "x86";
   private final static String MIPS = "mips";
-  private final static int ARMEABI_Size = 3542844;
-  private final static int X86_Size = 4451068;
+
+  private final static int ARMEABI_Size = 3583820;
+  private final static int X86_Size = 4340864;
 
   static Context mContext = null;
+  private static IWXSoLoaderAdapter mSoLoader = null;
+  private static IWXStatisticsListener mStatisticsListener = null;
 
-  public static void init(Context c) {
+  public static void init(Context c,
+                          IWXSoLoaderAdapter loader,
+                          IWXStatisticsListener listener) {
     mContext = c;
+    mSoLoader = loader;
+    mStatisticsListener = listener;
   }
 
   public static boolean isX86(){
@@ -271,8 +95,11 @@
 
   /**
    * Load so library.
-   * First, it will try use {@link System#loadLibrary(String)} to load library.
-   * If it fails, then it will try to extract the so library and load it from arembi in the .apk
+   *
+   * If a library loader adapter exists, use this adapter to load library,
+   * otherwise use {@link System#loadLibrary(String)} to load library.
+   * If failed to load library, try to extract the so library and load it
+   * from arembi in the .apk
    *
    * @param libName library name, like webp, not necessary to be libwep.so
    * @param version the version of the so library
@@ -284,12 +111,19 @@
     }
 
     boolean InitSuc = false;
+    if (checkSoIsValid(libName, BuildConfig.ARMEABI_Size) ||checkSoIsValid(libName, BuildConfig.X86_Size)) {
 
       /**
        * Load library with {@link System#loadLibrary(String)}
        */
       try {
-        System.loadLibrary(libName);
+        // If a library loader adapter exists, use this adapter to load library
+        // instead of System.loadLibrary.
+        if (mSoLoader != null) {
+          mSoLoader.doLoadLibrary(libName);
+        } else {
+          System.loadLibrary(libName);
+        }
         commit(utAdapter, null, null);
 
         InitSuc = true;
@@ -331,6 +165,7 @@
         InitSuc = false;
         e.printStackTrace();
       }
+    }
     return InitSuc;
   }
 
@@ -359,7 +194,7 @@
    * @param size  the right size of lib
    * @return true for valid  ; false for InValid
    */
-  static boolean checkSoIsValid(String libName, int size) {
+  static boolean checkSoIsValid(String libName, long size) {
     Context context = mContext;
     if (null == context) {
       return false;
@@ -437,24 +272,35 @@
   /**
    * Load .so library
    */
-  static boolean _loadUnzipSo(String libName, int version, IWXUserTrackAdapter utAdapter) {
+  static boolean _loadUnzipSo(String libName,
+                              int version,
+                              IWXUserTrackAdapter utAdapter) {
     boolean initSuc = false;
     try {
       if (isExist(libName, version)) {
-        System.load(_targetSoFile(libName, version));
+        // If a library loader adapter exists, use this adapter to load library
+        // instead of System.load.
+        if (mSoLoader != null) {
+          mSoLoader.doLoad(_targetSoFile(libName, version));
+        } else {
+          System.load(_targetSoFile(libName, version));
+        }
         commit(utAdapter, "2000", "Load file extract from apk successfully.");
       }
       initSuc = true;
     } catch (Throwable e) {
-      commit(utAdapter, WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorCode(), WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorMsg() + ":" + e.getMessage());
+      commit(utAdapter,
+             WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorCode(),
+             WXErrorCode.WX_ERR_COPY_FROM_APK.getErrorMsg() + ":" + e.getMessage());
       initSuc = false;
       WXLogUtils.e("", e);
     }
     return initSuc;
   }
 
-  static boolean unZipSelectedFiles(String libName, int version, IWXUserTrackAdapter utAdapter) throws ZipException, IOException {
-
+  static boolean unZipSelectedFiles(String libName,
+      int version,
+      IWXUserTrackAdapter utAdapter) throws ZipException, IOException {
     String sourcePath = "lib/armeabi/lib" + libName + ".so";
 
     String zipPath = "";
@@ -552,6 +398,10 @@
   }
 
   static void commit(IWXUserTrackAdapter utAdapter, String errCode, String errMsg) {
+    if (mStatisticsListener != null) {
+      mStatisticsListener.onException("0", errCode, errMsg);
+    }
+
     if (utAdapter == null) {
       return;
     }
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
old mode 100755
new mode 100644
index b2842eb..84e3435
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -231,6 +45,42 @@
     return Float.isNaN(value);
   }
 
+
+  public static float getFloatByViewport(Object value, int viewport) {
+    if (value == null) {
+      return Float.NaN;
+    }
+
+    String temp = value.toString().trim();
+    if (temp.endsWith("wx")) {
+      try {
+        return transferWx(temp, viewport);
+      } catch (NumberFormatException e) {
+        WXLogUtils.e("Argument format error! value is " + value, e);
+      } catch (Exception e) {
+        WXLogUtils.e("Argument error! value is " + value, e);
+      }
+    }else if (temp.endsWith("px")) {
+      try {
+        temp = temp.substring(0, temp.indexOf("px"));
+        return Float.parseFloat(temp);
+      } catch (NumberFormatException nfe) {
+        WXLogUtils.e("Argument format error! value is " + value, nfe);
+      } catch (Exception e) {
+        WXLogUtils.e("Argument error! value is " + value, e);
+      }
+    }else {
+      try {
+        return Float.parseFloat(temp);
+      } catch (NumberFormatException nfe) {
+        WXLogUtils.e("Argument format error! value is " + value, nfe);
+      } catch (Exception e) {
+        WXLogUtils.e("Argument error! value is " + value, e);
+      }
+    }
+    return Float.NaN;
+  }
+
   public static float getFloat(Object value) {
     return getFloat(value, Float.NaN);
   }
@@ -241,9 +91,12 @@
     }
 
     String temp = value.toString().trim();
+    if(TextUtils.isEmpty(temp)){
+      return df;
+    }
     if (temp.endsWith("wx")) {
       try {
-        return transferWx(temp);
+        return transferWx(temp, 750);
       } catch (NumberFormatException e) {
         WXLogUtils.e("Argument format error! value is " + value, e);
       } catch (Exception e) {
@@ -270,7 +123,7 @@
     return df;
   }
 
-  private static float transferWx(String stringWithWXPostfix) {
+  private static float transferWx(String stringWithWXPostfix, int viewport) {
     if(null == stringWithWXPostfix) {
       return 0;
     }
@@ -280,7 +133,7 @@
     }
     Float f = Float.parseFloat(temp);
     float density = Float.parseFloat(WXEnvironment.getConfig().get(WXConfig.scale));
-    return density * f * WXSDKInstance.getViewPortWidth() / WXViewUtils.getScreenWidth();
+    return density * f * viewport / WXViewUtils.getScreenWidth();
   }
 
   public static float fastGetFloat(String raw, int precision){
@@ -354,8 +207,11 @@
       String temp = value.toString().trim();
 
       if (temp.endsWith("wx")) {
+        if (WXEnvironment.isApkDebugable()) {
+          WXLogUtils.w("the value of " + value + " use wx unit, which will be not supported soon after.");
+        }
         try {
-          return (int) transferWx(temp);
+          return (int) transferWx(temp, 750);
         } catch (NumberFormatException e) {
           WXLogUtils.e("Argument format error! value is " + value, e);
         } catch (Exception e) {
@@ -397,8 +253,11 @@
     long result = 0;
     String temp = value.toString().trim();
     if (temp.endsWith("wx")) {
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.w("the value of " + value + " use wx unit, which will be not supported soon after.");
+      }
       try {
-        return (long)transferWx(temp);
+        return (long)transferWx(temp, 750);
       } catch (NumberFormatException e) {
         WXLogUtils.e("Argument format error! value is " + value, e);
       } catch (Exception e) {
@@ -438,8 +297,11 @@
     double result = 0;
     String temp = value.toString().trim();
     if (temp.endsWith("wx")) {
+      if (WXEnvironment.isApkDebugable()) {
+        WXLogUtils.w("the value of " + value + " use wx unit, which will be not supported soon after.");
+      }
       try {
-        return transferWx(temp);
+        return transferWx(temp, 750);
       } catch (NumberFormatException e) {
         WXLogUtils.e("Argument format error! value is " + value, e);
       } catch (Exception e) {
@@ -527,4 +389,86 @@
     return (int)(Float.parseFloat(raw) / HUNDRED * unit);
   }
 
-}
\ No newline at end of file
+  /**
+   * Get a banner data in JSON format from a bundle content.
+   * A bundle banner looks like below:
+   * \/*!count
+   *  * {
+   *  *   version: "0.2.1.20170104-release",
+   *  *   create: "20170207171112",
+   *  *   git: "banner--772c915",
+   *  *   digest: "c709b7f91867e371b24f54d6aeea232a"
+   *  * }
+   *  !*\/
+   *
+   * @param content a bundle content
+   * @return
+   */
+  public static String getBundleBanner(String content) {
+    final String commentBegin = "/*!";
+    final String commentEnd = "!*/";
+    final String asteriskRegex = "\\*";
+    final String replacement = "";
+
+    int offsetCountBegin = content.indexOf(commentBegin);
+    if (offsetCountBegin == -1) {
+        return null;
+    }
+    offsetCountBegin += commentBegin.length();
+    int offsetCountEnd = indexLineBreak(content, offsetCountBegin);
+    if (offsetCountEnd == -1) {
+        return null;
+    }
+    String countStr = content.substring(offsetCountBegin, offsetCountEnd);
+    int count = Integer.parseInt(countStr);
+
+    String commentBody = content.substring(offsetCountEnd + 1, offsetCountEnd + 1 + count);
+    int offsetBodyEnd = commentBody.lastIndexOf(commentEnd);
+    if (offsetBodyEnd == -1) {
+        return null;
+    }
+    commentBody = commentBody.substring(0, offsetBodyEnd);
+
+    StringBuilder commentBodyBuilder = new StringBuilder();
+    String[] items = splitLineBreak(commentBody);
+
+    for (String item : items) {
+        commentBodyBuilder.append(item.replaceFirst(asteriskRegex, replacement));
+    }
+
+    return commentBodyBuilder.toString();
+}
+
+private static int indexLineBreak(String str, int fromIndex) {
+    final String lineBreakIos = "\r";
+    final String lineBreakUnix = "\n";
+    final String linebreakWin = "\r\n";
+
+    int index = str.indexOf(lineBreakIos, fromIndex);
+    if (index == -1) {
+        index = str.indexOf(lineBreakUnix, fromIndex);
+    }
+    if (index == -1) {
+        index = str.indexOf(linebreakWin, fromIndex);
+    }
+
+    return index;
+}
+
+private static String[] splitLineBreak(String str) {
+    final String lineBreakIos = "\r";
+    final String lineBreakUnix = "\n";
+    final String linebreakWin = "\r\n";
+    String[] items = str.split(lineBreakIos);
+
+    if (items.length == 1) {
+        items = str.split(lineBreakUnix);
+    }
+    if (items.length == 1) {
+        items = str.split(linebreakWin);
+    }
+
+    return items;
+}
+
+}
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
old mode 100755
new mode 100644
index 3dd5bcc..3e52334
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -216,11 +30,13 @@
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.ViewGroup.LayoutParams;
 
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.Constants;
 import com.taobao.weex.common.WXRuntimeException;
 import com.taobao.weex.ui.view.border.BorderDrawable;
 
@@ -306,11 +122,22 @@
     return getScreenWidth(WXEnvironment.sApplication);
   }
 
+  public static float getScreenDensity(Context ctx){
+    if(ctx != null){
+      try{
+        Resources res = ctx.getResources();
+        return res.getDisplayMetrics().density;
+      }catch (Exception e){
+        WXLogUtils.e("getScreenDensityDpi exception:"+e.getMessage());
+      }
+    }
+    return Constants.Value.DENSITY;
+  }
+
   public static int getScreenWidth(Context ctx) {
     if(ctx!=null){
       Resources res = ctx.getResources();
       mScreenWidth = res.getDisplayMetrics().widthPixels;
-
       if(WXEnvironment.SETTING_FORCE_VERTICAL_SCREEN){
         mScreenHeight = res
                 .getDisplayMetrics()
@@ -535,22 +362,66 @@
 
   public static void clipCanvasWithinBorderBox(View targetView, Canvas canvas) {
     Drawable drawable;
-    /* According to https://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported
-      API 18 or higher supports clipPath to canvas based on hardware acceleration.
-     */
-    /**
-     * According to https://code.google.com/p/android/issues/detail?id=225556&sort=-id&colspec=ID
-     * clipPath doesn't work with rotation nor scale when API level is 24 or higher.
-     */
-    if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 || !canvas.isHardwareAccelerated()) &&
-        Build.VERSION.SDK_INT <= Build.VERSION_CODES.M &&
+    if (clipCanvasDueToAndroidVersion(canvas) &&
+        clipCanvasIfAnimationExist() &&
         ((drawable = targetView.getBackground()) instanceof BorderDrawable)) {
       BorderDrawable borderDrawable = (BorderDrawable) drawable;
-      if(borderDrawable.isRounded()) {
-        Path path = borderDrawable.getContentPath(
-            new RectF(0, 0, targetView.getWidth(), targetView.getHeight()));
-        canvas.clipPath(path);
+      if (borderDrawable.isRounded()) {
+        if (clipCanvasIfBackgroundImageExist(targetView, borderDrawable)) {
+          Path path = borderDrawable.getContentPath(
+              new RectF(0, 0, targetView.getWidth(), targetView.getHeight()));
+          canvas.clipPath(path);
+        }
       }
     }
   }
+
+  /**
+   * According to https://developer.android.com/guide/topics/graphics/hardware-accel.html#unsupported
+   API 18 or higher supports clipPath to canvas based on hardware acceleration.
+   * @param canvas
+   * @return
+   */
+  private static boolean clipCanvasDueToAndroidVersion(Canvas canvas) {
+    return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2 ||
+           !canvas.isHardwareAccelerated();
+  }
+
+  /**
+   * According to https://code.google.com/p/android/issues/detail?id=225556&sort=-id&colspec=ID
+   * clipPath doesn't work with rotation nor scale when API level is 24.
+   * As animation will not cause redraw if hardware-acceleration enabled, clipCanvas feature has
+   * to be disabled when API level is 24 without considering the animation property.
+   * As the compile version of weex_sdk is 23, so API level 24 has to be hard-code.
+   */
+  private static boolean clipCanvasIfAnimationExist() {
+    return Build.VERSION.SDK_INT != 24;
+  }
+
+  /**
+   * Due limitation in Android platform, the linear gradient in the following page will not be
+   * rounded if {@link Canvas#clipPath(Path)} of the parent view invoked when API level is lower
+   * than 21.
+   * http://dotwe.org/weex/963c9ade129f86757cecdd85651cd30e
+   * @param targetView
+   * @param borderDrawable
+   * @return
+   */
+  private static boolean clipCanvasIfBackgroundImageExist(@NonNull View targetView,
+                                                          @NonNull BorderDrawable borderDrawable) {
+    if (targetView instanceof ViewGroup) {
+      View child;
+      ViewGroup parent = ((ViewGroup) targetView);
+      int count = parent.getChildCount();
+      for (int i = 0; i < count; i++) {
+        child = parent.getChildAt(i);
+        if (child.getBackground() instanceof BorderDrawable &&
+            ((BorderDrawable) child.getBackground()).hasImage() &&
+            Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
 }
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/batch/BactchExecutor.java b/android/sdk/src/main/java/com/taobao/weex/utils/batch/BactchExecutor.java
index 706c5ec..60ac7f4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/batch/BactchExecutor.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/batch/BactchExecutor.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils.batch;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/batch/BatchOperationHelper.java b/android/sdk/src/main/java/com/taobao/weex/utils/batch/BatchOperationHelper.java
index 876399b..f74152f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/batch/BatchOperationHelper.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/batch/BatchOperationHelper.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils.batch;
 
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/batch/Interceptor.java b/android/sdk/src/main/java/com/taobao/weex/utils/batch/Interceptor.java
index ad3baf0..80194ec 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/batch/Interceptor.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/batch/Interceptor.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils.batch;
 
diff --git a/android/sdk/src/main/res/values/strings.xml b/android/sdk/src/main/res/values/strings.xml
index e077468..850d2b2 100755
--- a/android/sdk/src/main/res/values/strings.xml
+++ b/android/sdk/src/main/res/values/strings.xml
@@ -1,208 +1,20 @@
-<!--
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
 
+  http://www.apache.org/licenses/LICENSE-2.0
 
-                                     Apache License
-                               Version 2.0, January 2004
-                            http://www.apache.org/licenses/
-
-       TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-       1. Definitions.
-
-          "License" shall mean the terms and conditions for use, reproduction,
-          and distribution as defined by Sections 1 through 9 of this document.
-
-          "Licensor" shall mean the copyright owner or entity authorized by
-          the copyright owner that is granting the License.
-
-          "Legal Entity" shall mean the union of the acting entity and all
-          other entities that control, are controlled by, or are under common
-          control with that entity. For the purposes of this definition,
-          "control" means (i) the power, direct or indirect, to cause the
-          direction or management of such entity, whether by contract or
-          otherwise, or (ii) ownership of fifty percent (50%) or more of the
-          outstanding shares, or (iii) beneficial ownership of such entity.
-
-          "You" (or "Your") shall mean an individual or Legal Entity
-          exercising permissions granted by this License.
-
-          "Source" form shall mean the preferred form for making modifications,
-          including but not limited to software source code, documentation
-          source, and configuration files.
-
-          "Object" form shall mean any form resulting from mechanical
-          transformation or translation of a Source form, including but
-          not limited to compiled object code, generated documentation,
-          and conversions to other media types.
-
-          "Work" shall mean the work of authorship, whether in Source or
-          Object form, made available under the License, as indicated by a
-          copyright notice that is included in or attached to the work
-          (an example is provided in the Appendix below).
-
-          "Derivative Works" shall mean any work, whether in Source or Object
-          form, that is based on (or derived from) the Work and for which the
-          editorial revisions, annotations, elaborations, or other modifications
-          represent, as a whole, an original work of authorship. For the purposes
-          of this License, Derivative Works shall not include works that remain
-          separable from, or merely link (or bind by name) to the interfaces of,
-          the Work and Derivative Works thereof.
-
-          "Contribution" shall mean any work of authorship, including
-          the original version of the Work and any modifications or additions
-          to that Work or Derivative Works thereof, that is intentionally
-          submitted to Licensor for inclusion in the Work by the copyright owner
-          or by an individual or Legal Entity authorized to submit on behalf of
-          the copyright owner. For the purposes of this definition, "submitted"
-          means any form of electronic, verbal, or written communication sent
-          to the Licensor or its representatives, including but not limited to
-          communication on electronic mailing lists, source code control systems,
-          and issue tracking systems that are managed by, or on behalf of, the
-          Licensor for the purpose of discussing and improving the Work, but
-          excluding communication that is conspicuously marked or otherwise
-          designated in writing by the copyright owner as "Not a Contribution."
-
-          "Contributor" shall mean Licensor and any individual or Legal Entity
-          on behalf of whom a Contribution has been received by Licensor and
-          subsequently incorporated within the Work.
-
-       2. Grant of Copyright License. Subject to the terms and conditions of
-          this License, each Contributor hereby grants to You a perpetual,
-          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-          copyright license to reproduce, prepare Derivative Works of,
-          publicly display, publicly perform, sublicense, and distribute the
-          Work and such Derivative Works in Source or Object form.
-
-       3. Grant of Patent License. Subject to the terms and conditions of
-          this License, each Contributor hereby grants to You a perpetual,
-          worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-          (except as stated in this section) patent license to make, have made,
-          use, offer to sell, sell, import, and otherwise transfer the Work,
-          where such license applies only to those patent claims licensable
-          by such Contributor that are necessarily infringed by their
-          Contribution(s) alone or by combination of their Contribution(s)
-          with the Work to which such Contribution(s) was submitted. If You
-          institute patent litigation against any entity (including a
-          cross-claim or counterclaim in a lawsuit) alleging that the Work
-          or a Contribution incorporated within the Work constitutes direct
-          or contributory patent infringement, then any patent licenses
-          granted to You under this License for that Work shall terminate
-          as of the date such litigation is filed.
-
-       4. Redistribution. You may reproduce and distribute copies of the
-          Work or Derivative Works thereof in any medium, with or without
-          modifications, and in Source or Object form, provided that You
-          meet the following conditions:
-
-          (a) You must give any other recipients of the Work or
-              Derivative Works a copy of this License; and
-
-          (b) You must cause any modified files to carry prominent notices
-              stating that You changed the files; and
-
-          (c) You must retain, in the Source form of any Derivative Works
-              that You distribute, all copyright, patent, trademark, and
-              attribution notices from the Source form of the Work,
-              excluding those notices that do not pertain to any part of
-              the Derivative Works; and
-
-          (d) If the Work includes a "NOTICE" text file as part of its
-              distribution, then any Derivative Works that You distribute must
-              include a readable copy of the attribution notices contained
-              within such NOTICE file, excluding those notices that do not
-              pertain to any part of the Derivative Works, in at least one
-              of the following places: within a NOTICE text file distributed
-              as part of the Derivative Works; within the Source form or
-              documentation, if provided along with the Derivative Works; or,
-              within a display generated by the Derivative Works, if and
-              wherever such third-party notices normally appear. The contents
-              of the NOTICE file are for informational purposes only and
-              do not modify the License. You may add Your own attribution
-              notices within Derivative Works that You distribute, alongside
-              or as an addendum to the NOTICE text from the Work, provided
-              that such additional attribution notices cannot be construed
-              as modifying the License.
-
-          You may add Your own copyright statement to Your modifications and
-          may provide additional or different license terms and conditions
-          for use, reproduction, or distribution of Your modifications, or
-          for any such Derivative Works as a whole, provided Your use,
-          reproduction, and distribution of the Work otherwise complies with
-          the conditions stated in this License.
-
-       5. Submission of Contributions. Unless You explicitly state otherwise,
-          any Contribution intentionally submitted for inclusion in the Work
-          by You to the Licensor shall be under the terms and conditions of
-          this License, without any additional terms or conditions.
-          Notwithstanding the above, nothing herein shall supersede or modify
-          the terms of any separate license agreement you may have executed
-          with Licensor regarding such Contributions.
-
-       6. Trademarks. This License does not grant permission to use the trade
-          names, trademarks, service marks, or product names of the Licensor,
-          except as required for reasonable and customary use in describing the
-          origin of the Work and reproducing the content of the NOTICE file.
-
-       7. Disclaimer of Warranty. Unless required by applicable law or
-          agreed to in writing, Licensor provides the Work (and each
-          Contributor provides its Contributions) on an "AS IS" BASIS,
-          WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-          implied, including, without limitation, any warranties or conditions
-          of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-          PARTICULAR PURPOSE. You are solely responsible for determining the
-          appropriateness of using or redistributing the Work and assume any
-          risks associated with Your exercise of permissions under this License.
-
-       8. Limitation of Liability. In no event and under no legal theory,
-          whether in tort (including negligence), contract, or otherwise,
-          unless required by applicable law (such as deliberate and grossly
-          negligent acts) or agreed to in writing, shall any Contributor be
-          liable to You for damages, including any direct, indirect, special,
-          incidental, or consequential damages of any character arising as a
-          result of this License or out of the use or inability to use the
-          Work (including but not limited to damages for loss of goodwill,
-          work stoppage, computer failure or malfunction, or any and all
-          other commercial damages or losses), even if such Contributor
-          has been advised of the possibility of such damages.
-
-       9. Accepting Warranty or Additional Liability. While redistributing
-          the Work or Derivative Works thereof, You may choose to offer,
-          and charge a fee for, acceptance of support, warranty, indemnity,
-          or other liability obligations and/or rights consistent with this
-          License. However, in accepting such obligations, You may act only
-          on Your own behalf and on Your sole responsibility, not on behalf
-          of any other Contributor, and only if You agree to indemnify,
-          defend, and hold each Contributor harmless for any liability
-          incurred by, or claims asserted against, such Contributor by reason
-          of your accepting any such warranty or additional liability.
-
-       END OF TERMS AND CONDITIONS
-
-       APPENDIX: How to apply the Apache License to your work.
-
-          To apply the Apache License to your work, attach the following
-          boilerplate notice, with the fields enclosed by brackets "[]"
-          replaced with your own identifying information. (Don't include
-          the brackets!)  The text should be enclosed in the appropriate
-          comment syntax for the file format. We also recommend that a
-          file or class name and description of purpose be included on the
-          same "printed page" as the copyright notice for easier
-          identification within third-party archives.
-
-       Copyright 2016 Alibaba Group
-
-       Licensed under the Apache License, Version 2.0 (the "License");
-       you may not use this file except in compliance with the License.
-       You may obtain a copy of the License at
-
-           http://www.apache.org/licenses/LICENSE-2.0
-
-       Unless required by applicable law or agreed to in writing, software
-       distributed under the License is distributed on an "AS IS" BASIS,
-       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-       See the License for the specific language governing permissions and
-       limitations under the License.
-
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
 -->
 <resources>
     <!--<string name="app_name">Weex Library</string>-->
diff --git a/android/sdk/src/test/java/com/taobao/weex/TestActivity.java b/android/sdk/src/test/java/com/taobao/weex/TestActivity.java
index 1b5cb6f..66b305e 100644
--- a/android/sdk/src/test/java/com/taobao/weex/TestActivity.java
+++ b/android/sdk/src/test/java/com/taobao/weex/TestActivity.java
@@ -1,213 +1,29 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
 import android.app.Activity;
-
 /**
  * Created by sospartan on 7/27/16.
  */
-public class TestActivity extends Activity {
+public   class TestActivity extends Activity {
+  public  void test(){
+    //
+  }
 }
diff --git a/android/sdk/src/test/java/com/taobao/weex/TestApplication.java b/android/sdk/src/test/java/com/taobao/weex/TestApplication.java
index 285c884..9ca09d9 100644
--- a/android/sdk/src/test/java/com/taobao/weex/TestApplication.java
+++ b/android/sdk/src/test/java/com/taobao/weex/TestApplication.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/WXSDKEngineTest.java b/android/sdk/src/test/java/com/taobao/weex/WXSDKEngineTest.java
index c295ef1..a60c44f 100644
--- a/android/sdk/src/test/java/com/taobao/weex/WXSDKEngineTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/WXSDKEngineTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -289,4 +103,4 @@
     assertFalse(WXSDKEngine.registerDomObject("", TestDomObject.class));
     assertTrue(WXSDKEngine.registerDomObject("test",TestDomObject.class));
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/WXSDKInstanceTest.java b/android/sdk/src/test/java/com/taobao/weex/WXSDKInstanceTest.java
index cdd9030..6bae44f 100644
--- a/android/sdk/src/test/java/com/taobao/weex/WXSDKInstanceTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/WXSDKInstanceTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -375,7 +189,6 @@
     mInstance.onActivityResume();
     mInstance.onActivityPause();
     mInstance.onActivityStop();
-    mInstance.onActivityDestroy();
   }
 
   @Test
@@ -383,4 +196,4 @@
     mInstance.onJSException(null,null,null);
     mInstance.onJSException("100","test","some error");
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java b/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java
index 7819a8f..ae6442d 100644
--- a/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/WXSDKManagerTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex;
 
@@ -216,7 +30,7 @@
 public class WXSDKManagerTest {
 
   public static void setRenderManager(WXRenderManager rm){
-    WXSDKManager.getInstance().mWXRenderManager = rm;
+    WXSDKManager.initInstance(rm);
   }
 
   public static void setInstance(WXSDKManager m){
@@ -232,4 +46,4 @@
   public void tearDown() throws Exception {
 
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/adapter/DefaultUriAdapterTest.java b/android/sdk/src/test/java/com/taobao/weex/adapter/DefaultUriAdapterTest.java
index d5f89c0..1de08c6 100644
--- a/android/sdk/src/test/java/com/taobao/weex/adapter/DefaultUriAdapterTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/adapter/DefaultUriAdapterTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.adapter;
 
@@ -296,4 +110,4 @@
     assertEquals(Uri.parse(host + "/test2"), uri);
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/appfram/clipboard/WXClipboardModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/appfram/clipboard/WXClipboardModuleTest.java
index a97a11a..9413a7f 100644
--- a/android/sdk/src/test/java/com/taobao/weex/appfram/clipboard/WXClipboardModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/appfram/clipboard/WXClipboardModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.clipboard;
 
@@ -258,4 +72,4 @@
     module.getString(mock);
     Mockito.verify(mock,Mockito.times(1)).invoke(Mockito.anyObject());
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/appfram/navigator/WXNavigatorModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/appfram/navigator/WXNavigatorModuleTest.java
index 742dca3..9eb1c6d 100644
--- a/android/sdk/src/test/java/com/taobao/weex/appfram/navigator/WXNavigatorModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/appfram/navigator/WXNavigatorModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.navigator;
 
@@ -357,4 +171,4 @@
     mockSetter();
     module.setNavBarTitle("{}",callback);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/appfram/storage/DefaultWXStorageTest.java b/android/sdk/src/test/java/com/taobao/weex/appfram/storage/DefaultWXStorageTest.java
index 7b5f9f3..206488d 100644
--- a/android/sdk/src/test/java/com/taobao/weex/appfram/storage/DefaultWXStorageTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/appfram/storage/DefaultWXStorageTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
@@ -292,4 +106,4 @@
     verify(listener,timeout(3000).times(1)).onReceived(anyMapOf(String.class,Object.class));
     storage.close();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/appfram/storage/WXStorageModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/appfram/storage/WXStorageModuleTest.java
index 55e753b..421cb65 100644
--- a/android/sdk/src/test/java/com/taobao/weex/appfram/storage/WXStorageModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/appfram/storage/WXStorageModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.appfram.storage;
 
@@ -315,4 +129,4 @@
     module.getAllKeys(callback);
     verify(callback,times(1)).invoke(any());
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeManagerTest.java b/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeManagerTest.java
old mode 100755
new mode 100644
index df1b6dc..68e73bf
--- a/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeManagerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeManagerTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -348,4 +162,4 @@
     getInstance().reportJSException(instance.getInstanceId(),"test","test exception");
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeTest.java b/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeTest.java
index e18ba98..359ba4c 100644
--- a/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/bridge/WXBridgeTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -260,4 +74,4 @@
   public void testSetJSFrmVersion() throws Exception {
     bridge.setJSFrmVersion("v0.1");
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/bridge/WXHashMapTest.java b/android/sdk/src/test/java/com/taobao/weex/bridge/WXHashMapTest.java
old mode 100755
new mode 100644
index 5256071..de7276f
--- a/android/sdk/src/test/java/com/taobao/weex/bridge/WXHashMapTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/bridge/WXHashMapTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/bridge/WXModuleManagerTest.java b/android/sdk/src/test/java/com/taobao/weex/bridge/WXModuleManagerTest.java
index 523fc14..0a3eab6 100644
--- a/android/sdk/src/test/java/com/taobao/weex/bridge/WXModuleManagerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/bridge/WXModuleManagerTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -286,4 +100,4 @@
   public void testReload() throws Exception {
     WXModuleManager.reload();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/common/TestModule.java b/android/sdk/src/test/java/com/taobao/weex/common/TestModule.java
index d580081..b1158d4 100644
--- a/android/sdk/src/test/java/com/taobao/weex/common/TestModule.java
+++ b/android/sdk/src/test/java/com/taobao/weex/common/TestModule.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/common/TestModuleFactory.java b/android/sdk/src/test/java/com/taobao/weex/common/TestModuleFactory.java
index d86e5fa..ae9fc65 100644
--- a/android/sdk/src/test/java/com/taobao/weex/common/TestModuleFactory.java
+++ b/android/sdk/src/test/java/com/taobao/weex/common/TestModuleFactory.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/common/WXModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/common/WXModuleTest.java
index 6fd7494..5860720 100644
--- a/android/sdk/src/test/java/com/taobao/weex/common/WXModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/common/WXModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.common;
 
@@ -211,4 +25,4 @@
  */
 public class WXModuleTest {
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/TestDomObject.java b/android/sdk/src/test/java/com/taobao/weex/dom/TestDomObject.java
index 4d7ad66..f290191 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/TestDomObject.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/TestDomObject.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXAttrTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXAttrTest.java
index e12c11a..374b542 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXAttrTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXAttrTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -321,4 +135,4 @@
     assertThat(attr.getElevation(viewPortW), is(Float.NaN));
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomManagerTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomManagerTest.java
index e14dd7f..261b5b7 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomManagerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomManagerTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -252,4 +66,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomModuleTest.java
index 85d190d..77042f0 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -314,4 +128,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomObjectTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomObjectTest.java
index 073c836..e535138 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomObjectTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomObjectTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -291,4 +105,4 @@
     assertEquals(clone.getType(),"test");
 
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java
index f5b557e..9e6593c 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXDomStatementTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -210,7 +24,10 @@
 import com.taobao.weex.WXSDKEngine;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKInstanceTest;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.WXSDKManagerTest;
 import com.taobao.weex.bridge.WXBridgeManagerTest;
+import com.taobao.weex.dom.action.TestActions;
 import com.taobao.weex.ui.WXRenderManager;
 
 import org.junit.After;
@@ -231,7 +48,7 @@
 @PowerMockIgnore( {"org.mockito.*", "org.robolectric.*", "android.*"})
 public class WXDomStatementTest {
 
-  WXDomStatement stmt;
+  DOMActionContextImpl stmt;
   WXRenderManager rednerManager;
   WXSDKInstance instance;
 
@@ -244,7 +61,8 @@
     instance = WXSDKInstanceTest.createInstance();
     rednerManager = new WXRenderManager();
     rednerManager.registerInstance(instance);//
-    stmt = new WXDomStatement(instance.getInstanceId(),rednerManager );
+    WXSDKManagerTest.setRenderManager(rednerManager);
+    stmt = new DOMActionContextImpl(instance.getInstanceId(),rednerManager );
   }
 
   @After
@@ -256,7 +74,51 @@
     JSONObject body = new JSONObject();
     body.put("type","div");
     body.put("ref",WXDomObject.ROOT);
-    stmt.createBody(body);
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(), TestActions.body(body),true);
+  }
+
+  void addDom(JSONObject obj,String parentRef,int index){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.addDom(obj,parentRef,index),false);
+  }
+
+  void removeDom(String ref){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.remove(ref),false);
+  }
+
+  void updateAttrs(String ref,JSONObject data){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateAttr(ref,data),false);
+  }
+
+  void updateStyle(String ref,JSONObject data,boolean byPesudo){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateStyle(ref,data,byPesudo),false);
+  }
+
+  void moveDom(String ref,String parent,int index){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.moveDom(ref,parent,index),false);
+  }
+
+  private void scrollToDom(String s, JSONObject o) {
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.scrollTo(s,o),false);
+  }
+
+  private void addEvent(String ref,String event){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.addEvent(ref,event),false);
+  }
+
+  private void removeEvent(String ref,String event){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.removeEvent(ref,event),false);
+  }
+
+  private void updateFinish(){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.updateFinish(),false);
+  }
+
+  private void createFinish(){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.createFinish(),false);
+  }
+
+  private void refreshFinish(){
+    WXSDKManager.getInstance().getWXDomManager().executeAction(instance.getInstanceId(),TestActions.refreshFinish(),false);
   }
 
   @Test
@@ -268,7 +130,7 @@
     root.add(new WXSwitchDomObject(),0);
     root.add(new TextAreaEditTextDomObject(),0);
     stmt.layout(root);
-    root.traverseTree(WXDomStatement.ApplyStyleConsumer.getInstance());
+    root.traverseTree(ApplyStyleConsumer.getInstance());
   }
 
   @Test
@@ -286,7 +148,7 @@
     obj.put("type","div");
     obj.put("ref","100");
 
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
     stmt.batch();
   }
@@ -298,14 +160,14 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","101");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.moveDom("100",WXDomObject.ROOT,1);
+    moveDom("100",WXDomObject.ROOT,1);
     stmt.batch();
   }
 
@@ -316,14 +178,14 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","101");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.removeDom("101");
+    removeDom("101");
 
     stmt.batch();
   }
@@ -335,11 +197,11 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
 
-    stmt.updateAttrs("100",new JSONObject());
-    stmt.updateAttrs("100",null);
+    updateAttrs("100",new JSONObject());
+    updateAttrs("100",null);
 
     stmt.batch();
   }
@@ -351,10 +213,10 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.updateStyle("100",new JSONObject(),false);
-    stmt.updateStyle("100",null,false);
+    updateStyle("100",new JSONObject(),false);
+    updateStyle("100",null,false);
 
     stmt.batch();
   }
@@ -366,10 +228,10 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.addEvent("100","click");
-    stmt.addEvent("100",null);
+    addEvent("100","click");
+    addEvent("100",null);
 
     stmt.batch();
   }
@@ -381,11 +243,11 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.removeEvent("100",null);
-    stmt.addEvent("100","click");
-    stmt.removeEvent("100","click");
+    removeEvent("100",null);
+    addEvent("100","click");
+    removeEvent("100","click");
 
     stmt.batch();
   }
@@ -397,16 +259,18 @@
     obj = new JSONObject();
     obj.put("type","div");
     obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
+    addDom(obj,WXDomObject.ROOT,0);
 
-    stmt.scrollToDom("100",null);
+    scrollToDom("100",null);
     stmt.batch();
   }
 
+
+
   @Test
   public void testCreateFinish() throws Exception {
     createBody();
-    stmt.createFinish();
+    createFinish();
 
     stmt.batch();
   }
@@ -414,7 +278,7 @@
   @Test
   public void testRefreshFinish() throws Exception {
     createBody();
-    stmt.refreshFinish();
+    refreshFinish();
 
     stmt.batch();
   }
@@ -423,18 +287,7 @@
   public void testUpdateFinish() throws Exception {
     createBody();
 
-    stmt.updateFinish();
+    updateFinish();
     stmt.batch();
   }
-
-  @Test
-  public void testStartAnimation() throws Exception {
-    createBody();
-    JSONObject obj;
-    obj = new JSONObject();
-    obj.put("type","div");
-    obj.put("ref","100");
-    stmt.addDom(obj,WXDomObject.ROOT,0);
-    stmt.startAnimation("100","",null);
-  }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXStyleTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXStyleTest.java
index 0772804..f6641d4 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXStyleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXStyleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -238,27 +52,10 @@
     @Test
     public void testBlur() {
         assertEquals(0,style.size());
-        assertEquals(0,style.getBlur());
+        assertEquals(null,style.getBlur());
         style.put(Constants.Name.FILTER,"blur(5px)");
-        assertEquals(5,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(1)");
-        assertEquals(1,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(1dp)");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"bur(1px)");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(1px");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(-1)");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(-1px)");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(100px)");
-        assertEquals(10,style.getBlur());
-        style.put(Constants.Name.FILTER,"blur(1p0px)");
-        assertEquals(0,style.getBlur());
-        style.put(Constants.Name.FILTER,"7");
-        assertEquals(0,style.getBlur());
+        assertEquals("blur(5px)",style.getBlur());
+
     }
 
     @Test
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/WXTextDomObjectTest.java b/android/sdk/src/test/java/com/taobao/weex/dom/WXTextDomObjectTest.java
index 611567d..fc64c77 100644
--- a/android/sdk/src/test/java/com/taobao/weex/dom/WXTextDomObjectTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/WXTextDomObjectTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.dom;
 
@@ -273,4 +87,4 @@
   public void tearDown() throws Exception {
 
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java b/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java
new file mode 100644
index 0000000..f41bdff
--- /dev/null
+++ b/android/sdk/src/test/java/com/taobao/weex/dom/action/TestActions.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.dom.DOMAction;
+
+/**
+ * Created by sospartan on 01/03/2017.
+ */
+
+public class TestActions {
+  public static DOMAction body(JSONObject data){
+    return new CreateBodyAction(data);
+  }
+
+
+  public static DOMAction addDom(JSONObject obj, String parentRef, int index) {
+    return new AddElementAction(obj,parentRef,index);
+  }
+
+  public static DOMAction remove(String ref) {
+    return new RemoveElementAction(ref);
+  }
+
+  public static DOMAction updateAttr(String ref, JSONObject data) {
+    return new UpdateAttributeAction(ref,data);
+  }
+
+  public static DOMAction updateStyle(String ref, JSONObject data, boolean byPesudo) {
+    return new UpdateStyleAction(ref,data,byPesudo);
+  }
+
+  public static DOMAction moveDom(String ref, String parent, int index) {
+    return new MoveElementAction(ref,parent,index);
+  }
+
+  public static DOMAction scrollTo(String ref,JSONObject data){
+    return new ScrollToElementAction(ref,data);
+  }
+
+  public static DOMAction addEvent(String ref,String event){
+    return new AddEventAction(ref,event);
+  }
+
+  public static DOMAction removeEvent(String ref,String event){
+    return new RemoveEventAction(ref,event);
+  }
+
+  public static DOMAction createFinish(){
+    return new CreateFinishAction();
+  }
+
+  public static DOMAction updateFinish(){
+    return new UpdateFinishAction();
+  }
+
+  public static DOMAction refreshFinish(){
+    return new RefreshFinishAction();
+  }
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/http/WXStreamModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/http/WXStreamModuleTest.java
index e76a6c4..e0a2aa3 100644
--- a/android/sdk/src/test/java/com/taobao/weex/http/WXStreamModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/http/WXStreamModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.http;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/ComponentHolderTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/ComponentHolderTest.java
index 38dfdc0..fb9e85a 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/ComponentHolderTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/ComponentHolderTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
@@ -252,4 +66,4 @@
       }
     }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java
old mode 100755
new mode 100644
index 1f9ac18..044c92c
--- a/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/WXRenderStatementTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui;
 
@@ -228,7 +42,7 @@
 @PrepareForTest({WXSoInstallMgrSdk.class, TextUtils.class,WXComponentFactory.class})
 public class WXRenderStatementTest {
 
-    WXRenderStatement mWXRenderStatement;
+    RenderActionContextImpl mWXRenderStatement;
 
     @Before
     public void setUp() throws Exception {
@@ -238,7 +52,7 @@
         PowerMockito.when(TextUtils.isEmpty("124")).thenReturn(true);
         PowerMockito.when(WXSoInstallMgrSdk.initSo(null, 1, null)).thenReturn(true);
         WXSDKInstance instance = Mockito.mock(WXSDKInstance.class);
-        mWXRenderStatement = new WXRenderStatement(instance);
+        mWXRenderStatement = new RenderActionContextImpl(instance);
     }
 
     public void testCreateBody() throws Exception {
@@ -320,4 +134,4 @@
     public void testRefreshFinish() throws Exception {
 
     }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/animation/WXAnimationModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/animation/WXAnimationModuleTest.java
index ffeb3a0..131bc8e 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/animation/WXAnimationModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/animation/WXAnimationModuleTest.java
@@ -1,213 +1,26 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.animation;
 
 import com.taobao.weappplus_sdk.BuildConfig;
 import com.taobao.weex.WXSDKInstanceTest;
-import com.taobao.weex.dom.TestDomObject;
-import com.taobao.weex.ui.component.TestComponent;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -242,22 +55,7 @@
   }
 
   @Test
-  public void testStartAnimation() throws Exception {
-    module.startAnimation(module.mWXSDKInstance,null,null,null);
-
-    TestComponent comp = new TestComponent(module.mWXSDKInstance,new TestDomObject(),null);
-    module.startAnimation(module.mWXSDKInstance,comp,null,null);
-
-    WXAnimationBean animation = new WXAnimationBean();
-    module.startAnimation(module.mWXSDKInstance,comp,animation,null);
-
-    animation.styles = new WXAnimationBean.Style();
-    module.startAnimation(module.mWXSDKInstance,comp,animation,null);
-
-  }
-
-  @Test
   public void testCreateAnimatorListener() throws Exception {
 
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java
index 138901a..876d61a 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/ComponentTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java
index 793013c..ea46d49 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/EditComponentTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -320,4 +134,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java
index 2744388..283b573 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestComponent.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestConstants.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestConstants.java
index 184b142..f0d060b 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/TestConstants.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/TestConstants.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/TextareaTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/TextareaTest.java
index eab424d..4db5237 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/TextareaTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/TextareaTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -252,4 +66,4 @@
   public void tearDown() throws Exception {
     ComponentTest.destory(component);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java
index a7f5b3f..8aff4a4 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXComponentTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -297,4 +111,4 @@
   public void testAddEvent() throws Exception {
     component.addEvent(Constants.Event.FOCUS);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java
old mode 100755
new mode 100644
index 6d3d85b..f7b5dae
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXDivTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -310,4 +124,4 @@
 
         assertEquals(2, mWXDiv.childCount());
     }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java
index 8b08963..943b252 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXEmbedTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -256,4 +70,4 @@
   public void tearDown() throws Exception {
     component.destroy();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java
index 599a07d..213119b 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXHeaderTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -222,4 +36,4 @@
     return (WXHeader) new SimpleComponentHolder(WXHeader.class).createInstance(WXSDKInstanceTest.createInstance(), new TestDomObject(), parent);
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java
index c2fc9da..18d353e 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXImageTest.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -248,4 +156,4 @@
     imageView.setImageBitmap(Bitmap.createBitmap(100, 100, Bitmap.Config.RGB_565));
     assertNotNull(imageView.getDrawable());
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java
index 810a287..30d1c34 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXLoadingTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -256,4 +70,4 @@
   public void testSetProperty() throws Exception {
     component.setProperty(Constants.Name.DISPLAY,WXLoading.HIDE);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java
index 6466bfe..3eb757f 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXRefreshTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -258,4 +72,4 @@
   public void testSetProperty() throws Exception {
     component.setProperty(Constants.Name.DISPLAY,WXRefresh.HIDE);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java
index a6190d7..166e770 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXScrollerTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -268,4 +82,4 @@
   public void tearDown() throws Exception {
     component.destroy();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java
index ddfa94d..dd80bc8 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderNeighborTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -285,4 +99,4 @@
   public void tearDown() throws Exception {
     component.destroy();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java
index 74c016a..5856d95 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSliderTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -335,4 +149,4 @@
     ComponentTest.destory(component);
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java
index 6b1c459..52e9fd9 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXSwitchTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -258,4 +72,4 @@
   public void testSetProperty() throws Exception {
     component.setProperty(Constants.Name.CHECKED,true);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java
old mode 100755
new mode 100644
index bab5924..0181457
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXTextTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -212,9 +26,8 @@
 import com.taobao.weex.dom.WXDomObject;
 import com.taobao.weex.dom.WXTextDomObject;
 import com.taobao.weex.dom.flex.Spacing;
-
 import com.taobao.weex.ui.SimpleComponentHolder;
-import org.apache.tools.ant.taskdefs.EchoXML;
+
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -343,10 +156,10 @@
         prop.put(Constants.Name.OPACITY, 0.8f);
         mWXText.updateProperties(prop);
         assertTrue(mWXText.getHostView().isEnabled());
-        assertTrue(mWXText.getHostView().getAlpha()>=0.799 && mWXText.getHostView().getAlpha()<=0.811);
+        assertEquals(0.8f, mWXText.getHostView().getAlpha(), 0.001f);
 
         prop.put(Constants.Name.DISABLED, "true");
         mWXText.updateProperties(prop);
         assertFalse(mWXText.getHostView().isEnabled());
     }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java
index f763346..10da9a6 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXVideoTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -267,4 +81,4 @@
     component.mPrepared = true;
     ComponentTest.setProperty(component,PROPS,VALUES);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java
index 1ea7118..f0f9597 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/WXWebTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component;
 
@@ -333,4 +147,4 @@
     mWebView.mOnPageListener.onPageStart("http://taobao.com");
     mWebView.mOnErrorListener.onError("test","error occurred");
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/helper/WXTimeInputHelperTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/helper/WXTimeInputHelperTest.java
index c1f6840..ab317bb 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/helper/WXTimeInputHelperTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/helper/WXTimeInputHelperTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.helper;
 
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java
index 4d60389..f184dae 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/component/list/WXListComponentTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.component.list;
 
@@ -308,4 +122,4 @@
   public void tearDown() throws Exception {
     component.destroy();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXMetaModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXMetaModuleTest.java
index 37b19c6..6fddd99 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXMetaModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXMetaModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -241,23 +55,23 @@
         JSONObject jsonObject  = new JSONObject();
         jsonObject.put(WXMetaModule.WIDTH,640);
         mMeta.setViewport(jsonObject.toString());
-        assertTrue(mMeta.mWXSDKInstance.getViewPortWidth() == 640);
+        assertTrue(mMeta.mWXSDKInstance.getInstanceViewPortWidth() == 640);
 
         jsonObject.put(WXMetaModule.WIDTH,320.5);
         mMeta.setViewport(jsonObject.toString());
-        assertTrue(mMeta.mWXSDKInstance.getViewPortWidth() == 320);
+        assertTrue(mMeta.mWXSDKInstance.getInstanceViewPortWidth() == 320);
 
         jsonObject.put(WXMetaModule.WIDTH,"-200");
         mMeta.setViewport(jsonObject.toString());
-        assertTrue(mMeta.mWXSDKInstance.getViewPortWidth() == 320);
+        assertTrue(mMeta.mWXSDKInstance.getInstanceViewPortWidth() == 320);
 
         jsonObject.put(WXMetaModule.WIDTH,"error");
         mMeta.setViewport(jsonObject.toString());
-        assertTrue(mMeta.mWXSDKInstance.getViewPortWidth() == 320);
+        assertTrue(mMeta.mWXSDKInstance.getInstanceViewPortWidth() == 320);
 
 
         mMeta.setViewport("ads");
-        assertTrue(mMeta.mWXSDKInstance.getViewPortWidth() == 320);
+        assertTrue(mMeta.mWXSDKInstance.getInstanceViewPortWidth() == 320);
     }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java
index f375463..c438892 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXModalUIModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -263,4 +77,4 @@
     JSCallback callback = Mockito.mock(JSCallback.class);
     module.prompt("{}",callback);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java
index e569338..68ab3c7 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXTimerModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -360,4 +174,4 @@
     mLooper.idle(DELAY);
     Mockito.verify(module, never()).handleMessage(any(Message.class));
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXWebViewModuleTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXWebViewModuleTest.java
index e39a216..e5753fd 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/module/WXWebViewModuleTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/module/WXWebViewModuleTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.module;
 
@@ -248,4 +62,4 @@
   public void testReload() throws Exception {
     module.reload("");
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXCirclePageAdapterTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXCirclePageAdapterTest.java
index 6a99094..2a78cfb 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXCirclePageAdapterTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXCirclePageAdapterTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -290,4 +104,4 @@
     assertEquals(adapter.getRealPosition(100), -1);
     assertEquals(adapter.getRealPosition(-1), -1);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXScrollViewTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXScrollViewTest.java
index acd36ef..6ccc9f2 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXScrollViewTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXScrollViewTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -270,4 +84,4 @@
   public void testOnScrollChanged() throws Exception {
     view.onScrollChanged(0,10,0,20);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXWebViewTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXWebViewTest.java
index e817026..e45be45 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/WXWebViewTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/WXWebViewTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view;
 
@@ -294,4 +108,4 @@
     testGoBack();
     view.goForward();
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderCornerTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderCornerTest.java
index f0e1fd3..827e632 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderCornerTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderCornerTest.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view.border;
@@ -503,4 +317,4 @@
     assertThat(bottomLeft, is(new RectF(25, 325, 75, 375)));
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java
index b373395..85089fe 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/border/BorderDrawableTest.java
@@ -1,206 +1,20 @@
 /*
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 package com.taobao.weex.ui.view.border;
@@ -561,4 +375,4 @@
     zeroPart.setBorderRadius(BorderDrawable.BORDER_TOP_LEFT_RADIUS, 0);
     assertThat(zeroPart.isRounded(), is(false));
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java b/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java
index 1383915..080bcfc 100644
--- a/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/ui/view/gesture/WXGestureTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.ui.view.gesture;
 
@@ -265,4 +79,4 @@
     event = MotionEvent.obtain(System.currentTimeMillis(), System.currentTimeMillis(),MotionEvent.ACTION_CANCEL,0,0,0);
     mGesture.onTouch(component.getHostView(),event);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/FunctionParserTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/FunctionParserTest.java
index b61a0e3..aa1c719 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/FunctionParserTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/FunctionParserTest.java
@@ -1,212 +1,26 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
 import org.junit.Test;
 
-import static org.junit.Assert.*;
+import java.util.List;
 
 /**
  * Created by sospartan on 27/09/2016.
@@ -215,11 +29,12 @@
 
   @Test
   public void testParse() throws Exception {
-    new SingleFunctionParser<String>("transform(50 , 20)", new SingleFunctionParser.FlatMapper<String>() {
+    List<Integer> s = new SingleFunctionParser<>("blur(5px)", new SingleFunctionParser.FlatMapper<Integer>() {
       @Override
-      public String map(String raw) {
-        return null;
+      public Integer map(String raw) {
+        return WXUtils.getInteger(raw,0);
       }
-    }).parse("transform");
+    }).parse("blur");
+    System.out.println(s);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/TypefaceUtilTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/TypefaceUtilTest.java
index e3d2ce7..d72485d 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/TypefaceUtilTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/TypefaceUtilTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -234,4 +48,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
index 1f75b2b..099991f 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXFileUtilsTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -251,4 +65,4 @@
   public void testSaveFile() throws Exception {
     WXFileUtils.saveFile("build/test","test".getBytes(),RuntimeEnvironment.application);
   }
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXJsonUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXJsonUtilsTest.java
index 37412dc..92f64eb 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXJsonUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXJsonUtilsTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -283,4 +97,4 @@
     }
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
index c16eb1d..b6ef074 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -281,4 +95,4 @@
     Log.e("tag",new Throwable("test"));
   }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java
index 797aae3..f0b9397 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXReflectionUtilsTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -309,4 +123,4 @@
   }
 
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java
index 43918a4..caaf8ab 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXResourceUtilsTest.java
@@ -1,217 +1,28 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
 import android.graphics.Shader;
 
-import com.taobao.weappplus_sdk.BuildConfig;
-
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.robolectric.RobolectricGradleTestRunner;
+import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
 
 import static org.junit.Assert.assertEquals;
@@ -221,14 +32,10 @@
 /**
  * Created by caolijie on 16/8/4.
  */
-@RunWith(RobolectricGradleTestRunner.class)
-@Config(constants = BuildConfig.class,sdk = 19)
+@RunWith(RobolectricTestRunner.class)
+@Config(manifest = Config.NONE)
 public class WXResourceUtilsTest {
 
-  @Before
-  public void setUp() throws Exception {
-  }
-
   @Test
   public void testColor1() throws Exception {
     int color = WXResourceUtils.getColor("#ffffff");
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
old mode 100755
new mode 100644
index 024c224..9976b69
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXUtilsTest.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.utils;
 
@@ -367,4 +181,4 @@
         assertEquals(test_double, want, 0.01);
     }
 
-}
\ No newline at end of file
+}
diff --git a/android/sdk/src/test/java/org/mockito/configuration/MockitoConfiguration.java b/android/sdk/src/test/java/org/mockito/configuration/MockitoConfiguration.java
index 4e5a05e..d6f285c 100644
--- a/android/sdk/src/test/java/org/mockito/configuration/MockitoConfiguration.java
+++ b/android/sdk/src/test/java/org/mockito/configuration/MockitoConfiguration.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package org.mockito.configuration;
 
diff --git a/android/weex_debug/src/androidTest/java/com/taobao/weex/ApplicationTest.java b/android/weex_debug/src/androidTest/java/com/taobao/weex/ApplicationTest.java
index cc8942d..c643964 100644
--- a/android/weex_debug/src/androidTest/java/com/taobao/weex/ApplicationTest.java
+++ b/android/weex_debug/src/androidTest/java/com/taobao/weex/ApplicationTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex;
 
 import android.app.Application;
@@ -11,4 +29,4 @@
   public ApplicationTest() {
     super(Application.class);
   }
-}
\ No newline at end of file
+}
diff --git a/android/weex_debug/src/main/AndroidManifest.xml b/android/weex_debug/src/main/AndroidManifest.xml
index 01690bf..08c89a8 100644
--- a/android/weex_debug/src/main/AndroidManifest.xml
+++ b/android/weex_debug/src/main/AndroidManifest.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           xmlns:tools="http://schemas.android.com/tools"
           package="com.taobao.prettyfish_base">
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/WXDebugTool.java b/android/weex_debug/src/main/java/com/taobao/weex/WXDebugTool.java
index f0a7e5d..a83974c 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/WXDebugTool.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/WXDebugTool.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex;
 
 import android.text.TextUtils;
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/WXPFComponent.java b/android/weex_debug/src/main/java/com/taobao/weex/WXPFComponent.java
index 78914a0..3effcdc 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/WXPFComponent.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/WXPFComponent.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex;
 
 import android.app.Application;
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/WXPrettyFish.java b/android/weex_debug/src/main/java/com/taobao/weex/WXPrettyFish.java
index e1a6f10..62869e4 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/WXPrettyFish.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/WXPrettyFish.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex;
 
 import android.app.Application;
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/adapter/DefautDebugAdapter.java b/android/weex_debug/src/main/java/com/taobao/weex/adapter/DefautDebugAdapter.java
index dbe7b85..8d5e435 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/adapter/DefautDebugAdapter.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/adapter/DefautDebugAdapter.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex.adapter;
 
 import android.app.Application;
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
old mode 100755
new mode 100644
index bbda765..e89d0fe
--- a/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/bridge/WXWebsocketBridge.java
@@ -1,206 +1,20 @@
-/**
- *
- *                                  Apache License
- *                            Version 2.0, January 2004
- *                         http://www.apache.org/licenses/
- *
- *    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
- *
- *    1. Definitions.
- *
- *       "License" shall mean the terms and conditions for use, reproduction,
- *       and distribution as defined by Sections 1 through 9 of this document.
- *
- *       "Licensor" shall mean the copyright owner or entity authorized by
- *       the copyright owner that is granting the License.
- *
- *       "Legal Entity" shall mean the union of the acting entity and all
- *       other entities that control, are controlled by, or are under common
- *       control with that entity. For the purposes of this definition,
- *       "control" means (i) the power, direct or indirect, to cause the
- *       direction or management of such entity, whether by contract or
- *       otherwise, or (ii) ownership of fifty percent (50%) or more of the
- *       outstanding shares, or (iii) beneficial ownership of such entity.
- *
- *       "You" (or "Your") shall mean an individual or Legal Entity
- *       exercising permissions granted by this License.
- *
- *       "Source" form shall mean the preferred form for making modifications,
- *       including but not limited to software source code, documentation
- *       source, and configuration files.
- *
- *       "Object" form shall mean any form resulting from mechanical
- *       transformation or translation of a Source form, including but
- *       not limited to compiled object code, generated documentation,
- *       and conversions to other media types.
- *
- *       "Work" shall mean the work of authorship, whether in Source or
- *       Object form, made available under the License, as indicated by a
- *       copyright notice that is included in or attached to the work
- *       (an example is provided in the Appendix below).
- *
- *       "Derivative Works" shall mean any work, whether in Source or Object
- *       form, that is based on (or derived from) the Work and for which the
- *       editorial revisions, annotations, elaborations, or other modifications
- *       represent, as a whole, an original work of authorship. For the purposes
- *       of this License, Derivative Works shall not include works that remain
- *       separable from, or merely link (or bind by name) to the interfaces of,
- *       the Work and Derivative Works thereof.
- *
- *       "Contribution" shall mean any work of authorship, including
- *       the original version of the Work and any modifications or additions
- *       to that Work or Derivative Works thereof, that is intentionally
- *       submitted to Licensor for inclusion in the Work by the copyright owner
- *       or by an individual or Legal Entity authorized to submit on behalf of
- *       the copyright owner. For the purposes of this definition, "submitted"
- *       means any form of electronic, verbal, or written communication sent
- *       to the Licensor or its representatives, including but not limited to
- *       communication on electronic mailing lists, source code control systems,
- *       and issue tracking systems that are managed by, or on behalf of, the
- *       Licensor for the purpose of discussing and improving the Work, but
- *       excluding communication that is conspicuously marked or otherwise
- *       designated in writing by the copyright owner as "Not a Contribution."
- *
- *       "Contributor" shall mean Licensor and any individual or Legal Entity
- *       on behalf of whom a Contribution has been received by Licensor and
- *       subsequently incorporated within the Work.
- *
- *    2. Grant of Copyright License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       copyright license to reproduce, prepare Derivative Works of,
- *       publicly display, publicly perform, sublicense, and distribute the
- *       Work and such Derivative Works in Source or Object form.
- *
- *    3. Grant of Patent License. Subject to the terms and conditions of
- *       this License, each Contributor hereby grants to You a perpetual,
- *       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- *       (except as stated in this section) patent license to make, have made,
- *       use, offer to sell, sell, import, and otherwise transfer the Work,
- *       where such license applies only to those patent claims licensable
- *       by such Contributor that are necessarily infringed by their
- *       Contribution(s) alone or by combination of their Contribution(s)
- *       with the Work to which such Contribution(s) was submitted. If You
- *       institute patent litigation against any entity (including a
- *       cross-claim or counterclaim in a lawsuit) alleging that the Work
- *       or a Contribution incorporated within the Work constitutes direct
- *       or contributory patent infringement, then any patent licenses
- *       granted to You under this License for that Work shall terminate
- *       as of the date such litigation is filed.
- *
- *    4. Redistribution. You may reproduce and distribute copies of the
- *       Work or Derivative Works thereof in any medium, with or without
- *       modifications, and in Source or Object form, provided that You
- *       meet the following conditions:
- *
- *       (a) You must give any other recipients of the Work or
- *           Derivative Works a copy of this License; and
- *
- *       (b) You must cause any modified files to carry prominent notices
- *           stating that You changed the files; and
- *
- *       (c) You must retain, in the Source form of any Derivative Works
- *           that You distribute, all copyright, patent, trademark, and
- *           attribution notices from the Source form of the Work,
- *           excluding those notices that do not pertain to any part of
- *           the Derivative Works; and
- *
- *       (d) If the Work includes a "NOTICE" text file as part of its
- *           distribution, then any Derivative Works that You distribute must
- *           include a readable copy of the attribution notices contained
- *           within such NOTICE file, excluding those notices that do not
- *           pertain to any part of the Derivative Works, in at least one
- *           of the following places: within a NOTICE text file distributed
- *           as part of the Derivative Works; within the Source form or
- *           documentation, if provided along with the Derivative Works; or,
- *           within a display generated by the Derivative Works, if and
- *           wherever such third-party notices normally appear. The contents
- *           of the NOTICE file are for informational purposes only and
- *           do not modify the License. You may add Your own attribution
- *           notices within Derivative Works that You distribute, alongside
- *           or as an addendum to the NOTICE text from the Work, provided
- *           that such additional attribution notices cannot be construed
- *           as modifying the License.
- *
- *       You may add Your own copyright statement to Your modifications and
- *       may provide additional or different license terms and conditions
- *       for use, reproduction, or distribution of Your modifications, or
- *       for any such Derivative Works as a whole, provided Your use,
- *       reproduction, and distribution of the Work otherwise complies with
- *       the conditions stated in this License.
- *
- *    5. Submission of Contributions. Unless You explicitly state otherwise,
- *       any Contribution intentionally submitted for inclusion in the Work
- *       by You to the Licensor shall be under the terms and conditions of
- *       this License, without any additional terms or conditions.
- *       Notwithstanding the above, nothing herein shall supersede or modify
- *       the terms of any separate license agreement you may have executed
- *       with Licensor regarding such Contributions.
- *
- *    6. Trademarks. This License does not grant permission to use the trade
- *       names, trademarks, service marks, or product names of the Licensor,
- *       except as required for reasonable and customary use in describing the
- *       origin of the Work and reproducing the content of the NOTICE file.
- *
- *    7. Disclaimer of Warranty. Unless required by applicable law or
- *       agreed to in writing, Licensor provides the Work (and each
- *       Contributor provides its Contributions) on an "AS IS" BASIS,
- *       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- *       implied, including, without limitation, any warranties or conditions
- *       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- *       PARTICULAR PURPOSE. You are solely responsible for determining the
- *       appropriateness of using or redistributing the Work and assume any
- *       risks associated with Your exercise of permissions under this License.
- *
- *    8. Limitation of Liability. In no event and under no legal theory,
- *       whether in tort (including negligence), contract, or otherwise,
- *       unless required by applicable law (such as deliberate and grossly
- *       negligent acts) or agreed to in writing, shall any Contributor be
- *       liable to You for damages, including any direct, indirect, special,
- *       incidental, or consequential damages of any character arising as a
- *       result of this License or out of the use or inability to use the
- *       Work (including but not limited to damages for loss of goodwill,
- *       work stoppage, computer failure or malfunction, or any and all
- *       other commercial damages or losses), even if such Contributor
- *       has been advised of the possibility of such damages.
- *
- *    9. Accepting Warranty or Additional Liability. While redistributing
- *       the Work or Derivative Works thereof, You may choose to offer,
- *       and charge a fee for, acceptance of support, warranty, indemnity,
- *       or other liability obligations and/or rights consistent with this
- *       License. However, in accepting such obligations, You may act only
- *       on Your own behalf and on Your sole responsibility, not on behalf
- *       of any other Contributor, and only if You agree to indemnify,
- *       defend, and hold each Contributor harmless for any liability
- *       incurred by, or claims asserted against, such Contributor by reason
- *       of your accepting any such warranty or additional liability.
- *
- *    END OF TERMS AND CONDITIONS
- *
- *    APPENDIX: How to apply the Apache License to your work.
- *
- *       To apply the Apache License to your work, attach the following
- *       boilerplate notice, with the fields enclosed by brackets "[]"
- *       replaced with your own identifying information. (Don't include
- *       the brackets!)  The text should be enclosed in the appropriate
- *       comment syntax for the file format. We also recommend that a
- *       file or class name and description of purpose be included on the
- *       same "printed page" as the copyright notice for easier
- *       identification within third-party archives.
- *
- *    Copyright 2016 Alibaba Group
- *
- *    Licensed under the Apache License, Version 2.0 (the "License");
- *    you may not use this file except in compliance with the License.
- *    You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *    Unless required by applicable law or agreed to in writing, software
- *    distributed under the License is distributed on an "AS IS" BASIS,
- *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *    See the License for the specific language governing permissions and
- *    limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.bridge;
 
@@ -302,6 +116,9 @@
     }
 
     @Override
+    public void takeHeapSnapshot(String filename) {}
+
+    @Override
     public void reportJSException(String instanceId, String func, String exception) {
         if (mJsManager != null) {
             mJsManager.reportJSException(instanceId, func, exception);
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/scalpel/ScalpelFrameLayout.java b/android/weex_debug/src/main/java/com/taobao/weex/scalpel/ScalpelFrameLayout.java
index a24cc7e..496cb73 100644
--- a/android/weex_debug/src/main/java/com/taobao/weex/scalpel/ScalpelFrameLayout.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/scalpel/ScalpelFrameLayout.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex.scalpel;
 
 import android.content.Context;
diff --git a/android/weex_debug/src/main/java/com/taobao/weex/websocket/WXWebSocketManager.java b/android/weex_debug/src/main/java/com/taobao/weex/websocket/WXWebSocketManager.java
old mode 100755
new mode 100644
index db8f1d2..5d77986
--- a/android/weex_debug/src/main/java/com/taobao/weex/websocket/WXWebSocketManager.java
+++ b/android/weex_debug/src/main/java/com/taobao/weex/websocket/WXWebSocketManager.java
@@ -1,112 +1,20 @@
-/**
- * Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR
- * USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions
- * for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
- * "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is
- * granting the License. "Legal Entity" shall mean the union of the acting entity and all other
- * entities that control, are controlled by, or are under common control with that entity. For the
- * purposes of this definition, "control" means (i) the power, direct or indirect, to cause the
- * direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
- * fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such
- * entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted
- * by this License. "Source" form shall mean the preferred form for making modifications, including
- * but not limited to software source code, documentation source, and configuration files. "Object"
- * form shall mean any form resulting from mechanical transformation or translation of a Source
- * form, including but not limited to compiled object code, generated documentation, and conversions
- * to other media types. "Work" shall mean the work of authorship, whether in Source or Object form,
- * made available under the License, as indicated by a copyright notice that is included in or
- * attached to the work (an example is provided in the Appendix below). "Derivative Works" shall
- * mean any work, whether in Source or Object form, that is based on (or derived from) the Work and
- * for which the editorial revisions, annotations, elaborations, or other modifications represent,
- * as a whole, an original work of authorship. For the purposes of this License, Derivative Works
- * shall not include works that remain separable from, or merely link (or bind by name) to the
- * interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of
- * authorship, including the original version of the Work and any modifications or additions to that
- * Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in
- * the Work by the copyright owner or by an individual or Legal Entity authorized to submit on
- * behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of
- * electronic, verbal, or written communication sent to the Licensor or its representatives,
- * including but not limited to communication on electronic mailing lists, source code control
- * systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the
- * purpose of discussing and improving the Work, but excluding communication that is conspicuously
- * marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
- * "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a
- * Contribution has been received by Licensor and subsequently incorporated within the Work. 2.
- * Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor
- * hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- * copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform,
- * sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant
- * of Patent License. Subject to the terms and conditions of this License, each Contributor hereby
- * grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except
- * as stated in this section) patent license to make, have made, use, offer to sell, sell, import,
- * and otherwise transfer the Work, where such license applies only to those patent claims
- * licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or
- * by combination of their Contribution(s) with the Work to which such Contribution(s) was
- * submitted. If You institute patent litigation against any entity (including a cross-claim or
- * counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work
- * constitutes direct or contributory patent infringement, then any patent licenses granted to You
- * under this License for that Work shall terminate as of the date such litigation is filed. 4.
- * Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof
- * in any medium, with or without modifications, and in Source or Object form, provided that You
- * meet the following conditions: (a) You must give any other recipients of the Work or Derivative
- * Works a copy of this License; and (b) You must cause any modified files to carry prominent
- * notices stating that You changed the files; and (c) You must retain, in the Source form of any
- * Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices
- * from the Source form of the Work, excluding those notices that do not pertain to any part of the
- * Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution,
- * then any Derivative Works that You distribute must include a readable copy of the attribution
- * notices contained within such NOTICE file, excluding those notices that do not pertain to any
- * part of the Derivative Works, in at least one of the following places: within a NOTICE text file
- * distributed as part of the Derivative Works; within the Source form or documentation, if provided
- * along with the Derivative Works; or, within a display generated by the Derivative Works, if and
- * wherever such third-party notices normally appear. The contents of the NOTICE file are for
- * informational purposes only and do not modify the License. You may add Your own attribution
- * notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE
- * text from the Work, provided that such additional attribution notices cannot be construed as
- * modifying the License. You may add Your own copyright statement to Your modifications and may
- * provide additional or different license terms and conditions for use, reproduction, or
- * distribution of Your modifications, or for any such Derivative Works as a whole, provided Your
- * use, reproduction, and distribution of the Work otherwise complies with the conditions stated in
- * this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any
- * Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be
- * under the terms and conditions of this License, without any additional terms or conditions.
- * Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate
- * license agreement you may have executed with Licensor regarding such Contributions. 6.
- * Trademarks. This License does not grant permission to use the trade names, trademarks, service
- * marks, or product names of the Licensor, except as required for reasonable and customary use in
- * describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer
- * of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the
- * Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR
- * CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties
- * or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE.
- * You are solely responsible for determining the appropriateness of using or redistributing the
- * Work and assume any risks associated with Your exercise of permissions under this License. 8.
- * Limitation of Liability. In no event and under no legal theory, whether in tort (including
- * negligence), contract, or otherwise, unless required by applicable law (such as deliberate and
- * grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for
- * damages, including any direct, indirect, special, incidental, or consequential damages of any
- * character arising as a result of this License or out of the use or inability to use the Work
- * (including but not limited to damages for loss of goodwill, work stoppage, computer failure or
- * malfunction, or any and all other commercial damages or losses), even if such Contributor has
- * been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability.
- * While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a
- * fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights
- * consistent with this License. However, in accepting such obligations, You may act only on Your
- * own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if
- * You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by,
- * or claims asserted against, such Contributor by reason of your accepting any such warranty or
- * additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to
- * your work. To apply the Apache License to your work, attach the following boilerplate notice,
- * with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't
- * include the brackets!)  The text should be enclosed in the appropriate comment syntax for the
- * file format. We also recommend that a file or class name and description of purpose be included
- * on the same "printed page" as the copyright notice for easier identification within third-party
- * archives. Copyright 2016 Alibaba Group Licensed under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the License. You may obtain a
- * copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable
- * law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
- * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License
- * for the specific language governing permissions and limitations under the License.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 package com.taobao.weex.websocket;
 
diff --git a/android/weex_debug/src/main/res/drawable/leak_canary_toast_background.xml b/android/weex_debug/src/main/res/drawable/leak_canary_toast_background.xml
index 7e4cc60..1a74161 100644
--- a/android/weex_debug/src/main/res/drawable/leak_canary_toast_background.xml
+++ b/android/weex_debug/src/main/res/drawable/leak_canary_toast_background.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
   <solid android:color="#cc000000"/>
   <corners android:radius="16dp"/>
diff --git a/android/weex_debug/src/main/res/drawable/prettyfish_bg_floatmenu.xml b/android/weex_debug/src/main/res/drawable/prettyfish_bg_floatmenu.xml
index 3cbf801..92ad874 100644
--- a/android/weex_debug/src/main/res/drawable/prettyfish_bg_floatmenu.xml
+++ b/android/weex_debug/src/main/res/drawable/prettyfish_bg_floatmenu.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
     <solid android:color="@color/pf_bg_aa_black"/>
     <corners android:radius="@dimen/bg_corner"/>
diff --git a/android/weex_debug/src/main/res/drawable/prettyfish_coordrect.xml b/android/weex_debug/src/main/res/drawable/prettyfish_coordrect.xml
index e88a336..0e57a65 100644
--- a/android/weex_debug/src/main/res/drawable/prettyfish_coordrect.xml
+++ b/android/weex_debug/src/main/res/drawable/prettyfish_coordrect.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
     <!-- 线的宽度,颜色 -->
diff --git a/android/weex_debug/src/main/res/drawable/prettyfish_fab.xml b/android/weex_debug/src/main/res/drawable/prettyfish_fab.xml
index 41db4ae..6e47d54 100644
--- a/android/weex_debug/src/main/res/drawable/prettyfish_fab.xml
+++ b/android/weex_debug/src/main/res/drawable/prettyfish_fab.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <bitmap xmlns:android="http://schemas.android.com/apk/res/android"
         android:gravity="center"
         android:src="@drawable/prettyfish_icon_fab" /><!-- From: file:/Users/ricky/Desktop/ricky/allgitcode/prettyfish/prettyfish_base/src/main/res/drawable/prettyfish_fab.xml -->
\ No newline at end of file
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_coordview.xml b/android/weex_debug/src/main/res/layout/prettyfish_coordview.xml
index 3cd00bc..7c6bf8f 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_coordview.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_coordview.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal" android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_coverview.xml b/android/weex_debug/src/main/res/layout/prettyfish_coverview.xml
index c650bad..6a30269 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_coverview.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_coverview.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_datachart.xml b/android/weex_debug/src/main/res/layout/prettyfish_datachart.xml
index d24b23b..d792471 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_datachart.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_datachart.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_datafilelist.xml b/android/weex_debug/src/main/res/layout/prettyfish_datafilelist.xml
index 46f5d6b..edbfd17 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_datafilelist.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_datafilelist.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_datafilerow.xml b/android/weex_debug/src/main/res/layout/prettyfish_datafilerow.xml
index 80b725c..18bd684 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_datafilerow.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_datafilerow.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_datarow.xml b/android/weex_debug/src/main/res/layout/prettyfish_datarow.xml
index 74ee6ed..99c27c6 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_datarow.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_datarow.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_detail.xml b/android/weex_debug/src/main/res/layout/prettyfish_detail.xml
index 39d1c24..4be4c88 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_detail.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_detail.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical" android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_filedetail.xml b/android/weex_debug/src/main/res/layout/prettyfish_filedetail.xml
index 08ba90c..fe00288 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_filedetail.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_filedetail.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical" android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_filelist.xml b/android/weex_debug/src/main/res/layout/prettyfish_filelist.xml
index d4e056e..6822562 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_filelist.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_filelist.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical" android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_filerow.xml b/android/weex_debug/src/main/res/layout/prettyfish_filerow.xml
index 61442b0..35c223a 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_filerow.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_filerow.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_floatmenu_item.xml b/android/weex_debug/src/main/res/layout/prettyfish_floatmenu_item.xml
index f31d1ab..006adf2 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_floatmenu_item.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_floatmenu_item.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/ll_menuitem"
     android:layout_width="wrap_content"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_floatmenuview.xml b/android/weex_debug/src/main/res/layout/prettyfish_floatmenuview.xml
index e8a8a62..f0877fb 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_floatmenuview.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_floatmenuview.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_recordview.xml b/android/weex_debug/src/main/res/layout/prettyfish_recordview.xml
index 68359a0..5b33fee 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_recordview.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_recordview.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal" android:layout_width="match_parent"
     android:layout_height="match_parent"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_table.xml b/android/weex_debug/src/main/res/layout/prettyfish_table.xml
index a0ddc04..52e92ec 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_table.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_table.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_tableitem.xml b/android/weex_debug/src/main/res/layout/prettyfish_tableitem.xml
index dfeec2b..d98968f 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_tableitem.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_tableitem.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="horizontal"
     android:descendantFocusability="blocksDescendants"
diff --git a/android/weex_debug/src/main/res/layout/prettyfish_uedgird.xml b/android/weex_debug/src/main/res/layout/prettyfish_uedgird.xml
index 38fe20c..4a3cbe8 100644
--- a/android/weex_debug/src/main/res/layout/prettyfish_uedgird.xml
+++ b/android/weex_debug/src/main/res/layout/prettyfish_uedgird.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:custom="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
diff --git a/android/weex_debug/src/main/res/values/attrs.xml b/android/weex_debug/src/main/res/values/attrs.xml
index 260b1bc..a3781c1 100644
--- a/android/weex_debug/src/main/res/values/attrs.xml
+++ b/android/weex_debug/src/main/res/values/attrs.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <declare-styleable name="RulerView">
         <attr format="color" name="rulerColor"/>
diff --git a/android/weex_debug/src/main/res/values/colors.xml b/android/weex_debug/src/main/res/values/colors.xml
index 850e0d7..c3fedb9 100644
--- a/android/weex_debug/src/main/res/values/colors.xml
+++ b/android/weex_debug/src/main/res/values/colors.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <color name="fab_bg_action">#AAFF0000</color>
     <color name="fab_bg_click_b">#AAAA0000</color>
diff --git a/android/weex_debug/src/main/res/values/dimens.xml b/android/weex_debug/src/main/res/values/dimens.xml
index 368ce2b..940a55d 100644
--- a/android/weex_debug/src/main/res/values/dimens.xml
+++ b/android/weex_debug/src/main/res/values/dimens.xml
@@ -1,4 +1,22 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <dimen name="bg_corner">12dp</dimen>
     <dimen name="pf_font_padding">16dp</dimen>
diff --git a/android/weex_debug/src/main/res/values/strings.xml b/android/weex_debug/src/main/res/values/strings.xml
index e3d04a2..2238691 100644
--- a/android/weex_debug/src/main/res/values/strings.xml
+++ b/android/weex_debug/src/main/res/values/strings.xml
@@ -1,3 +1,21 @@
+<!-- 
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
 <resources>
     <string name="app_name">Weex_Debug</string>
 
diff --git a/android/weex_debug/src/test/java/com/taobao/weex/ExampleUnitTest.java b/android/weex_debug/src/test/java/com/taobao/weex/ExampleUnitTest.java
index 097d7d6..47d96af 100644
--- a/android/weex_debug/src/test/java/com/taobao/weex/ExampleUnitTest.java
+++ b/android/weex_debug/src/test/java/com/taobao/weex/ExampleUnitTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package com.taobao.weex;
 
 import org.junit.Test;
@@ -13,4 +31,4 @@
   public void addition_isCorrect() throws Exception {
     assertEquals(4, 2 + 2);
   }
-}
\ No newline at end of file
+}
diff --git a/bin/dist-vue.sh b/bin/dist-vue.sh
new file mode 100644
index 0000000..7edc254
--- /dev/null
+++ b/bin/dist-vue.sh
@@ -0,0 +1,43 @@
+#!/user/bin/env bash
+
+echo ''
+# echo ' => cping files for vue dist...'
+
+base_dir=./packages/weex-vue-render
+src_dir=./html5
+vue_dir=${src_dir}/render/vue
+
+# browser_dir=${src_dir}/render/browser
+# shared_dir=${src_dir}/shared
+
+# dist_dir=./packages/weex-vue-render/src
+
+# rm -rf ${dist_dir}
+
+# mkdir $dist_dir
+# mkdir $dist_dir/render
+
+# cp -fR ${browser_dir} ${dist_dir}/render/
+# cp -fR ${vue_dir} ${dist_dir}/render/
+# cp -fR ${shared_dir} ${dist_dir}/
+
+echo " => cp READEME.md to dist path..."
+
+cp -f ${vue_dir}/README.md ${base_dir}/
+
+echo " => writing version number into weex-vue-render's package.json..."
+
+# get version of weex-html5 from subversion of main package.json.
+pkg=./package.json
+dist_pkg=${base_dir}/package.json
+version=$( grep -o -E "\"vue-render\": \"([0-9.]+)\"" ${pkg} | grep -o -E "[0-9.]+" )
+echo " => version:" ${version}
+
+# update package.json for weex-html5 package.
+cat ${dist_pkg} | sed "s/\"version\": \"[0-9.]*\"/\"version\": \"${version}\"/g" > ${base_dir}/tmp.json
+# cat ${dist_pkg} | sed "s/\"version\": \"[0-9.]*\"/\"version\": \"${version}\"/g;s/\"transformer\": \"[>=< 0-9.]*\"/\"transformer\": \"${transformerVersion}\"/g" > ${base_dir}/tmp.json
+rm ${dist_pkg}
+mv ${base_dir}/tmp.json ${dist_pkg}
+
+echo ' => writing finished.'
+echo ''
diff --git a/build/build.js b/build/build.js
index f9b6868..b74f102 100644
--- a/build/build.js
+++ b/build/build.js
@@ -1,3 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+"use strict"
+
 const fs = require('fs')
 const path = require('path')
 const gzip = require('zlib').createGzip()
diff --git a/build/config.js b/build/config.js
index 672edfd..092df5d 100644
--- a/build/config.js
+++ b/build/config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 const path = require('path')
 const json = require('rollup-plugin-json')
 const eslint = require('rollup-plugin-eslint')
@@ -6,6 +24,7 @@
 const nodeResolve = require('rollup-plugin-node-resolve')
 const uglify = require('rollup-plugin-uglify')
 const commonjs = require('rollup-plugin-commonjs')
+const flow = require('rollup-plugin-flow-no-whitespace')
 const buble = require('rollup-plugin-buble')
 const subversion = require('../package.json').subversion
 
@@ -63,8 +82,8 @@
   'weex-vue-render': {
     moduleName: 'WeexVueRender',
     entry: absolute('html5/render/vue/index.js'),
-    dest: absolute('packages/weex-vue-render/index.js'),
-    banner: `/* 'WEEX VUE RENDER ${subversion.vueRender}, Build ${now()}. */\n\n`,
+    dest: absolute('packages/weex-vue-render/dist/index.js'),
+    banner: `console.log('START WEEX VUE RENDER: ${subversion['vue-render']}, Build ${now()}.');\n\n`,
     format: 'umd',
     plugins: [
       postcss(),
@@ -72,6 +91,9 @@
         jsnext: true,
         main: true,
         browser: true
+      }),
+      replace({
+        'process.env.WEEX_VERSION': subversion['vue-render']
       })
     ]
   }
@@ -94,6 +116,7 @@
         'process.env.NODE_DEBUG': false
       }),
       commonjs(),
+      flow(/*{ pretty: true }*/),
       buble()
     ])
   }
@@ -102,6 +125,10 @@
     config.plugins.push(uglify())
   }
   else {
+    /**
+     * rollup-plugin-flow will cause soucemap problem.
+     * use rollup-plugin-flow-no-whitespace can fixe this.
+     */
     config.sourceMap = 'inline'
     config.plugins.unshift(eslint({ exclude: ['**/*.json', '**/*.css'] }))
   }
diff --git a/build/examples-banner-plugin.js b/build/examples-banner-plugin.js
new file mode 100644
index 0000000..414cf03
--- /dev/null
+++ b/build/examples-banner-plugin.js
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict'
+
+const ConcatSource = require('webpack/lib/ConcatSource')
+
+const isProd = process.env.NODE_ENV === 'production'
+const dateFormat = require('dateformat')
+const appVersion = require('../package.json').version
+const now = new Date()
+const packTime = dateFormat(now, 'yyyymmddHHMMss')
+const date = dateFormat(now, 'yyyymmdd')
+const childProcess = require('child_process')
+const hash = childProcess.execSync('git rev-parse --short HEAD').toString().trim()
+const brash = childProcess.execSync('git rev-parse --abbrev-ref HEAD').toString().trim()
+
+const crypto = require('crypto')
+function md5 (text) {
+  return crypto.createHash('md5').update(text, 'utf8').digest('hex')
+}
+
+function generateBanner (digest) {
+  const tmp = ` * {
+ *   version: "${appVersion}.${date}${isProd ? '-release' : ''}",
+ *   create: "${packTime}",
+ *   git: "${brash}--${hash}",
+ *   digest: "${digest}"
+ * }
+ !*/
+`
+  const length = tmp.length
+  return `/*!${length}
+${tmp}`
+}
+
+function BannerWebpackPlugin (options) {
+  this.options = options || {}
+}
+
+BannerWebpackPlugin.prototype.apply = function (compiler) {
+  compiler.plugin('emit', (compilation, callback) => {
+    // const chunkKey = Object.keys(this.chunks)
+    compilation.chunks.map((chunk) => {
+      const distChunk = chunk.files[0]
+
+      const source = compilation.assets[distChunk].source()
+      compilation.assets[distChunk].source = () => {
+        return source
+      }
+      compilation.assets[distChunk] = new ConcatSource(generateBanner(md5(source)), compilation.assets[distChunk])
+    })
+    callback()
+  })
+}
+
+BannerWebpackPlugin.prototype.findAsset = function (compilation, chunk) {
+  const chunks = compilation.chunks
+  for (let i = 0, len = chunks.length; i < len; i++) {
+    if (chunks[i].name === chunk) {
+      return chunks[i].files[0]
+    }
+  }
+
+  return null
+}
+
+module.exports = BannerWebpackPlugin
diff --git a/build/karma.vue.conf.js b/build/karma.vue.conf.js
index d71f579..811dbe3 100644
--- a/build/karma.vue.conf.js
+++ b/build/karma.vue.conf.js
@@ -1,44 +1,104 @@
-var webpackConfig = require('./webpack.vue.config')
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+var rollupConfig = require('./config')('weex-vue-render', true)
+var path = require('path')
+var flow = require('rollup-plugin-flow')
 
-delete webpackConfig.entry
-delete webpackConfig.output
-
-webpackConfig.babel = {
-  plugins: [
-    ['coverage', { ignore: ['test/'] }]
-  ]
+function absolute (pa) {
+  return path.resolve(__dirname, pa)
 }
 
+var removeConfigs = ['entry', 'dest', 'banner']
+var removePlugins = ['eslint', 'uglify', 'flow-remove-type']
+
+removeConfigs.forEach(cfg => {
+  delete rollupConfig[cfg]
+})
+
+var plugins = rollupConfig.plugins.slice()
+rollupConfig.plugins = []
+
+for (var i = 0, l = plugins.length; i < l; i++) {
+  var plg = plugins[i]
+  var isRemove = false
+  if (removePlugins.length <= 0) {
+    rollupConfig.plugins.push(plg)
+  }
+  removePlugins.forEach(rp => {
+    if (plg.name === rp) {
+      isRemove = true
+    }
+  })
+  if (!isRemove) { rollupConfig.plugins.push(plg) }
+}
+
+/**
+ * rollup-plugin-flow-no-whiitespace cause fatial error.
+ * use rollup-plugin-flow instead, since no soucemap needed, it's acceptable for extra whitespaces.
+ */
+rollupConfig.plugins.splice(-2, 1, flow())
+
+rollupConfig.format = 'iife'
+rollupConfig.sourceMap = 'inline'
+
 module.exports = function (config) {
   config.set({
-    frameworks: ['mocha'],
+    frameworks: ['mocha', 'sinon-chai'],
     browsers: ['PhantomJS'],
     files: [
-      '../html5/test/render/index.js'
+      // '../html5/test/render/vue/components/*.js'
+      '../html5/test/render/vue/**/*.js'
     ],
 
+    exclude: [
+      '../html5/test/render/vue/helper.js',
+      '../html5/test/render/vue/helper/*.js',
+      '../html5/test/render/vue/vender/**/*.js',
+      '../html5/test/render/vue/data/**/*.js'
+    ],
+
+    // singleRun: false,
     singleRun: true,
 
     reporters: ['mocha', 'coverage'],
     coverageReporter: {
       reporters: [
-        { type: 'html', dir: '../coverage', subdir: 'vue-renderer' },
-        { type: 'text-summary', dir: '../coverage', subdir: 'vue-renderer' }
+        { type: 'html', dir: absolute('../coverage'), subdir: 'vue-renderer' },
+        { type: 'text-summary', dir: absolute('../coverage'), subdir: 'vue-renderer' }
       ]
     },
 
     preprocessors: {
-      '../html5/test/**/*.js': ['webpack', 'sourcemap']
+      '../html5/test/**/*.js': ['rollup'],
+      '../html5/test/**/!(components|examples|core)/*.js': ['rollup', 'coverage']
     },
-    webpack: webpackConfig,
+    rollupPreprocessor: rollupConfig,
 
     plugins: [
       'karma-coverage',
       'karma-mocha',
       'karma-mocha-reporter',
       'karma-phantomjs-launcher',
-      'karma-sourcemap-loader',
-      'karma-webpack'
+      'karma-rollup-preprocessor',
+      'karma-sinon-chai'
+      // 'karma-sourcemap-loader',
+      // 'karma-webpack'
     ]
   })
 }
diff --git a/build/nightwatch.config.js b/build/nightwatch.config.js
index 6b0a926..0c25153 100644
--- a/build/nightwatch.config.js
+++ b/build/nightwatch.config.js
@@ -1,4 +1,21 @@
-// http://nightwatchjs.org/guide#settings-file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 module.exports = {
   'src_folders': ['html5/test/e2e/specs'],
   'output_folder': 'html5/test/e2e/reports',
diff --git a/build/rollup.browser.common.config.js b/build/rollup.browser.common.config.js
index f66cd69..dd8c41c 100644
--- a/build/rollup.browser.common.config.js
+++ b/build/rollup.browser.common.config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { rollup } from 'rollup'
 import postcss from 'rollup-plugin-postcss'
 import json from 'rollup-plugin-json'
diff --git a/build/webpack.ci.config.js b/build/webpack.ci.config.js
new file mode 100644
index 0000000..f238389
--- /dev/null
+++ b/build/webpack.ci.config.js
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+var path = require('path');
+var fs = require('fs');
+var webpack = require('webpack');
+
+var entry = {};
+var bannerExcludeFiles = [];
+
+function walk(dir) {
+  dir = dir || '.'
+  var directory = path.join(__dirname, '../test/pages', dir);
+  fs.readdirSync(directory)
+    .forEach(function(file) {
+      var fullpath = path.join(directory, file);
+      var stat = fs.statSync(fullpath);
+      var extname = path.extname(fullpath);
+      if (stat.isFile() && (extname === '.we' || extname === '.vue')) {
+        var name = path.join('test', 'build', dir, path.basename(file, extname));
+        entry[name] = fullpath + '?entry=true';
+        if (extname === '.we') {
+          bannerExcludeFiles.push(name + '.js')
+        }
+      } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
+        var subdir = path.join(dir, file);
+        walk(subdir);
+      }
+    });
+}
+
+walk();
+
+var banner = '// { "framework": "Vue" }\n'
+
+var bannerPlugin = new webpack.BannerPlugin(banner, {
+  raw: true,
+  exclude: bannerExcludeFiles
+})
+
+module.exports = {
+  entry: entry,
+  output : {
+    path: '.',
+    filename: '[name].js'
+  },
+  module: {
+    loaders: [
+      {
+        test: /\.(we|vue)(\?[^?]+)?$/,
+        loader: 'weex'
+      }
+    ]
+  },
+  plugins: [bannerPlugin]
+}
diff --git a/build/webpack.ci.web.config.js b/build/webpack.ci.web.config.js
new file mode 100644
index 0000000..94f8f39
--- /dev/null
+++ b/build/webpack.ci.web.config.js
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+var path = require('path');
+var fs = require('fs-extra');
+var webpack = require('webpack');
+
+var entry = {};
+var bannerExcludeFiles = [];
+var webSrcDirectory = path.join(__dirname, '../test/build-web/web-entry');
+
+function getEntryFileContent (entryPath, vueFilePath) {
+  const relativePath = path.relative(path.join(entryPath, '../'), vueFilePath);
+  return 'var App = require(\'' + relativePath + '\')\n'
+    + 'App.el = \'#root\'\n'
+    + 'new Vue(App)\n'
+}
+
+function walk(dir) {
+  dir = dir || '.';
+  var directory = path.join(__dirname, '../test/pages', dir);
+  var entryDirectory = path.join(webSrcDirectory, dir);
+  fs.readdirSync(directory)
+    .forEach(function(file) {
+      var fullpath = path.join(directory, file);
+      var stat = fs.statSync(fullpath);
+      var extname = path.extname(fullpath);
+      if (stat.isFile() && extname === '.vue') {
+        var entryFile = path.join(entryDirectory, path.basename(file, extname) + '.js');
+        fs.outputFileSync(entryFile, getEntryFileContent(entryFile, fullpath));
+        var name = path.join('test', 'build-web/', /*path.relative('vue', dir)*/dir, path.basename(file, extname));
+        entry[name] = entryFile + '?entry=true';
+      } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
+        var subdir = path.join(dir, file);
+        walk(subdir);
+      }
+    });
+}
+
+walk();
+
+var banner = '// NOTE: for vue2.0 and platform:web only.\n'
+
+var bannerPlugin = new webpack.BannerPlugin(banner, {
+  raw: true,
+  exclude: bannerExcludeFiles
+})
+
+module.exports = {
+  entry: entry,
+  // entry: {
+    // 'examples/build/web/vue-bundle': path.resolve('examples/vue', 'entry.js')
+  // },
+  output: {
+    path: '.',
+    filename: '[name].js'
+  },
+  module: {
+    loaders: [
+      {
+        test: /\.js$/,
+        loaders: ['babel-loader'],
+        exclude: /node_modules/
+      }, {
+        test: /\.vue(\?[^?]+)?$/,
+        loaders: ['vue-loader']
+      }
+    ]
+  },
+  plugins: [bannerPlugin]
+}
diff --git a/build/webpack.deprecatedmacacatest.config.js b/build/webpack.deprecatedmacacatest.config.js
new file mode 100644
index 0000000..f238389
--- /dev/null
+++ b/build/webpack.deprecatedmacacatest.config.js
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+var path = require('path');
+var fs = require('fs');
+var webpack = require('webpack');
+
+var entry = {};
+var bannerExcludeFiles = [];
+
+function walk(dir) {
+  dir = dir || '.'
+  var directory = path.join(__dirname, '../test/pages', dir);
+  fs.readdirSync(directory)
+    .forEach(function(file) {
+      var fullpath = path.join(directory, file);
+      var stat = fs.statSync(fullpath);
+      var extname = path.extname(fullpath);
+      if (stat.isFile() && (extname === '.we' || extname === '.vue')) {
+        var name = path.join('test', 'build', dir, path.basename(file, extname));
+        entry[name] = fullpath + '?entry=true';
+        if (extname === '.we') {
+          bannerExcludeFiles.push(name + '.js')
+        }
+      } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
+        var subdir = path.join(dir, file);
+        walk(subdir);
+      }
+    });
+}
+
+walk();
+
+var banner = '// { "framework": "Vue" }\n'
+
+var bannerPlugin = new webpack.BannerPlugin(banner, {
+  raw: true,
+  exclude: bannerExcludeFiles
+})
+
+module.exports = {
+  entry: entry,
+  output : {
+    path: '.',
+    filename: '[name].js'
+  },
+  module: {
+    loaders: [
+      {
+        test: /\.(we|vue)(\?[^?]+)?$/,
+        loader: 'weex'
+      }
+    ]
+  },
+  plugins: [bannerPlugin]
+}
diff --git a/build/webpack.examples.config.js b/build/webpack.examples.config.js
index 29c3048..5d8b25d 100644
--- a/build/webpack.examples.config.js
+++ b/build/webpack.examples.config.js
@@ -1,6 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 var path = require('path');
 var fs = require('fs');
 var webpack = require('webpack');
+// var bannerWebpackPlugin = require('./examples-banner-plugin')
 
 var entry = {};
 var bannerExcludeFiles = [];
diff --git a/build/webpack.examples.web.config.js b/build/webpack.examples.web.config.js
index 0f8fc64..5f329ed 100644
--- a/build/webpack.examples.web.config.js
+++ b/build/webpack.examples.web.config.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 var path = require('path');
 var fs = require('fs-extra');
 var webpack = require('webpack');
@@ -45,9 +64,6 @@
 
 module.exports = {
   entry: entry,
-  // entry: {
-    // 'examples/build/web/vue-bundle': path.resolve('examples/vue', 'entry.js')
-  // },
   output: {
     path: '.',
     filename: '[name].js'
@@ -64,5 +80,20 @@
       }
     ]
   },
+  // vue: {
+  //   /**
+  //    * important! should use postTransformNode to add $processStyle for
+  //    * inline style prefixing.
+  //    */
+  //   compilerModules: [
+  //     {
+  //       postTransformNode: el => {
+  //         el.staticStyle = `$processStyle(${el.staticStyle})`
+  //         el.styleBinding = `$processStyle(${el.styleBinding})`
+  //       }
+  //     }
+  //   ],
+  //   postcss: [require('autoprefixer')()]
+  // },
   plugins: [bannerPlugin]
 }
diff --git a/build/webpack.macacatest.config.js b/build/webpack.macacatest.config.js
deleted file mode 100644
index ba154a8..0000000
--- a/build/webpack.macacatest.config.js
+++ /dev/null
@@ -1,57 +0,0 @@
-var path = require('path');
-var fs = require('fs');
-var webpack = require('webpack');
-
-var entry = {};
-var bannerExcludeFiles = [];
-
-function walk(dir) {
-  dir = dir || '.'
-  var directory = path.join(__dirname, '../test/pages', dir);
-  fs.readdirSync(directory)
-    .forEach(function(file) {
-      var fullpath = path.join(directory, file);
-      var stat = fs.statSync(fullpath);
-      var extname = path.extname(fullpath);
-      if (stat.isFile() && (extname === '.we' || extname === '.vue')) {
-        var name = path.join('test', 'build', dir, path.basename(file, extname));
-        entry[name] = fullpath + '?entry=true';
-        if (extname === '.we') {
-          bannerExcludeFiles.push(name + '.js')
-        }
-      } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
-        var subdir = path.join(dir, file);
-        walk(subdir);
-      }
-    });
-}
-
-walk();
-
-var banner = '// { "framework": "Vue" }\n'
-
-var bannerPlugin = new webpack.BannerPlugin(banner, {
-  raw: true,
-  exclude: bannerExcludeFiles
-})
-
-module.exports = {
-  entry: entry,
-  output : {
-    path: '.',
-    filename: '[name].js'
-  },
-  module: {
-    loaders: [
-      {
-        test: /\.we(\?[^?]+)?$/,
-        loader: 'weex'
-      },
-      {
-        test: /\.vue(\?[^?]+)?$/,
-        loader: 'weex-vue-loader'
-      }
-    ]
-  },
-  plugins: [bannerPlugin]
-}
diff --git a/build/webpack.test.config.js b/build/webpack.test.config.js
index 5dfd419..b9d830f 100644
--- a/build/webpack.test.config.js
+++ b/build/webpack.test.config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 var path = require('path');
 var fs = require('fs');
 
diff --git a/build/webpack.test.web.config.js b/build/webpack.test.web.config.js
new file mode 100644
index 0000000..64e0009
--- /dev/null
+++ b/build/webpack.test.web.config.js
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+var path = require('path');
+var fs = require('fs-extra');
+var webpack = require('webpack');
+
+var entry = {};
+// var bannerExcludeFiles = [];
+var webSrcDirectory = path.join(__dirname, '../html5/test/render/vue/data/dotvue');
+
+// function getEntryFileContent (entryPath, vueFilePath) {
+//   const relativePath = path.relative(path.join(entryPath, '../'), vueFilePath);
+//   return 'var App = require(\'' + relativePath + '\')\n'
+//     + 'App.el = \'#root\'\n'
+//     + 'new Vue(App)\n'
+// }
+
+function walk(dir) {
+  dir = dir || '.';
+  var directory = path.join(__dirname, '../html5/test/render/vue/data', dir);
+  var entryDirectory = path.join(webSrcDirectory, dir);
+  fs.readdirSync(directory)
+    .forEach(function(file) {
+      var fullpath = path.join(directory, file);
+      var stat = fs.statSync(fullpath);
+      var extname = path.extname(fullpath);
+      if (stat.isFile() && extname === '.vue') {
+        // var entryFile = path.join(entryDirectory, path.basename(file, extname) + '.js');
+        // fs.outputFileSync(entryFile, getEntryFileContent(entryFile, fullpath));
+        var name = path.join('html5/test/render/vue/data', 'build', dir, path.basename(file, extname));
+        entry[name] = [fullpath]
+      } else if (stat.isDirectory() && file !== 'build' && file !== 'include') {
+        var subdir = path.join(dir, file);
+        walk(subdir);
+      }
+    });
+}
+
+walk();
+
+// var banner = '// NOTE: for vue2.0 and platform:web only.\n'
+// var bannerPlugin = new webpack.BannerPlugin({
+//   banner,
+//   raw: true,
+//   exclude: bannerExcludeFiles
+// })
+
+module.exports = {
+  entry: entry,
+  output: {
+    path: path.resolve(__dirname, '../'),
+    libraryTarget: 'umd',
+    filename: '[name].js'
+  },
+  module: {
+    loaders: [
+      {
+        test: /\.js$/,
+        loaders: ['babel-loader'],
+        exclude: /node_modules/
+      }, {
+        test: /\.vue(\?[^?]+)?$/,
+        loaders: ['vue-loader']
+      }
+    ]
+  },
+  // vue: {
+    /**
+     * important! should use postTransformNode to add $processStyle for
+     * inline style prefixing.
+     */
+    // compilerModules: [
+    //   {
+    //     postTransformNode: el => {
+    //       el.staticStyle = `$processStyle(${el.staticStyle})`
+    //       el.styleBinding = `$processStyle(${el.styleBinding})`
+    //     }
+    //   }
+    // ],
+    // postcss: [require('autoprefixer')()]
+  // }
+  // plugins: [bannerPlugin]
+}
diff --git a/build/webpack.vue.config.js b/build/webpack.vue.config.js
index 1bf6c86..f39a90b 100644
--- a/build/webpack.vue.config.js
+++ b/build/webpack.vue.config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 var fs = require('fs')
 var path = require('path')
 var webpack = require('webpack')
diff --git a/circle.yml b/circle.yml
deleted file mode 100644
index d0bcb86..0000000
--- a/circle.yml
+++ /dev/null
@@ -1,37 +0,0 @@
-machine:
-  pre:
-    - sudo service mongodb stop
-    - sudo service mysql stop
-    - sudo service postgresql stop
-    - sudo service rabbitmq-server stop
-    - sudo service couchdb stop
-  node:
-   version: 7
-  java:
-    version: 'oraclejdk8'
-test:
-  override:
-    - npm run build
-    - npm run test
-    - cd android && ./run-ci.sh
-  post:
-    - cp -r android/playground/app/build/outputs $CIRCLE_ARTIFACTS/playground # playground artifacts
-    - cp -r android/sdk/build/reports $CIRCLE_ARTIFACTS/sdk_reports
-
-dependencies:
-  cache_directories:
-    - "node_modules"
-    - ~/.gradle
-    - ~/.m2
-
-notify:
-  webhooks:
-    # gitter
-    - url: https://webhooks.gitter.im/e/f1030e2836f6c2beb41c
-
-general:
-  branches:
-    ignore:
-      - gh-pages # ignore weex website
-      - doc      # ignore doc
-      - /doc-.*/ # ignore doc
diff --git a/dangerfile.js b/dangerfile.js
new file mode 100644
index 0000000..114571d
--- /dev/null
+++ b/dangerfile.js
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { danger, fail, warn } from "danger";
+import fs from "fs";
+import path from 'path';
+
+// Make sure there are changelog entries
+// const hasChangelog = danger.git.modified_files.includes("changelog.md")
+// if (!hasChangelog) { fail("No Changelog changes!") }
+
+const jsFiles = danger.git.created_files.filter(path => path.endsWith("js"));
+
+function absolute (relPath) {
+  return path.resolve(__dirname, relPath)
+}
+
+const flowIgnorePaths = [
+  'node_modules',
+  'test',
+  'build',
+  'examples',
+  'doc',
+  'android',
+  'ios',
+  'bin',
+  'dist',
+  'flow-typed'
+].map(function (rel) {
+  return absolute(rel)
+});
+
+// new js files should have `@flow` at the top
+const unFlowedFiles = jsFiles.filter(filepath => {
+  let i = 0
+  const len = flowIgnorePaths.length
+  while (i < len) {
+    const p = flowIgnorePaths[i]
+    if (absolute(filepath).indexOf(p) > -1) {
+      // ignore this file because it's in the flow-ignore-paths.
+      return false;
+    }
+    i++
+  }
+  const content = fs.readFileSync(filepath);
+  return !content.includes("@flow");
+});
+
+if (unFlowedFiles.length > 0) {
+  warn(
+    `These new JS files do not have Flow enabled: ${unFlowedFiles.join(", ")}`
+  );
+}
+
+// Error or Warn when delete public interface
+var methion_break_change = false;
+for (let c of danger.git.commits) {
+  // console.log("msg:" + c.message);
+  if (c.message && c.message.match(/break\s+change/i)) {
+    methion_break_change = true;
+    break;
+  }
+}
+
+// File name match any of these patterns will be ignored.
+function is_ignored_public_check(file) {
+  var ignored_break_change_pattern = [
+    /^android\/sdk\/src\/test\/.+/,
+     /^android\/playground\/.+/
+  ];
+  for (let p of ignored_break_change_pattern) {
+    if (file.match(p)) {
+      return true;
+    }
+  }
+  return false;
+}
+
+var has_app_changes = false;
+var has_test_changes = false;
+var codefiles = [];
+for (let file of danger.git.modified_files) {
+  console.log("check file:" + file);
+  if (file.match(/WeexSDK\/Source/)) {
+    has_app_changes = true;
+  } else if (file.match(/WeexSDKTests/)) {
+    has_test_changes = true;
+  }
+
+  if (!is_ignored_public_check(file) && file.endsWith(".java")) {
+    var diff = danger.git.diffForFile(file);
+    // console.log("diff:" + diff+ typeof diff);
+    if (diff && diff.match(/^-\s*?public\s+[\s\S]+$/gm)) {
+      if (methion_break_change) {
+        warn("Potential BREAK CHANGE. Modify public in   " + file);
+      } else {
+        warn(
+          "Potential BREAK CHANGE. Modify public in " +
+            file +
+            " without metion it in commit message. You'd better add 'break change' in your commit log. "
+        );
+      }
+    }
+  }
+
+  if (
+    file.endsWith(".h") ||
+    file.endsWith(".m") ||
+    file.endsWith(".mm") ||
+    file.endsWith(".java") ||
+    file.endsWith(".js")
+  ) {
+    codefiles.push(file);
+  }
+}
+if(danger.git.added_files){
+  for (let file of danger.git.added_files) {
+    if (
+      file.endsWith(".h") ||
+      file.endsWith(".m") ||
+      file.endsWith(".mm") ||
+      file.endsWith(".java") ||
+      file.endsWith(".js")
+    ) {
+      codefiles.push(file);
+    }
+  }
+}
+
+if (danger.git.lines_of_code > 500) {
+  warn("Big PR");
+}
+
+if (danger.git.lines_of_code > 100 && has_app_changes && !has_test_changes) {
+  warn("This PR may need tests.");
+}
+
+//check ios copyright
+//see scripts/rh/header.template
+const copyright_header_components = [
+  "Licensed to the Apache Software Foundation \\(ASF\\) under one",
+  "or more contributor license agreements.  See the NOTICE file",
+  "distributed with this work for additional information",
+  "regarding copyright ownership\\.  The ASF licenses this file",
+  'to you under the Apache License, Version 2\\.0 \\(the',
+  '"License"\\); you may not use this file except in compliance',
+  'with the License\\.  You may obtain a copy of the License at'
+];
+
+//path prefix
+const ignoreCopyrightVerifyPath = [
+  'test',
+  'android/playground/app/src/main/assets',
+  'android/sdk/assets',
+  'ios/playground/bundlejs',
+  'ios/sdk/WeexSDK/Resources',
+  'ios/sdk/WeexSDK/Sources/Layout'
+]
+
+codefiles.forEach(filepath => {
+  for(var i=ignoreCopyrightVerifyPath.length-1;i>=0;i--){
+    if(filepath.startsWith(ignoreCopyrightVerifyPath[i])){
+      return
+    }
+  }
+  const content = fs.readFileSync(filepath).toString();
+  for (const line of copyright_header_components) {
+    if (!content.match(new RegExp(line))) {
+      fail("Code file "+ filepath +" does not have the copyright header.");
+      return;
+    }
+  }
+});
diff --git a/doc/_config.yml b/doc/_config.yml
index adeb1fd..22a35f7 100644
--- a/doc/_config.yml
+++ b/doc/_config.yml
@@ -5,7 +5,7 @@
 # Site
 title: Weex
 subtitle:
-description:
+description: A framework for building Mobile cross-platform UIs. Different from a "web app", "HTML5 app", or "hybrid app", you can use Weex to build a real mobile app. The code that you write is relatively simple, because you can build native applications just using HTML, CSS, Javascript. But underneath, the core of the application is Objective-C or Java. At the same time, Weex will provide a lot of native components or modules for developers to use.
 author: Jinjiang
 language: 
   - en
@@ -322,3 +322,7 @@
   cn/doc/references/events/blur.html: cn/references/index.html
   cn/doc/references/events/input.html: cn/references/index.html
   cn/doc/references/events/focus.html: cn/references/index.html
+  cn/guide/tools/devtools.html: cn/guide/tools/toolkit.html
+  cn/guide/tools/weexpack.html: cn/guide/tools/toolkit.html
+  guide/tools/devtools.html: guide/tools/toolkit.html
+  guide/tools/weexpack.html: guide/tools/toolkit.html
diff --git a/doc/package.json b/doc/package.json
index 7a12cba..31dc325 100644
--- a/doc/package.json
+++ b/doc/package.json
@@ -3,7 +3,7 @@
   "version": "0.0.0",
   "private": true,
   "hexo": {
-    "version": "3.2.2"
+    "version": "3.3.1"
   },
   "scripts": {
     "server": "hexo server"
@@ -24,4 +24,4 @@
     "hexo-renderer-stylus": "^0.3.1",
     "hexo-server": "^0.2.0"
   }
-}
+}
\ No newline at end of file
diff --git a/doc/source/cn/faq.md b/doc/source/cn/faq.md
index 871a857..ba6145b 100644
--- a/doc/source/cn/faq.md
+++ b/doc/source/cn/faq.md
@@ -17,7 +17,7 @@
 
 ## Windows 指令错误
 
-请先安装 [Git for Windows](https://git-scm.com/download/win),在 [For Windows](https://github.com/alibaba/weex/tree/dev#for-windows) 中查看更多信息。
+请先安装 [Git for Windows](https://git-scm.com/download/win),在 [For Windows](https://github.com/apache/incubator-weex/tree/dev#for-windows) 中查看更多信息。
 
 
 ## Android Studio 中 Gradle 错误
diff --git a/doc/source/cn/guide/contributing.md b/doc/source/cn/guide/contributing.md
new file mode 100644
index 0000000..36db1f9
--- /dev/null
+++ b/doc/source/cn/guide/contributing.md
@@ -0,0 +1,106 @@
+---
+title: 如何参与社区
+type: guide
+order: 6
+has_chapter_content: true
+version: 2.1
+---
+
+# 如何参与社区
+
+## 加入 Weex 邮件列表 (Mailing List)
+
+在 Weex 官方社区所有的信息都会汇聚于邮件列表。订阅开发邮件列表的方式是发送邮件到 `dev-subscribe@weex.incubator.apache.org` 然后你的邮箱会收到一封来自 Apache 的回信 (英文),把 Apache 的这封回信再次回复过去,即可完成订阅。
+
+这里需要强调的是 Apache 是一个面向全球的全英文的社区,所以我们希望您能够用英文在邮件列表中跟大家交流。
+
+如果您确实对使用英文存在很大的疑虑或困惑,我们也非常欢迎大家来中文问答平台 [SegmentFault](https://segmentfault.com/t/weex) 提问,这里有非常多热心的开发者一起讨论和解答 Weex 相关的问题。
+
+使用邮件列表的另外一个好处是它可以方便大家随时查阅之前的邮件记录: [http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/](http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/)
+
+*如果您对邮件列表中的内容已经不再感兴趣,这里也有退订邮件列表的方法: 发送邮件至 `dev-unsubscribe@weex.incubator.apache.org` 并根据回信的提示进行二次回复确认,完成退订。*
+
+除了开发 (dev) 邮件列表,我们还有另外几个的邮件列表供大家查阅:[http://mail-archives.apache.org/mod_mbox/#weex.incubator](http://mail-archives.apache.org/mod_mbox/#weex.incubator)
+
+## 分支管理 (英)
+
+```
+master
+ ↑
+dev         <--- PR(hotfix/typo/3rd-PR)
+ ↑ PR
+{domain}-feature-{date}
+```
+
+0. `master` branch
+    0. `master` is the latest (pre-)release branch.
+0. `dev` branch
+    0. `dev` is the stable developing branch.
+    0. ***It's RECOMMENDED to commit hotfix (like typo) or feature PR to `dev`***.
+0. `{domain}-feature-{date}` branch
+    0. The branch for a developing iteration, e.g. `android-feature-20160607` is an android developing iteration which is done at 2016.06.07. `{domain}` consists of `android`, `ios`, `jsfm` and `html5`. 
+    0. **DO NOT commit any PR to such a branch**.
+
+### 分支命名
+
+```
+{module}-{action}-{shortName}
+```
+
+* `{module}`, see [commit log module](#commit-log)
+* `{action}`
+    * `feature`: checkout from `{module}` and merge to `{module}` later. If `{module}` not exists, merge to `dev`
+    * `bugfix`: like `feature`, for bugfix only
+    * `hotfix`: checkout from `master` or release `tag`, merge to `master` and `{module}` later. If `{module}` not exists, merge to `dev`
+
+for example:
+
+* `android-bugfix-memory`
+* `jsfm-feature-communication`
+* `android-hotfix-compute-layout`
+
+## 提交日志格式 (英)
+
+```
+{action} [{module}] {description}
+```
+
+* `{action}`
+    * `+` add
+    * `*` update or bugfix
+    * `-` remove
+* `{module}`
+    * Including: android, ios, jsfm, html5, component, doc, website, example, test, all 
+* `{description}`
+    * Just make it as clear and simple as possible.
+
+for example:
+
+* `+ [android] close #123, add refreshing for WebView`
+* `* [doc] fix #123, update video auto-play property`
+* `- [example] remove abc`
+
+## 发送 Pull Request (英)
+
+You can [create pull requests](https://github.com/apache/incubator-weex/compare) in GitHub.
+
+1. First we suggest you have some discussion with the community (commonly in our mailing list) before you code.
+2. Fork repo from [https://github.com/apache/incubator-weex/](https://github.com/apache/incubator-weex/)
+3. Finish the job you want to do.
+4. Create a pull request.
+
+## 编码规范 (英)
+
+### Objective-C
+
+* Tabs for indentation(not spaces)
+* `*` operator goes with the variable name (e.g. Type *variable;)
+* Function definitions: place each brace on its own line.
+* Other braces: place the open brace on the line preceding the code block; place the close brace on its own line.
+* Use `#pragma marks` to categorize methods into functional groupings and protocol implementations
+* Follow other guidelines on [GitHub Objective-C Style Guide](https://github.com/github/objective-c-style-guide)
+
+### Java & Android 
+
+* Use [Google Java Style](https://google.github.io/styleguide/javaguide.html) as basic guidelines of java code.
+* Follow [AOSP Code Style](https://source.android.com/source/code-style.html) for rest of android related code style.
diff --git a/doc/source/cn/guide/integrate-to-your-app.md b/doc/source/cn/guide/integrate-to-your-app.md
index 3461aa7..fcb6430 100644
--- a/doc/source/cn/guide/integrate-to-your-app.md
+++ b/doc/source/cn/guide/integrate-to-your-app.md
@@ -1,7 +1,7 @@
 ---
 title: 集成 Weex 到已有应用
 type: guide
-order: 3
+order: 1.2
 version: 2.1
 has_chapter_content: true
 ---
@@ -22,8 +22,8 @@
 
 - 已经安装了[JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) version>=1.7 并配置了环境变量
 - 已经安装[Android SDK](https://developer.android.com/studio/index.html) 并配置环境变量。
-- Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
-- SDK build tools version 23.0.1 (buildToolsVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
+- Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
+- SDK build tools version 23.0.1 (buildToolsVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
 - Android Support Repository >= 17 (for Android Support Library)
 
 ### 快速接入
@@ -32,7 +32,7 @@
 步骤如下:  
 1. 创建Android工程,没有什么要特别说明的,按照你的习惯来。
 2. 修改build.gradle 加入如下基础依赖  
-   
+
    ```gradle
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.android.support:support-v4:23.1.1'
@@ -40,7 +40,7 @@
    compile 'com.alibaba:fastjson:1.1.46.android'
    compile 'com.taobao.android:weex_sdk:0.5.1@aar'
    ```
-   
+
    注:版本可以高不可以低。  
 
 #### 代码实现
@@ -229,7 +229,7 @@
       pod 'WeexSDK', '0.9.5'   ## 建议使用WeexSDK新版本 
   end
   ```
-    
+
 - 源码集成
 
   首先 拷贝 `ios/sdk` 目录到你已有项目目录 (此处以拷贝到你已有项目的根目录为例子),然后在 `Podfile` 文件中添加
@@ -274,7 +274,7 @@
 
 Weex 支持整体页面渲染和部分渲染两种模式,你需要做的事情是用指定的 URL 渲染 Weex 的 view,然后添加到它的父容器上,父容器一般都是 viewController。
 
-```
+```objective-c
 #import <WeexSDK/WXSDKInstance.h>
 - (void)viewDidLoad 
 {
@@ -297,7 +297,8 @@
     _instance.renderFinish = ^ (UIView *view) {
         //process renderFinish
     };
-    [_instance renderWithURL:self.url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
+    NSURL *url = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"js"]
+    [_instance renderWithURL:url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
 }
 ```
 
diff --git a/doc/source/cn/guide/intro/app-architecture.md b/doc/source/cn/guide/intro/app-architecture.md
index 22fc35c..a3f39ce 100644
--- a/doc/source/cn/guide/intro/app-architecture.md
+++ b/doc/source/cn/guide/intro/app-architecture.md
@@ -1,7 +1,7 @@
 ---
 title: 用 Weex 构建移动应用
 type: guide
-order: 5.5
+order: 4.5
 version: 2.1
 ---
 
diff --git a/doc/source/cn/guide/intro/how-it-works.md b/doc/source/cn/guide/intro/how-it-works.md
index 51319e1..4480005 100644
--- a/doc/source/cn/guide/intro/how-it-works.md
+++ b/doc/source/cn/guide/intro/how-it-works.md
@@ -1,7 +1,7 @@
 ---
 title: 工作原理
 type: guide
-order: 5.1
+order: 4.1
 has_chapter_content: false
 chapter_title: 优势介绍
 version: 2.1
diff --git a/doc/source/cn/guide/intro/index.md b/doc/source/cn/guide/intro/index.md
index 90e01a4..7040c1b 100644
--- a/doc/source/cn/guide/intro/index.md
+++ b/doc/source/cn/guide/intro/index.md
@@ -1,7 +1,7 @@
 ---
 title: 介绍 
 type: guide
-order: 5
+order: 4
 version: 2.1
 ---
 
@@ -12,4 +12,4 @@
 - [使用 Vue 开发 Weex 页面](./using-vue.html)
 - [一次撰写,多端运行](./write-once.html)
 - [用 Weex 构建移动应用](./app-architecture.html)
-- [Weex 页面结构](./page-architecture.html)
\ No newline at end of file
+- [Weex 页面结构](./page-architecture.html)
diff --git a/doc/source/cn/guide/intro/page-architecture.md b/doc/source/cn/guide/intro/page-architecture.md
index 17b7d16..296ee98 100644
--- a/doc/source/cn/guide/intro/page-architecture.md
+++ b/doc/source/cn/guide/intro/page-architecture.md
@@ -1,7 +1,7 @@
 ---
 title: Weex 页面结构
 type: guide
-order: 5.6
+order: 4.6
 version: 2.1
 ---
 
diff --git a/doc/source/cn/guide/intro/using-vue.md b/doc/source/cn/guide/intro/using-vue.md
index 42ad984..3083340 100644
--- a/doc/source/cn/guide/intro/using-vue.md
+++ b/doc/source/cn/guide/intro/using-vue.md
@@ -1,7 +1,7 @@
 ---
 title: 使用 Vue 开发 Weex 页面
 type: guide
-order: 5.3
+order: 4.3
 version: 2.1
 ---
 
diff --git a/doc/source/cn/guide/intro/web-dev-experience.md b/doc/source/cn/guide/intro/web-dev-experience.md
index d7f6163..03d33e4 100644
--- a/doc/source/cn/guide/intro/web-dev-experience.md
+++ b/doc/source/cn/guide/intro/web-dev-experience.md
@@ -1,7 +1,7 @@
 ---
 title: Web 开发体验
 type: guide
-order: 5.2
+order: 4.2
 version: 2.1
 ---
 
diff --git a/doc/source/cn/guide/intro/write-once.md b/doc/source/cn/guide/intro/write-once.md
index e880f48..d483c5b 100644
--- a/doc/source/cn/guide/intro/write-once.md
+++ b/doc/source/cn/guide/intro/write-once.md
@@ -1,7 +1,7 @@
 ---
 title: 一次撰写,多端运行
 type: guide
-order: 5.4
+order: 4.4
 version: 2.1
 ---
 
@@ -22,4 +22,4 @@
     3. 各端不一致的业务描述也是难免的,我们通过提供更多更丰富的环境变量来帮助开发者在同一套代码里高效适配不同的设备场景。
 3. 我们相信标准和规范的力量
 
-部分功能特性由于 native 特性的关系,会略有不同,我们会在相应的组件、模块、API 文档中做相应的描述和提示。
\ No newline at end of file
+部分功能特性由于 native 特性的关系,会略有不同,我们会在相应的组件、模块、API 文档中做相应的描述和提示。
diff --git a/doc/source/cn/guide/set-up-env.md b/doc/source/cn/guide/set-up-env.md
index 5d77a45..139e155 100644
--- a/doc/source/cn/guide/set-up-env.md
+++ b/doc/source/cn/guide/set-up-env.md
@@ -1,7 +1,7 @@
 ---
 title: 搭建开发环境 
 type: guide
-order: 2
+order: 1.1
 version: 2.1
 has_chapter_content: true
 ---
@@ -67,7 +67,7 @@
 
 安装结束后你可以直接使用 `weex` 命令验证是否安装成功,它会显示 `weex` 命令行工具各参数:
 
-![](https://img.alicdn.com/tps/TB1kHFrOFXXXXaYXXXXXXXXXXXX-615-308.jpg)
+![](https://img.alicdn.com/tfs/TB1NBhdQXXXXXXzXFXXXXXXXXXX-712-343.png)
 
 ## 第二步:初始化
 
diff --git a/doc/source/cn/guide/tools/devtools.md b/doc/source/cn/guide/tools/devtools.md
deleted file mode 100644
index f1c4dbc..0000000
--- a/doc/source/cn/guide/tools/devtools.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: 使用 Devtools
-type: guide
-order: 4.1
-version: 2.1
-has_chapter_content: true
----
-
-# Devtools
-
-**weex devtools** 是专门为 Weex 定制的一款实现了 [**Chrome Debugging Protocol**](https://developer.chrome.com/devtools/docs/debugger-protocol) 的 inspect/debug 工具,能够帮助你快速查看 app 运行状态和调试 weex 中的 Javascript 代码,当前支持 **iOS** 和 **Android** 两个平台。
-
-1. 支持 Android 和 iOS 调试
-2. 支持真机和模拟器
-3. 可以检查 native Elements, vdom, network, Console, Resource
-4. 可以调试 js/wx/Rx 等前端源码文件
-5. 支持同时在前端文件和 native (Android/iOS) 文件上断点调试
-6. 支持远程调试,不需要真机 USB 连接电脑
-7. 支持 screencast 和 select element 功能
-8. 支持同时调试多个应用和客户端
-
-## 安装
-
-```
-$ npm install  -g  weex-toolkit
-```
-
-## 用法
-
- weex debug [options] [we_file|bundles_dir]
-
-  选项:
-
-```
--h, --help           显示帮助
--V, --verbose        显示 debug 服务器运行时的各种 log
--v, --version        显示版本
--p, --port [port]    设置 debug 服务器端口号 默认为 8088
--e, --entry [entry]  debug 一个目录时,这个参数指定整个目录的入口 bundle 文件,这个 bundle 文件的地址会显示在debug主页上(作为二维码)
--m, --mode [mode]    设置构建we文件的方式, transformer 最基础的风格适合单文件, loader:wepack 风格 适合模块化的多文件。默认为 transformer
-```
-
-#### 开启调试
-
-```
-$ weex debug
-```
-
-单纯启动一个调试服务器,并同时唤起chrome浏览器打开`调试主页`.
-这个`调试主页`上会有一个二维码,使用Playground App扫这个二维码可以开启Playground调试.
-开启调试后,设备列表中会出现您的设备,根据提示进行后续的调试操作
-#### 调试 we文件
-
-```
-$weex debug your_weex.we
-```
-
-这个命令会将your_weex.we编译成bundlejs文件 部署到debug服务器
-并启动debug服务器如上述命令那样.打开的`调试主页`会多显示一个二维码,使用playground app
-扫这个码可以加载your_weex.we.(注意要先扫描开启调试的那个码)
-这个命令会自动检测your_weex.we文件变动,如果发现内容被修改则立即重新编译部署,并刷新debugger页面
-.
-#### 调试整个bundle/we文件夹
-
-```
-$weex debug your/we/path  -e index.we
-```
-
-这个命令会编译你指定目录下的所有的we文件,并把编译好的bundlejs部署到debug服务器,他们的地址会映射到 http://lcoalhost:8088/weex/ 下
-比如 your/we/path/`index.we` 可以通过http://lcoalhost:8088/weex/index.js访问  
-your/we/path/`demo/test.we` 可以通过http://lcoalhost:8088/weex/demo/index.js  
-
--e参数可以指定一个入口的we文件,这个文件的地址会显示在`调试主页`上(作为二维码)
-## 特性
-### 连接设备
-
-![devtools-main](https://img.alicdn.com/tps/TB13fwSKFXXXXXDaXXXXXXXXXXX-887-828.png)
-### Inspector
-
- Inspector 能够用来查看 `Element` \ `NetWork` \ `Console log` \ `ScreenCast` \ `BoxModel` \ `Native View` 等。
-
-![devtools-inspector](https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png)
-#### Element
-
-![inspector-element](https://img.alicdn.com/tps/TB1.02bKFXXXXXwaXXXXXXXXXXX-2880-1800.png)
-#### NetWork
-##### 查看网络请求的总耗时和延时
-
-![inspector-network](https://img.alicdn.com/tps/TB1NjO_KFXXXXcaaXXXXXXXXXXX-2880-1800.png)
-##### 查看网络请求的header和response
-
-![inspector-network](https://img.alicdn.com/tps/TB1ck6lKFXXXXbZXFXXXXXXXXXX-2880-1800.png)
-#### 控制台
-
-![inspector-console](https://img.alicdn.com/tps/TB1a7HqKFXXXXXMXFXXXXXXXXXX-2880-1800.png)
-#### 资源
-
-![inspector-resource](https://img.alicdn.com/tps/TB1oY6cKFXXXXXQaXXXXXXXXXXX-2880-1800.png)
-### Debugger
-
- 调试器用来调试weex中的js代码,能够设置断点、查看调用栈。 
-
-![devtools-debugger](https://img.alicdn.com/tps/TB1aPTEKFXXXXXaXXXXXXXXXXXX-1436-813.png)
-##### Breakpoint and CallStack
-
-![debugger-breakpoint](https://img.alicdn.com/tps/TB1_trbKFXXXXc0XVXXXXXXXXXX-2880-1800.png)
-#### 集成devtools
-- Android
-  - 请参考文档 [Weex devtools (Android)](../../references/advanced/integrate-devtool-to-android.html), 其中有详细说明。
-- IOS
-  - 请参考文档 [Weex devtools (iOS)](../../references/advanced/integrate-devtool-to-ios.html), 其中有详细说明。
diff --git a/doc/source/cn/guide/tools/index.md b/doc/source/cn/guide/tools/index.md
index a9c5a26..cd2c226 100644
--- a/doc/source/cn/guide/tools/index.md
+++ b/doc/source/cn/guide/tools/index.md
@@ -1,11 +1,10 @@
 ---
 title: 周边工具 
 type: guide
-order: 4
+order: 5
 version: 2.1
 ---
 
 # 周边工具  
 
-- [Devtools](./devtools.html)
-- [Weexpack](./weexpack.html)
\ No newline at end of file
+- [weex-toolkit](./toolkit.html)
diff --git a/doc/source/cn/guide/tools/toolkit.md b/doc/source/cn/guide/tools/toolkit.md
new file mode 100644
index 0000000..90bfe13
--- /dev/null
+++ b/doc/source/cn/guide/tools/toolkit.md
@@ -0,0 +1,231 @@
+---
+title: 使用 weex-toolkit
+type: guide
+order: 5.1
+version: 2.1
+---
+
+# weex-toolkit
+
+[weex-toolkit](https://github.com/weexteam/weex-toolkit) 是官方提供的一个脚手架命令行工具,你可以使用它进行 Weex 项目的创建,调试以及打包等功能。
+
+### 安装
+
+使用 `npm` 安装:
+
+``` bash
+$ npm install -g weex-toolkit
+```
+安装成功后,你输入 `weex` 应该可以看到下面的提示效果;
+
+![weex-commands](https://img.alicdn.com/tfs/TB1NBhdQXXXXXXzXFXXXXXXXXXX-712-343.png)
+
+如果你本地没有安装 node.js 你可以前往[官网](https://nodejs.org/en/)下载安装。
+
+*请确保你的 node 版本是>=6,你可以使用 [n](https://github.com/tj/n) 来进行 node 的版本管理。
+
+中国用户如果npm遭遇网络问题,可以使用淘宝的 [cnpm](https://npm.taobao.org/) 镜像:
+
+``` bash
+$ npm install -g cnpm --registry=https://registry.npm.taobao.org
+$ cnpm install -g weex-toolkit
+```
+
+如果你安装的过程中遇到了问题,比如 *permission error* 你可以去 [weex-toolkit issues](https://github.com/weexteam/weex-toolkit/issues) 找到解决方法。
+
+
+### 初始化 weex 项目
+
+
+```bash
+$ weex init awesome-project
+```
+
+执行完命令后,在 `awesome-project` 目录中就创建了一个使用 `Weex` 和 `Vue` 的模板项目。
+
+
+然后我们进入项目所在路径,`weex-toolkit` 已经为我们生成了标准项目结构。
+
+在 `package.json` 中,已经配置好了几个常用的 npm script,分别是:
+
+- `build`: 源码打包,生成 JS Bundle
+- `dev`: webpack watch 模式,方便开发
+- `serve`: 开启静态服务器
+- `debug`: 调试模式
+
+我们先通过 `npm install` 安装项目依赖。之后运行 `npm run dev` 和 `npm run serve` 开启 `watch` 模式和静态服务器。
+
+然后我们打开浏览器,进入 `http://localhost:8080/index.html` 即可看到 Weex h5 页面。
+
+
+### 实时预览
+
+`weex-toolkit` 支持预览你当前开发的weex页面(`.we`或者`.vue`),你只需要指定预览的文件路径即可:
+
+``` bash
+$ weex src/foo.vue 
+```
+
+浏览器会自动弹出页面,这个时候你可以看到你所编辑的 Weex页面的具体效果和页面布局。如果你使用 [Playground](https://weex.apache.org/cn/playground.html) 扫描右边的二维码,就能够看到 Weex 在 Android/IOS 设备上的效果了。
+
+如果你需要预览整个项目目录,你可以输入这样的命令:
+
+``` bash
+$ weex src --entry src/foo.vue
+```
+你需要在传入的参数指定预览的目录和入口文件。
+
+### 打包weex项目
+
+如果开发完成后,你可以使用 `weex compile` 通过命令行工具进行单个文件或者整个项目的打包。
+
+``` bash
+weex compile src/foo.vue dist
+```
+命令行需要两个参数,你的源码文件或者目录, 以及你生成打包后的目录地址。
+
+
+### 调试 Weex 页面
+
+weex-toolkit支持调试工具。**[weex devtools](https://github.com/weexteam/weex-devtool)** ,它是专门为Weex定制的一款实现了 [**Chrome Debugging Protocol**](https://developer.chrome.com/devtools/docs/debugger-protocol) 的 inspect/debug 工具,能够帮助你快速查看 app 运行状态和调试 Weex 中的 JS 代码,当前支持 **IOS** 和 **Android** 两个平台。
+
+#### 用法
+
+``` bash
+ weex debug [options] [we_file|bundles_dir]
+ ```
+
+  选项:
+
+```
+-h, --help           显示帮助
+-V, --verbose        显示 debug 服务器运行时的各种 log
+-v, --version        显示版本
+-p, --port [port]    设置 debug 服务器端口号 默认为8088
+-e, --entry [entry]  debug 一个目录时,这个参数指定整个目录的入口 bundle 文件,这个 bundle 文件的地址会显示在 debug 主页上(作为二维码)
+-m, --mode [mode]    设置构建 we 文件的方式,transformer 最基础的风格适合单文件, loader:webpack 风格 适合模块化的多文件 . 默认为 transformer
+```
+#### 开启调试
+
+```
+$ weex debug
+```
+
+单纯启动一个调试服务器,并同时唤起Chrome浏览器打开`调试主页`。
+这个`调试主页`上会有一个二维码,使用 Playground App 扫这个二维码可以开启 Playground 调试。
+开启调试后,设备列表中会出现您的设备,根据提示进行后续的调试操作。
+
+#### 调试 `.we` | `.vue` 文件
+
+```
+$ weex debug your_weex.vue
+```
+
+这个命令会将 `your_weex.vue` 编译成 `JS Bundle` 文件 部署到 debug 服务器;
+并启动debug服务器如上述命令那样打开的`调试vue主页`会多显示一个二维码,使用 Playground App扫这个二维码码可以加载 `your_weex.we` (注意要先扫描开启调试的那个二维码码)。
+这个命令会自动检测 `your_weex.we` 文件变动,如果发现内容被修改则立即重新编译部署,并刷新 `debugger` 页面。
+.
+#### 调试整个bundle/we文件夹
+
+同样你也可以调试整个目录的文件,你只需要传入目录的路径和入口文件即可;
+
+```
+$weex debug your/we/path  -e index.we
+```
+
+这个命令会编译你指定目录下的所有的 `.we` 文件,并把编译好的 JS Bundle 部署到 debug 服务器,他们的地址会映射到 http://lcoalhost:8088/weex/ 下
+比如 `your/we/path/index.we` 可以通过 http://lcoalhost:8088/weex/index.js 访问。  
+`your/we/path/demo/test.we` 可以通过 http://lcoalhost:8088/weex/demo/index.js 。
+
+`-e` 参数可以指定一个入口的 `.we` 文件,这个文件的地址会显示在`调试主页`上(作为二维码)。
+
+#### 特性
+##### 连接设备
+
+![devtools-main](https://img.alicdn.com/tps/TB13fwSKFXXXXXDaXXXXXXXXXXX-887-828.png)
+##### Inspector
+
+ Inspector 能够用来查看 `Element` \ `NetWork` \ `Console log` \ `ScreenCast` \ `BoxModel` \ `Native View` 等。
+
+![devtools-inspector](https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png)
+##### Element
+
+![inspector-element](https://img.alicdn.com/tps/TB1.02bKFXXXXXwaXXXXXXXXXXX-2880-1800.png)
+##### NetWork
+##### 查看网络请求的总耗时和延时
+
+![inspector-network](https://img.alicdn.com/tps/TB1NjO_KFXXXXcaaXXXXXXXXXXX-2880-1800.png)
+##### 查看网络请求的header和response
+
+![inspector-network](https://img.alicdn.com/tps/TB1ck6lKFXXXXbZXFXXXXXXXXXX-2880-1800.png)
+##### 控制台
+
+![inspector-console](https://img.alicdn.com/tps/TB1a7HqKFXXXXXMXFXXXXXXXXXX-2880-1800.png)
+##### 资源
+
+![inspector-resource](https://img.alicdn.com/tps/TB1oY6cKFXXXXXQaXXXXXXXXXXX-2880-1800.png)
+#### Debugger
+
+ 调试器用来调试 Weex 中的 JS 代码,能够设置断点、查看调用栈。 
+
+![devtools-debugger](https://img.alicdn.com/tps/TB1aPTEKFXXXXXaXXXXXXXXXXXX-1436-813.png)
+##### Breakpoint and CallStack
+
+![debugger-breakpoint](https://img.alicdn.com/tps/TB1_trbKFXXXXc0XVXXXXXXXXXX-2880-1800.png)
+#### 集成devtools
+- Android
+  - 请参考文档 [Weex devtools (Android)](../../references/advanced/integrate-devtool-to-android.html),其中有详细说明。
+- IOS
+  - 请参考文档 [Weex devtools (iOS)](../../references/advanced/integrate-devtool-to-ios.html), 其中有详细说明。
+  
+  
+### weex-toolkit 对 weexpack 的水平扩展
+
+[weexpack](https://github.com/weexteam/weex-pack) 是基于 Weex 快速搭建应用原型的利器。它能够帮助开发者通过命令行创建 Weex 工程,添加相应平台的 Weex app 模版,并基于模版从本地,GitHub 或者 Weex 应用市场安装插件,快速打包 Weex 应用并安装到手机运行,对于具有分享精神的开发者而言还能够创建 Weex 插件模版并发布插件到 Weex 应用市场。
+
+现在使用 `weex-toolkit` 同样支持对 `weexpack` 的命令调用,如果你当前的项目与 `weexpack` 生成的项目目录一致,那么你可以直接实现对于 `platform` 的操作,从而构建具体的 Android/IOS app 。
+
+### weex platform 以及 run 命令
+
+如果我们希望在模拟器或者真机上查看 Weex 运行的效果,我们可以使用 `platform` 添加或者删除 Weex 应用模板。
+
+``` bash
+$ weex platform add ios 
+```
+在第一次使用 platform/plugin 命令的时候,可能会遇到下面的界面,你只需要输入 Y 或者直接 enter 键即可。
+![install weexpack](https://gw.alicdn.com/tfs/TB19n4AQXXXXXawXVXXXXXXXXXX-577-70.png)
+
+添加ios平台,然后这个时候只要输入:
+
+``` bash
+$ weex run ios
+```
+
+就能看到启动的模拟器运行的效果了。
+
+
+### weex plugin 命令
+
+如果你想使用[插件市场](https://market.dotwe.org)的插件,你可以使用:
+
+```bash
+$ weex plugin add plugin_name
+```
+
+你只需要输入插件的名称就可以从远程添加插件到你本地的项目,比如添加 weex-chart,我们可以输入命令:
+
+``` bash
+$ weex plugin add weex-chart
+```
+
+
+我们可以使用`plugin remove`移除插件,比如移除安装好的 weex-cahrt:
+
+``` bash
+$ weex plugin remove weex-chart
+```
+
+关于 `weexpack` 更加详细的介绍,你可以阅读 [官方文档](https://github.com/weexteam/weex-pack)。
+
+
+
diff --git a/doc/source/cn/guide/tools/weexpack.md b/doc/source/cn/guide/tools/weexpack.md
deleted file mode 100644
index ee1a26c..0000000
--- a/doc/source/cn/guide/tools/weexpack.md
+++ /dev/null
@@ -1,388 +0,0 @@
----
-title: 使用 Weexpack
-type: guide
-order: 4.2
-version: 2.1
----
-
-# 使用 Weexpack
-
-## weexpack 介绍
-
-weexpack 是 weex 新一代的工程开发套件,是基于 weex 快速搭建应用原型的利器。它能够帮助开发者通过命令行创建 Weex 工程,添加相应平台的 Weex app 模版,并基于模版从本地、GitHub 或者 Weex 应用市场安装插件,快速打包 Weex 应用并安装到手机运行,对于具有分享精神的开发者而言还能够创建 Weex 插件模版并发布插件到 Weex 应用市场。
-
-**注意:** weexpack 目前暂不支持搭建 Vue 2.0 版本的 Weex。
-
-weexpack 所提供的命令大致可分为三组,分别是:
-
-* 打包命令
- * **weexpack create** — 创建 Weex 工程项目。
- * **weexpack platform add/remove** — 安装/移除 Weex 应用模版,默认模版支持 Weex bundle 调试和插件机制。
- * **weexpack platform list** — 查看已安装的平台模版及版本。
- * **weexpack platform run** - 打包应用并安装到设备运行。
-
-
-* 插件使用者命令
- * **weexpack plugin add/remove** — 安装/移除 Weex 插件,支持从本地、GitHub 或者  Weex 应用市场安装插件。
-
- * **weexpack plugin list** — 查看已安装的插件及版本。
-
-
-* 插件开发者命令
-
- * **weexpack plugin create** - 生成 Weex 插件模版,主要是配置文件和必需的目录。
- * **weexpack plugin publish** - 发布插件到 Weex 插件市场。
-
-
-## 安装
-
-### 环境要求
-
- - 目前支持 Mac、windows、linux 平台 ( windows 下仅能打包 android )。
- - 配置 [Node.js][1] 环境,并且安装 [npm][2] 包管理器 (`需要 node6.0+`)。
- - 如果要支持 iOS 平台则需要配置 iOS 开发环境:
-     - 安装 [Xcode IDE][3] ,启动一次 Xcode ,使 Xcode 自动安装开发者工具和确认使用协议。
-     - 安装 cocoaPods。
- - 如果要支持 Android 平台则需要配置 Android 开发环境:
-    - 安装 [Android Studio][4](推荐)或者 [Android SDK][7]。打开 [AVD Manager][5] ,新建 Android 模拟器并启动(如果有安装 [Docker][6] ,请关闭 Docker Server )。
-    - 保证 Android build-tool 的版本为 23.0.2。
-
-#### 安装命令
-
-首先,全局安装 weex-pack 命令:
-
-```bash
-$ npm install -g weexpack
-```
-
-或者 在 clone 的 weexpack 根目录下执行
-
-```bash
-$ npm install
-```
-
-## 打包及插件使用
-
-打包主要过程如下图所示,其中插件操作是打包过程的可选项,不是必须的。
-
-![weexpack1](https://img.alicdn.com/tps/TB1.bpVPXXXXXarapXXXXXXXXXX-462-310.png)
-
-### 详细步骤
-
-#### 1. 创建 weexpack 工程
-
-```bash
-$ weexpack create appName
-```
-
-生成工程的目录如下:
-
-```
-WeexProject
-├── README.md
-├── android.config.json
-├── config.xml
-├── hooks
-│   └── README.md
-├── ios.config.json
-├── package.json
-├── platforms     // 平台模版目录
-├── plugins       // 插件下载目录
-│   └── README.md
-├── src           // 业务代码(we文件)目录
-│   └── index.we
-├── start
-├── start.bat
-├── tools
-│   └── webpack.config.plugin.js
-├── web
-│   ├── index.html
-│   ├── index.js
-│   └── js
-│       └── init.js
-└── webpack.config.js
-```
-
-通过 create 命令创建的工程默认不包含 iOS 和 Android 工程模版,创建完成之后就可以切换到 appName 目录下并安装依赖。
-
-```bash
-$ cd appName && npm install
-```
-
-#### 2. 安装 Weex 应用模版
-
-添加应用模版,官方提供的模版默认支持 Weex bundle 调试和插件机制,注意模版名称均为小写,模版被安装到 platforms 目录下。
-
-* android 模版
-
-  ```bash
-  $ weexpack platform add android
-  ```
-
-* iOS 模版
-
-  ```bash
-  $ weexpack platform add ios
-  ```
-
-android 平台,安装后 platforms 目录如下
-
-```
-platforms
-└── android
-    ├── LICENSE
-    ├── NOTICE
-    ├── README.md
-    ├── app
-    │   ├── build
-    │   ├── build.gradle
-    │   ├── proguard-rules.pro
-    │   └── src
-    ├── appframework
-    │   ├── build
-    │   ├── build.gradle
-    │   ├── proguard-rules.pro
-    │   └── src
-    ├── build
-    │   └── generated
-    ├── build.gradle
-    ├── codeStyleSettings.xml
-    ├── gradle
-    │   └── wrapper
-    ├── gradle.properties
-    ├── gradlew
-    ├── gradlew.bat
-    ├── settings.gradle
-    └── weexplugin
-        ├── build.gradle
-        ├── proguard-rules.pro
-        └── src 
-                              
-```
-
-ios平台,安装后 platforms 目录如下
-  
-```
-platforms
-   └── ios
-       ├── LICENSE
-       ├── Podfile
-       ├── README.md
-       ├── WeexDemo
-       │   ├── AppDelegate.h
-       │   ├── AppDelegate.m
-       │   ├── Assets.xcassets
-       │   ├── DemoDefine.h
-       │   ├── Images.xcassets
-       │   ├── WeexConfig
-       │   ├── WeexDemo-Info.plist
-       │   ├── WeexScanner
-       │   ├── config.xml
-       │   ├── main.m
-       │   └── weex-icon.png
-       ├── WeexDemo.xcodeproj
-       │   ├── project.pbxproj
-       │   ├── project.xcworkspace
-       │   ├── xcshareddata
-       │   └── xcuserdata
-       ├── WeexDemo.xcworkspace
-       │   ├── contents.xcworkspacedata
-       │   ├── xcshareddata
-       │   └── xcuserdata
-       ├── WeexDemoTests
-       │   ├── Info.plist
-       │   └── WeexDemoTests.m
-       ├── WeexUITestDemo-Info.plist
-       ├── WeexUITestDemoUITests
-       │   ├── Info.plist
-       │   └── WeexUITestDemoUITests.m
-       ├── Weexplugin
-       │   ├── Podfile
-       │   ├── Weexplugin
-       │   ├── Weexplugin.podspec
-       │   ├── Weexplugin.xcodeproj
-       │   └── WeexpluginTests
-       ├── bundlejs
-  
-  ```
-
-对于已安装的模版可以使用 weexpack platform list 命令查看。
-
-* 查看已安装模版
-
-  ```bash
-  $ weexpack platform list
-  ```
-
-  示例结果:
-
-  ```
-  Installed platforms:
-    android
-  Available platforms:
-    android ^6.2.1
-  ```
-    
-如果想要删除某个不需要的平台可以使用 weexpack platform remove 移除,比如 Windows 平台用户是不需要 iOS 模版的,可用如下命令移除。
-
-
-* 移除相应平台模版
-
-  ```bash
-  $ weexpack platform remove ios
-  ```
-
-#### 3. 安装 Weex 插件(可选项)
-
-添加想要使用的插件,支持从本地或者 Weex 应用市场安装插件。
-
-* 从本地添加插件,在开发插件时会经常用到
-
-  ```bash
-  $ weexpack plugin add path/to/plugin
-  ```
-
-* 从插件市场添加插件,例如 weex-chart。
-
-  ```bash
-  $ weexpack plugin add weex-chart
-  ```
-
-模版的 weexplugin 是插件安装的目标工程。以 Android 为例,其目录如下:
-
-```
-weexplugin
-├── build.gradle  //  插件编译脚本,工具自动维护
-├── libs
-├── proguard-rules.pro
-├── src
-│   └── main
-│       ├── AndroidManifest.xml // 插件android manifest配置文件
-│       ├── java
-│       │   ├── // 插件src安装目录
-│       │   └── com
-│       │       └── alibaba
-│       │           └── weex
-│       │               └── plugin
-│       │                   ├── ConfigXmlParser.java // 配置文件解析器
-│       │                   ├── PluginConfig.java    // 外部接口
-│       │                   ├── PluginEntry.java     // 插件描述
-│       │                   └── PluginManager.java   // 插件管理器
-│       └── res // 插件资源安装目录
-│           ├── drawable
-│           ├── values
-│           │   └── strings.xml
-│           └── xml
-│               └── config.xml // 插件配置文件,PluginManager 解析配置文件加载插件
-```
-
-对于已安装的插件可以使用 weexpack plugin list 命令查看。
-
-* 查看已安装插件
-
-  ```bash
-  $ weexpack plugin list
-  ```
-
-如果想要删除某个不需要的插件可以使用 weexpack plugin remove 移除,比如 weex-chart
-
-* 移除插件,例如 weex-chart
-
-  ```bash
-  $ weexpack plugin remove weex-chart
-  ```
-
-
-
-#### 4. 打包应用并安装运行
-
-完成以上步骤并 Weex 代码放在 src 目录下,就可以打包运行了,打包过程中可能要下载依赖和编译工具,这会是个较为耗时的过程,安装运行需要打开模拟器或者连接设备。
-
-* 打包运行 android 应用
-
-  ```bash
-  $ weexpack run android
-  ```
-
-  你可以更改项目目录下的 android.config.json
-    * AppName: 应用名
-    * AppId: application_id 包名
-    * SplashText: 欢迎页上面的文字
-    * WeexBundle: 指定的 Weex bundle 文件(支持文件名和 url 的形式)
-
-  文件名则以本地文件的方式加载 bundle, url 则以远程的方式加载 bundle
-  如果以本地方式指定 bundle, `.we` 文件请放到 src 目录。
-
-* 打包运行 iOS 应用
-  * 模拟器运行
-
-  ```bash
-  $ weexpack run ios
-  ```
-
-  * 构建 ipa 包
-
-  ```bash
-  $ weexpack build ios
-  ```
-
-  构建包的过程中,将会提示让您输入 `CodeSign(证书)`,`Profile(provisioning profile)`,`AppId`,只有输入真实的这些信息才能成功打包。
-  其余如 AppName , 和入口 Weex bundle 文件可以编辑项目目录下的 ios.config.json 配置。
-  打完包成功之后,可以在 `/playground/build/ipa_build/` 目录下获取 ipa 文件
-
-  **注:证书需要预先安装到 keychain 中,在 keychain 中点击右键获取证书 `id`(证书名称),`provisioning profile` 文件(*mobileprovision)需要获取 UUID,进入[目录](https://github.com/weexteam/weex-pack/tree/dev/generator/platforms/templates) 可以看到 `mobileprovision_UUID.sh` 文件,此文件可以获取到 UUID**
-
-  `mobileprovision_UUID.sh` 用法如下:
-  
-  ```bash
-  $  ./mobileprovision_UUID.sh   \*mobileprovision
-  ```
-
-  参数(\*mobileprovision)为 `provisioning profile` 文件路径
-
-* 打包 Web 平台:
-
-  ```bash
-  $ weexpack build web
-  ```
-     
-  这样你可以把打包后的资源上传到 CDN 服务器,然后上线你的 Web 项目。
-  
-* 在 Web 平台运行:
-
-  ```bash
-  $ weexpack run web
-  ```
-     
-#### 5.现有应用集成插件 —— 组件容器
-
-* 组件容器作用
-
-  插件可以通过组件容器的方式集成到客户端(app),组件容器可以方便生成二进制包,现有应用可以通过各种形式把二进制包或源码集成进去,比如 iOS 可以通过 pod 依赖   的形式等。在 weexpack 创建的根目录下,运行 weexpack plugin add/remove 命令直接安装/删除 Weex plugin 到组件容器中。
-
-* 组件容器获取
-	* 方式1:通过第二步<sup>[[link](#weex-plugin)]</sup>生成的 Android/iOS 目录中包含 Weexplugin 目录,此目录是组件容器
-	* 方式2:通过 repo 地址 clone 代码 [iOS地址](https://github.com/weexteam/weexpluginContainer-iOS) [Android 地址](https://github.com/weexteam/weexplugin-android) 
-
-## 插件发布
-
-对于插件开发者来说,也有一组用于创建和发布插件的命令,[前往](./README_plugin.md) 查看详细文档
-
-![weexpack2](https://img.alicdn.com/tps/TB18hxjPXXXXXXgapXXXXXXXXXX-248-258.png)
-
-## 插件开发文档
-
-+ [开发 web 的插件教程](https://github.com/weexteam/weex-pack/blob/master/doc/plugin-devloping-web.md)
-
-
-## 示例
-[使用 Weexpack 打包出一个 Weex 版的 《One App》](https://github.com/weexteam/weex-pack/wiki/Create-Weex-One-App-with-Weexpack)
-
-[1]: https://nodejs.org/
-[2]: https://www.npmjs.com/
-[3]: https://itunes.apple.com/us/app/xcode/id497799835?mt=12
-[4]: https://developer.android.com/studio/install.html
-[5]: https://developer.android.com/studio/run/managing-avds.html
-[6]: https://www.docker.com/
-[7]: https://developer.android.com/studio/releases/sdk-tools.html
-[8]: https://developer.android.com/studio/run/managing-avds.html
diff --git a/doc/source/cn/references/advanced/extend-to-ios.md b/doc/source/cn/references/advanced/extend-to-ios.md
index 25872bb..5229201 100644
--- a/doc/source/cn/references/advanced/extend-to-ios.md
+++ b/doc/source/cn/references/advanced/extend-to-ios.md
@@ -5,6 +5,12 @@
 version: 2.1
 ---
 
+## 注意
+
+**Weex 所有暴露给  JS 的内置 module 或 component API 都是安全和可控的, 它们不会去访问系统的私有 API ,也不会去做任何 runtime 上的 hack 更不会去改变应用原有的功能定位。**
+
+**如果需要扩展自定义的 module 或者 component ,一定注意不要将 OC 的 runtime 暴露给 JS , 不要将一些诸如 `dlopen()`, `dlsym()`, `respondsToSelector:`,`performSelector:`,`method_exchangeImplementations()` 的动态和不可控的方法暴露给JS, 也不要将系统的私有API暴露给JS**
+
 ## Module 扩展
 
 [swift](https://github.com/weexteam/article/issues/55) 扩展 module 
@@ -19,7 +25,7 @@
 4. Module 方法会在UI线程中被调用,所以不要做太多耗时的任务在这里,如果要在其他线程执行整个module 方法,需要实现`WXModuleProtocol`中`- (NSThread *)targetExecuteThread`的方法,这样,分发到这个module的任务会在指定的线程中运行
 5. Weex 的参数可以是 String 或者Map
 6. Module 支持返回值给 JavaScript中的回调,回调的类型是`WXModuleCallback`,回调的参数可以是String或者Map
-    
+
     ```object-c
     @implementation WXEventModule
     @synthesize weexInstance;
@@ -32,18 +38,50 @@
         } else if (![url hasPrefix:@"http"]) {
             newURL = [NSURL URLWithString:url relativeToURL:weexInstance.scriptURL].absoluteString;
         }
-    
+
         UIViewController *controller = [[WXDemoViewController alloc] init];
         ((WXDemoViewController *)controller).url = [NSURL URLWithString:newURL];
-    
+
         [[weexInstance.viewController navigationController] pushViewController:controller animated:YES];
         callback(@{@"result":@"success"});
     }
-    
+
     @end
     ```
 
-另外,`0.10.0` 开始支持同步模块 API 调用,您可以使用宏 `WX_EXPORT_METHOD_SYNC` 导出模块方法,这些方法可以使 JavaScript 接受从 native 返回的值,它只能在 JS 线程被调用。
+#### 暴露同步方法<span class="api-version">v0.10+</span>
+
+如果你想要暴露同步的native方法给JS, 即JS可以直接拿到Native的返回值。 你可以使用`WX_EXPORT_METHOD_SYNC` 宏。
+
+native 代码:
+
+```objective-c
+@implementation WXEventModule
+
+WX_EXPORT_METHOD_SYNC(@selector(getString))
+  
+- (NSString *)getString
+{
+    return @"testString";
+}
+
+@end
+```
+
+js 代码:
+
+```javascript
+const eventModule = weex.requireModule('event')
+const returnString = syncTest.getString()  // return "testString"
+```
+
+除了string, 你也可以返回 `number/array/dictionary` 类型.
+
+`注意:`  暴露的同步方法只能在 JS 线程执行,请不要做太多同步的工作导致JS执行阻塞。
+
+`注意:`  Vue 2.0 还未支持这个特性,最早会在 0.12 版本支持
+
+
 
 ### 注册 module
 
@@ -117,7 +155,7 @@
 ```
 
 ### handler注册
- 
+
 你可以通过WXSDKEngine 中的 `registerHandler:withProtocol`注册handler
 
 ```object-c
@@ -177,19 +215,19 @@
 
 native 的 component 是由 Weex 管理的,Weex 创建,布局,渲染,销毁。Weex 的 component 生命周期都是可以 hook 的,你可以在这些生命周期中去做自己的事情。
 
-| 方法 | 描述 |
-| :-: | --- |
-| initWithRef:type:... | 用给定的属性初始化一个component. |
-| layoutDidFinish | 在component完成布局时候会调用. |
-| loadView | 创建component管理的view. |
-| viewWillLoad | 在component的view加载之前会调用. |
-| viewDidLoad | 在component的view加载完之后调用. |
-| viewWillUnload | 在component的view被释放之前调用. |
-| viewDidUnload | 在component的view被释放之后调用. |
-| updateStyles: | 在component的style更新时候调用. |
-| updateAttributes: | 在component的attribute更新时候调用. |
-| addEvent: | 给component添加event的时候调用. |
-| removeEvent: | 在event移除的时候调用. |
+|          方法          | 描述                          |
+| :------------------: | --------------------------- |
+| initWithRef:type:... | 用给定的属性初始化一个component.       |
+|   layoutDidFinish    | 在component完成布局时候会调用.        |
+|       loadView       | 创建component管理的view.         |
+|     viewWillLoad     | 在component的view加载之前会调用.     |
+|     viewDidLoad      | 在component的view加载完之后调用.     |
+|    viewWillUnload    | 在component的view被释放之前调用.     |
+|    viewDidUnload     | 在component的view被释放之后调用.     |
+|    updateStyles:     | 在component的style更新时候调用.     |
+|  updateAttributes:   | 在component的attribute更新时候调用. |
+|      addEvent:       | 给component添加event的时候调用.     |
+|     removeEvent:     | 在event移除的时候调用.              |
 
 在 image component 的例子里面,如果我们需要我们自己的 image view 的话,可以复写 `loadView`这个方法.
 
@@ -244,9 +282,9 @@
 ##### component 方法
 
 WeexSDK 0.9.5 之后支持了在 js 中直接调用 component 的方法,这里提供一个例子
-  
+
 - 自定义一个 WXMyCompoenent 的组件
-  
+
   ```
   @implementation WXMyComponent
   WX_EXPORT_METHOD(@selector(focus)) // 暴露该方法给js
@@ -266,7 +304,7 @@
   }
   @end
   ```
-	
+
 - 注册组件 `[WXSDKEngine registerComponent:@"mycomponent" withClass:[WXMyComponent class]]`
 
 - 在 weex 文件中调用
@@ -282,4 +320,4 @@
       }
     }
   </script>
-  ``` 
+  ```
diff --git a/doc/source/cn/references/common-style.md b/doc/source/cn/references/common-style.md
index 4c12380..f3e84f7 100644
--- a/doc/source/cn/references/common-style.md
+++ b/doc/source/cn/references/common-style.md
@@ -35,45 +35,45 @@
   外边距,元素和元素之间的空白距离。值类型为 length,默认值 0
 
   可有如下写法:
-  
+
   - `margin-left {length}`:,默认值 0
   - `margin-right {length}`:,默认值 0
   - `margin-top {length}`:,默认值 0
   - `margin-bottom {length}`:,默认值 0
 - border:
-  
+
   设定边框,`border` 目前不支持类似这样 `border: 1 solid #ff0000;` 的组合写法。
 
   可有如下写法:
-  
+
   - `border-style`:
 
     设定边框样式,值类型为 string,可选值为 `solid` | `dashed` | `dotted`,默认值 `solid`
 
     可有如下写法:
-  
+
     - `border-left-style {string}`:可选值为 `solid` | `dashed` | `dotted`,默认值 `solid`
     - `border-top-style {string}`:可选值为 `solid` | `dashed` | `dotted`,默认值 `solid`
     - `border-right-style {string}`:可选值为 `solid` | `dashed` | `dotted`,默认值 `solid`
     - `border-bottom-style {string}`:可选值为 `solid` | `dashed` | `dotted`,默认值 `solid`
 
   - `border-width {length}`:
-  
+
     设定边框宽度,非负值, 默认值 0
 
     可有如下写法:
-  
+
     - `border-left-width {length}`:,非负值, 默认值 0
     - `border-top-width {length}`:,非负值, 默认值 0
     - `border-right-width {length}`:,非负值, 默认值 0
     - `border-bottom-width {length}`:,非负值, 默认值 0
 
   - `border-color {color}`:
-  
+
     设定边框颜色,默认值 `#000000`
-  
+
     可有如下写法:
-  
+
     - `border-left-color {color}`:,默认值 `#000000`
     - `border-top-color {color}`:,默认值 `#000000`
     - `border-right-color {color}`:,默认值 `#000000`
@@ -83,7 +83,7 @@
     设定圆角,默认值 0
 
     可有如下写法:
-  
+
     - `border-bottom-left-radius {length}`:,非负值, 默认值 0
     - `border-bottom-right-radius {length}`:,非负值, 默认值 0
     - `border-top-left-radius {length}`:,非负值, 默认值 0
@@ -236,7 +236,7 @@
 Weex 支持 `position` 定位,用法与 CSS position 类似。为元素设置 `position` 后,可通过 `top`、`right`、`bottom`、`left` 四个属性设置元素坐标。
 
 - `position {string}`:
-  
+
   设置定位类型。可选值为 `relative` | `absolute` | `fixed` | `sticky`,默认值为 `relative`。
 
   - `relative` 是默认值,指的是相对定位;
@@ -251,7 +251,7 @@
 **注意:**
 
 1. Weex 目前不支持 `z-index` 设置元素层级关系,但靠后的元素层级更高,因此,对于层级高的元素,可将其排列在后面。
-2. 如果定位元素超过容器边界,在 Android 下,超出部分将**不可见**,原因在于 Android 端元素 `overflow` 默认值为 `hidden`,但目前 Android 暂不支持设置 `overflow: visible`。 
+2. 如果定位元素超过容器边界,在 Android 下,超出部分将**不可见**,原因在于 Android 端元素 `overflow` 默认值为 `hidden`,但目前 Android 暂不支持设置 `overflow: visible`。
 
 ### 示例
 
@@ -328,19 +328,19 @@
 
 <style scoped>
   .wrapper {
-    align-items: center; 
+    align-items: center;
     margin-top: 120px;
   }
   .title {
     font-size: 48px;
   }
   .logo {
-    width: 360px; 
+    width: 360px;
     height: 82px;
     background-color: red;
   }
   .logo:active {
-    width: 180px; 
+    width: 180px;
     height: 82px;
     background-color: green;
   }
@@ -458,6 +458,58 @@
 </style>
 ```
 
+## 阴影(box-shadow) <span class="api-version">v0.11+</span>
+
+Weex 支持阴影属性:`active`, `focus`, `disabled`, `enabled` `inset(可选)`,`offset-x`,`offset-y`, `blur-radius`,`color`
+
+
+### 注意
+
+- box-shadow仅仅支持iOS
+
+### 示例
+
+```html
+<template>
+  <div class="wrapper">
+    <div style="width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px rgb(255, 69, 0);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow: 20px  10px 5px rgba(255, 69, 0, 0.8);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgba(255, 69, 0, 0.8);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgb(255, 69, 0);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px black;">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px #008B00;">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+  .wrapper {align-items: center; margin-top: 120px;}
+  .title {font-size: 48px;}
+</style>
+
+<script>
+  module.exports = {
+    data: function () {
+      return {
+        logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+        target: 'World'
+      };
+    }
+  };
+</script>
+```
+
 ## 其他基本样式
 
 - `opacity {number}`:取值范围为 [0, 1] 区间。默认值是 1,即完全不透明;0 是完全透明;0.5 是 50% 的透明度。
diff --git a/doc/source/cn/references/components/a.md b/doc/source/cn/references/components/a.md
index f6fd610..5e54b0c 100644
--- a/doc/source/cn/references/components/a.md
+++ b/doc/source/cn/references/components/a.md
@@ -44,25 +44,6 @@
 ## 约束
 
 - **不能**直接在 `<a>` 中添加文本。
-  错误示例,“click” 无法被正常渲染。
-
-  ```html
-  <template>
-    <div class="wrapper">
-      <a href="http://dotwe.org/raw/dist/a468998152ee680413588c38bd61c29e.js">
-        click
-      </a>
-    </div>
-  </template>
-
-  <style>
-  .wrapper {
-    text-align: center;
-  }
-  </style>
-  ```
-
-  [体验一下](http://dotwe.org/0a22d65138691a208e3fb1f8f6392b38)
 
 - 请不要为 `<a>` 添加 `click` 事件。我们不能确保 `click` 事件和 `href` 跳转的执行顺序。
 
diff --git a/doc/source/cn/references/components/div.md b/doc/source/cn/references/components/div.md
index 79cfae0..90d8711 100644
--- a/doc/source/cn/references/components/div.md
+++ b/doc/source/cn/references/components/div.md
@@ -24,7 +24,7 @@
 
 <style>
 .text {
-  font-size: 70;
+  font-size: 70px;
   color: #ff0000
 }
 </style>
@@ -32,7 +32,7 @@
 <script></script>
 ```
 
-[体验一下](http://dotwe.org/a468998152ee680413588c38bd61c29e)
+[体验一下](http://dotwe.org/vue/ea4f528a0b381640b77ba03fcc69a90a)
 
 ![mobile_preview](../images/div_1.jpg)
 
@@ -84,11 +84,11 @@
   <script></script>
   ```
 
-  [体验一下](http://dotwe.org/3ef3ba3f0f162b27e24c525250c46a04)
+  [体验一下](http://dotwe.org/vue/541f016de379c8764ddcdd9da0cabc24)
 
-2. `<div>` 不可滚动,即使显式设置高度也一样。
+2. `<div>` 在 native 中不可滚动,即使显式设置高度也一样。
 
-  [错误示例](http://dotwe.org/a2cc491c5b9e6f6eb06795e45e725efd)
+  [错误示例](http://dotwe.org/vue/6795753d1a51662b8a7282b129dc7ddf)
 
 ## 示例
 
diff --git a/doc/source/cn/references/components/image.md b/doc/source/cn/references/components/image.md
index 1c70f10..7755618 100644
--- a/doc/source/cn/references/components/image.md
+++ b/doc/source/cn/references/components/image.md
@@ -7,7 +7,7 @@
 
 # &lt;image&gt;
 
-`<image>` 组件用于渲染图片,并且它不能包含任何子组件。可以用 `<img>` 作简写。
+`<image>` 组件用于渲染图片,并且它不能包含任何子组件。新版 Vue 2.0 中**不支持**用 `<img>` 作简写。
 
 需要注意的是,需要明确指定 `width` 和 `height`,否则图片无法显示。
 
@@ -16,12 +16,12 @@
 ```html
 <template>
   <div>
-    <img style="width: 560;height: 560;" src="https://img.alicdn.com/tps/TB1z.55OFXXXXcLXXXXXXXXXXXX-560-560.jpg"></img>
+    <image style="width: 560px;height: 560px;" src="https://img.alicdn.com/tps/TB1z.55OFXXXXcLXXXXXXXXXXXX-560-560.jpg"></image>
   </div>
 </template>
 ```
 
-[体验一下](http://dotwe.org/23b6cf951e6059d2cf7b9a74a9915ace)
+[体验一下](http://dotwe.org/vue/1d6145d98cbdb8c66c69b4d4dcd2744d)
 
 ## 子组件
 
@@ -30,9 +30,9 @@
 ```html
 <template>
   <div>
-    <img style="width:750; height:750;" src="https://img.alicdn.com/tps/TB1z.55OFXXXXcLXXXXXXXXXXXX-560-560.jpg"></img>
+    <image style="width:750px; height:750px;" src="https://img.alicdn.com/tps/TB1z.55OFXXXXcLXXXXXXXXXXXX-560-560.jpg"></image>
     <div class="title">
-      <text style="font-size:50; color: #ff0000">你好,image</text>
+      <text style="font-size:50px; color: #ff0000">你好,image</text>
     </div>
   </div>
 </template>
@@ -45,7 +45,7 @@
 </style>
 ```
 
-[体验一下](http://dotwe.org/08dd49aaca8bf289c5fc08f808b9c08c)
+[体验一下](http://dotwe.org/vue/0a81d27b5dbc68ea3bf5f9fd56c882e8)
 
 ## 特性
 
@@ -66,7 +66,7 @@
 
 - `placeholder`: <span class="api-version">v0.9+</span> &lt;string&gt; 当源图片下载中时显示一张占位图。
 
-  [体验一下](http://dotwe.org/049213ab3364a86637e211c0329cdc50)
+  [体验一下](http://dotwe.org/vue/18e71ab3484bb6751ad77ff7d5195404)
 
 ## 样式
 
@@ -82,7 +82,7 @@
 
 ## 事件
 
-- `load`: <sup class="api-version">v0.8+</sup>:当图片加载完成时触发。目前在 Android、iOS 上支持,H5 暂不支持。[示例](http://dotwe.org/25bd347da6a59603dd31ec057d2691da)
+- `load`: <sup class="api-version">v0.8+</sup>:当图片加载完成时触发。目前在 Android、iOS 上支持,H5 暂不支持。[示例](http://dotwe.org/vue/98ee340348d7cc3e6fbfe68dbaef1eed)
 
   - 事件对象
     - `success`: 当图片成功加载时为`true`,否则为`false`
diff --git a/doc/source/cn/references/components/indicator.md b/doc/source/cn/references/components/indicator.md
index 7980bb5..aa1cab4 100644
--- a/doc/source/cn/references/components/indicator.md
+++ b/doc/source/cn/references/components/indicator.md
@@ -107,6 +107,7 @@
     item-color: green;
     item-selected-color: red;
     item-size: 50px;
+    position: absolute;
     top: 200px;
     left: 200px;
   }
@@ -132,4 +133,4 @@
 </script>
 ```
 
-[try it](http://dotwe.org/vue/d2a654c4b75f1b4d80336c8a5fe133b9)
+[try it](http://dotwe.org/vue/e1b4fd8a37ed4cafd8f5e161698754aa)
diff --git a/doc/source/cn/references/components/input.md b/doc/source/cn/references/components/input.md
index a73db32..133b393 100644
--- a/doc/source/cn/references/components/input.md
+++ b/doc/source/cn/references/components/input.md
@@ -25,6 +25,7 @@
 - `disabled {boolean}`:布尔类型的数据,表示是否支持输入。通常 `click` 事件在 `disabled` 控件上是失效的。
 - `autofocus {boolean}`:布尔类型的数据,表示是否在页面加载时控件自动获得输入焦点。
 - `maxlength {nubmer}`:<sup class="wx-v">v0.7</sup>一个数值类型的值,表示输入的最大长度。
+- `return-key-type {string}`:<sup class="wx-v">v0.11</sup>键盘返回键的类型,支持 defalut;go;next;search;send,done。
 
 ## 样式
 
@@ -84,6 +85,12 @@
   事件中 event 对象属性:
 
   - `timestamp`: 事件发生时的时间戳。
+- `return`: 键盘点击返回键。
+
+    事件中 event 对象属性:
+
+    - `returnKeyType`: 事件发生时的返回键类型。
+    - `value`: 触发事件的组件的文本;
 
 - 通用事件
 
@@ -109,7 +116,12 @@
 - `blur()` <span class="api-version">v0.9+</span>
 
   `blur()` 方法用于从 `input` 组件中移除焦点并关闭软键盘(如果它具有焦点)。
-
+- `setSelectionRange(selectionStart,selectionEnd)`  <span class="api-version">v0.11+</span>设置文本选区
+  - `selectionStart {number}`:设置文本选区的起始点
+  - `selectionEnd {number}`:设置文本选区的起终点
+- `getEditSelectionRange(callback[selectionStart,selectionEnd])`  <span class="api-version">v0.11+</span>设置文本选区
+    - `selectionStart {number}`:获取文本选区的起始点
+    - `selectionEnd {number}`:获取文本选区的起终点
 ## 约束
 
 目前不支持 `this.$el(id).value = ''` 这种方式改写 input value。只支持在 `<input>` 组件的 `input`、`change` 事件中改写。
diff --git a/doc/source/cn/references/components/list.md b/doc/source/cn/references/components/list.md
index 2cb0a90..335eef3 100644
--- a/doc/source/cn/references/components/list.md
+++ b/doc/source/cn/references/components/list.md
@@ -43,8 +43,6 @@
 
 - `loadmoreoffset {number}`:默认值为 0,触发 `loadmore` 事件所需要的垂直偏移距离(设备屏幕底部与 `<list>` 底部之间的距离)。当 `<list>` 的滚动条滚动到足够接近 `<list>` 底部时将会触发 `loadmore` 这个事件。
 
-  ![mobile_preview](../images/list_4.jpg)
-
 ## 样式
 
 - 通用样式:支持所有通用样式
@@ -61,8 +59,6 @@
 
 - `loadmore` <sup class="wx-v">0.5+</sup>:如果列表滚动到底部将会立即触发这个事件,你可以在这个事件的处理函数中加载下一页的列表项。
 
-  [体验一下](http://dotwe.org/bc445ede8746a31360e3607d210304c5)
-
 - 通用事件
 
   支持所有通用事件:
diff --git a/doc/source/cn/references/components/refresh.md b/doc/source/cn/references/components/refresh.md
index a6eb6fb..24a5823 100644
--- a/doc/source/cn/references/components/refresh.md
+++ b/doc/source/cn/references/components/refresh.md
@@ -36,7 +36,14 @@
 ## 事件
 
 - `refresh`: 当 `<scroller>`/`<list>` 被下拉时触发。
-- `pullingdown`:仅在 Android 支持。当 `<scroller>`/`<list>` 被下拉时触发,可以从事件的参数对象中获取 dy,headerHeight,maxHeight
+- `pullingdown`<span class="weex-version">v0.6.1+</span>: 当 `<scroller>`/`<list>` 被下拉时触发,可以从事件的参数对象中获取 dy,pullingDistance, viewHeight, type
+
+  ```
+  dy: 前后两次回调滑动距离的差值
+  pullingDistance: 下拉的距离
+  viewHeight: refreshView 高度
+  type: "pullingdown" 常数字符串
+  ```
 
 ## 约束
 
diff --git a/doc/source/cn/references/components/waterfall.md b/doc/source/cn/references/components/waterfall.md
new file mode 100644
index 0000000..08b01ac
--- /dev/null
+++ b/doc/source/cn/references/components/waterfall.md
@@ -0,0 +1,69 @@
+\---
+
+title: <waterfall>
+
+type: references
+
+order: 2.5
+
+version: 2.1
+
+\---
+
+# waterfall
+
+<span class="weex-version">v0.11.0+</span>
+
+提供瀑布流布局的组件
+
+### 子组件
+
+注意:  和list一样, waterfall 只支持特定类型的组件: cell, header, refresh, loading 和 fixed-position 组件. 
+
+- `cell`: 瀑布流中的每个元素
+- `header`: 主要用于表示横跨多列的元素,可以通过css的position属性设置为sticky
+
+### 特性
+
+- **column-width** : 描述瀑布流每一列的列宽
+  - `auto`: 意味着列宽是被其他属性所决定的(比如 column-count)
+  - `<length>`: 最佳列宽,实际的列宽可能会更宽(需要填充剩余的空间), 或者更窄(如果剩余空间比列宽还要小)。 该值必须大于0
+- **column-count**: 描述瀑布流的列数
+  - `auto`: 意味着列数是被其他属性所决定的(比如 column-width)
+  - `<integer>`: 最佳列数,column-width 和  column-count 都指定非0值, 则 column-count 代表最大列数。
+- **column-gap**: 列与列的间隙. 如果指定了 `normal` ,则对应 `32`.
+
+其他支持的属性参见 [List Component Attributes](./list.html) 
+
+### 样式
+
+通用样式:支持所有通用样式
+
+- 盒模型
+- `flexbox` 布局
+- `position`
+- `opacity`
+- `background-color`
+
+查看 [组件通用样式](../common-style.html)
+
+### 事件
+
+- 通用事件
+
+  支持所有通用事件:
+
+  - `click`
+  - `longpress`
+  - `appear`
+  - `disappear`
+
+  查看 [通用事件](../common-event.html)
+
+### API
+
+滚动到列表某个指定项是常见需求,`<waterfall>` 拓展了该功能支持滚动到指定 `<cell>` 或者 `<header>`。通过 `dom` module 访问,更多信息可参考 [dom module](../modules/dom.html) 。
+
+### 示例
+
+参见 [playground waterfall example](http://dotwe.org/vue/7a9195643e9e8da352b0d879cdbe68c0)
\ No newline at end of file
diff --git a/doc/source/cn/references/components/web.md b/doc/source/cn/references/components/web.md
index fb48aa9..42f0681 100644
--- a/doc/source/cn/references/components/web.md
+++ b/doc/source/cn/references/components/web.md
@@ -64,7 +64,7 @@
 <template>
   <div class="wrapper">
     <div class="group">
-      <input class="input" ref="input" type="url" autofocus="false" value="https://m.taobao.com"></input>
+      <input class="input" v-model="value" ref="input" type="url" autofocus="false"></input>
     </div>
     <div class="group">
       <text class="button" @click="loadURL">LoadURL</text>
@@ -81,12 +81,13 @@
   export default {
     data () {
       return {
-        url : 'https://m.alibaba.com'
+        url : 'https://m.alibaba.com',
+        value: 'https://m.alibaba.com'
       }
     },
     methods: {
       loadURL (event) {
-        this.url = this.$refs.input.value
+        this.url = this.value
         modal.toast({ message: 'load url:' + this.url })
         setTimeout(() => {
           console.log('will go back.')
@@ -107,7 +108,7 @@
         console.log('pagefinish', event)
         modal.toast({ message: 'pagefinish' })
       },
-      finish (event) {
+      error (event) {
         console.log('error', event)
         modal.toast({ message: 'error' })
       }
@@ -151,4 +152,4 @@
 </style>
 ```
 
-[try it](http://dotwe.org/vue/154c7fa8ac13e87ff4e7bf9862147d50)
+[try it](http://dotwe.org/vue/221ff37113a12d692a7a92a100f20162)
diff --git a/doc/source/cn/references/modules/dom.md b/doc/source/cn/references/modules/dom.md
index 2fa153a..c9586f0 100644
--- a/doc/source/cn/references/modules/dom.md
+++ b/doc/source/cn/references/modules/dom.md
@@ -11,7 +11,7 @@
 
 这部分API是通过把 virtual-dom 的消息发送到 native 渲染器来做到的。
 
-开发者在日常开发中,唯一可在 `.we` 文件中使用的是 `scrollToElement`。
+开发者在日常开发中,唯一可在 `.vue` 文件中使用的是 `scrollToElement`。
 ~~你也可以调用 `$scrollTo` 方法来使用它~~
 
 这个页面提及的其他的 API,只在 `callNative` 进程中的 native 渲染器用。
@@ -30,7 +30,7 @@
 - `node {Node}`:你要滚动到的那个节点
 - `options {Object}`:如下选项
   - `offset {number}`:一个到其可见位置的偏移距离,默认是 `0`
-
+ - `animated {bool}`:设置是否有滚动动画,默认是 true
 #### 示例
 
 ```html
@@ -144,8 +144,8 @@
 
 ```html
 <template>
-  <div class="wrapper">
-    <div ref="box" class="box">
+  <div class="wrapper" style='margin-top:200px'>
+    <div ref="box"  class="box">
       <text class="info">Width: {{size.width}}</text>
       <text class="info">Height: {{size.height}}</text>
       <text class="info">Top: {{size.top}}</text>
@@ -153,11 +153,26 @@
       <text class="info">Left: {{size.left}}</text>
       <text class="info">Right: {{size.right}}</text>
     </div>
+    
+    <text class="info btn"  @click='click()'>{{this.tip}}</text>
+      
   </div>
-</template>
+</template> 
 
 <script>
   const dom = weex.requireModule('dom')
+  
+ function round(size) {
+      var roundSize = {
+        'width': Math.round(size.width),
+        'height': Math.round(size.height),
+        'top': Math.round(size.top),
+        'bottom': Math.round(size.bottom),
+        'left': Math.round(size.left),
+        'right': Math.round(size.right)
+      }
+      return roundSize
+  }
 
   export default {
     data () {
@@ -169,26 +184,60 @@
           bottom: 0,
           left: 0,
           right: 0
-        }
+        },
+        ref:"viewport",
+        tip:"get box rect"
       }
     },
     mounted () {
-      const result = dom.getComponentRect(this.$refs.box, option => {
+      const result = dom.getComponentRect(this.ref, option => {
         console.log('getComponentRect:', option)
-        this.size = option.size
+        this.size = round.call(this,option.size);
       })
-      console.log('return value:', result)
-      console.log('viewport:', dom.getComponentRect('viewport'))
+    },
+    
+    methods:{
+      click:function() {
+        if (this.ref === 'viewport') {
+          this.ref = this.$refs.box;
+          this.tip = "get viewport rect"
+        } else {
+          this.ref = 'viewport'
+          this.tip = "get box rect"
+        }
+          
+         const result = dom.getComponentRect(this.ref, option => {
+          console.log('getComponentRect:', option)
+          this.size = round.call(this,option.size);
+        })
+      }
     }
+    
   }
 </script>
 
 <style scoped>
+  .btn {
+    margin-top:20px;
+    border-width:2px;
+    border-style: solid;
+    border-radius:10px;
+    width:300px;
+    margin-left:170px;
+    padding-left:35px;
+    border-color: rgb(162, 217, 192);
+    
+  }
+  .btn:active {
+    background-color: #8fbc8f;
+		border-color: gray;
+  }
+  
   .box {
-    margin-top: 200px;
+    align-items:center;
     margin-left: 150px;
-    width: 450px;
-    height: 450px;
+    width: 350px;
+    height: 400px;
     background-color: #DDD;
     border-width: 2px;
     border-style: solid;
@@ -197,13 +246,15 @@
   }
   .info {
     font-size: 40px;
+    top:30px;
+    margin-left:20px;
     font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
     color: #41B883;
   }
 </style>
 ```
 
-[try it](http://dotwe.org/vue/87d4ed571de129ab28052b06a5d65fc8)
+[try it](http://dotwe.org/vue/d069a9bf0f0781b914f12a9a7b9a1447)
 
 ## 其他
 
diff --git a/doc/source/cn/references/modules/globalevent.md b/doc/source/cn/references/modules/globalevent.md
index d5bf004..f588aa8 100644
--- a/doc/source/cn/references/modules/globalevent.md
+++ b/doc/source/cn/references/modules/globalevent.md
@@ -9,7 +9,7 @@
 
 <span class="weex-version">0.8 (开发中)</span>
 
-`globalEvent` 用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外 APIs 处理的次要 API。你能通过 `addEventListener` 注册事件监听,当你不再需要的时候,也可以通过 `removingEventListener` 取消事件监听。
+`globalEvent` 用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外 APIs 处理的次要 API。你能通过 `addEventListener` 注册事件监听,当你不再需要的时候,也可以通过 `removeEventListener` 取消事件监听。Vue 版本暂不支持 `globalEvent`。
 
 *提醒*
 
diff --git a/doc/source/cn/references/modules/modal.md b/doc/source/cn/references/modules/modal.md
index 614d249..6c42e50 100644
--- a/doc/source/cn/references/modules/modal.md
+++ b/doc/source/cn/references/modules/modal.md
@@ -20,6 +20,8 @@
 - `options {Object}`:相关选项
   - `message {string}`:展示的内容
   - `duration {number}`:展示的持续时间(以秒为单位)
+    - Android: 如果时间长度大于3s,将使用一个被称为**LONG**的系统变量, 否则使用**SHORT**这个系统变量
+    - iOS: 持续的时间同Duration相同。
 
 ### `alert(options, callback)`
 
diff --git a/doc/source/cn/references/modules/storage.md b/doc/source/cn/references/modules/storage.md
index e0c8637..2a88a3a 100644
--- a/doc/source/cn/references/modules/storage.md
+++ b/doc/source/cn/references/modules/storage.md
@@ -181,4 +181,4 @@
 ## 其它参考
 
 * [W3school: html5 localStorage](http://www.w3school.com.cn/html5/html_5_webstorage.asp)
-* [storage 模块完整的 Demo](https://github.com/alibaba/weex/blob/dev/examples/module/storage-demo.we)
+* [storage 模块完整的 Demo](https://github.com/apache/incubator-weex/blob/dev/examples/module/storage-demo.we)
diff --git a/doc/source/cn/references/modules/websocket.md b/doc/source/cn/references/modules/websocket.md
index 8efaaa6..de99ad3 100644
--- a/doc/source/cn/references/modules/websocket.md
+++ b/doc/source/cn/references/modules/websocket.md
@@ -13,9 +13,9 @@
 
 ## **注意:**
 - iOS和h5提供 WebSockets 的 protocol 默认实现,安卓使用需要提供自定义 adapter 实现,source:  
-  - [DefaultWebSocketAdapter.java](https://github.com/alibaba/weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java);
-  - [DefaultWebSocketAdapterFactory.java](https://github.com/alibaba/weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
-  - 集成例子参考weex [playground](https://github.com/alibaba/weex/tree/dev/android/playground)
+  - [DefaultWebSocketAdapter.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java);
+  - [DefaultWebSocketAdapterFactory.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
+  - 集成例子参考weex [playground](https://github.com/apache/incubator-weex/tree/dev/android/playground)
 
 - 只在.we文件支持,不支持vue2.0
 
diff --git a/doc/source/cn/references/modules/webview.md b/doc/source/cn/references/modules/webview.md
index 30a1a42..7cfe32a 100644
--- a/doc/source/cn/references/modules/webview.md
+++ b/doc/source/cn/references/modules/webview.md
@@ -47,7 +47,7 @@
 <template>
   <div class="wrapper">
     <div class="group">
-      <input class="input" ref="input" type="url" autofocus="false" value="https://m.taobao.com"></input>
+      <input class="input" v-model="value" ref="input" type="url" autofocus="false"></input>
     </div>
     <div class="group">
       <text class="button" @click="loadURL">LoadURL</text>
@@ -64,12 +64,13 @@
   export default {
     data () {
       return {
-        url : 'https://m.alibaba.com'
+        url : 'https://m.alibaba.com',
+        value: 'https://m.alibaba.com'
       }
     },
     methods: {
       loadURL (event) {
-        this.url = this.$refs.input.value
+        this.url = this.value
         modal.toast({ message: 'load url:' + this.url })
         setTimeout(() => {
           console.log('will go back.')
@@ -90,7 +91,7 @@
         console.log('pagefinish', event)
         modal.toast({ message: 'pagefinish' })
       },
-      finish (event) {
+      error (event) {
         console.log('error', event)
         modal.toast({ message: 'error' })
       }
@@ -134,4 +135,4 @@
 </style>
 ```
 
-[try it](http://dotwe.org/vue/154c7fa8ac13e87ff4e7bf9862147d50)
+[try it](http://dotwe.org/vue/221ff37113a12d692a7a92a100f20162)
diff --git a/doc/source/cn/references/path.md b/doc/source/cn/references/path.md
index 3d256fb..9e5a889 100644
--- a/doc/source/cn/references/path.md
+++ b/doc/source/cn/references/path.md
@@ -18,7 +18,7 @@
 
   Weex SDK 提供 `local`  scheme 来访问打包在应用程序中的资源,此 scheme 无法在 H5 环境下使用。目前,开发者可以在 `image` 组件和字体文件中使用本地资源。 
 
-  * 在 iOS 中,Weex 会在 `bundle resources` 中查找。例如,`image` 组件的 `src` 属性为 `local://app_icon'`, Weex 会加载 `bundle resouce` 中名为 `app_icon` 的图像资源,而字体文件也以相同的方式工作。 
+  * 在 iOS 中,Weex 会在 `bundle resources` 中查找。例如,`image` 组件的 `src` 属性为 `local:///app_icon'`, Weex 会加载 `bundle resouce` 中名为 `app_icon` 的图像资源,而字体文件也以相同的方式工作。 
 
   * 在 Android 中,`image` 组件将从 `drawable` 资源文件夹加载,如  `res/drawable-xxx`。但加载字体文件是不同的,Android 框架无法从 `res` 加载字体文件,因此 SDK 将从 `asserts` 文件夹加载它。
 
diff --git a/doc/source/cn/releasenote.md b/doc/source/cn/releasenote.md
new file mode 100644
index 0000000..8e5c617
--- /dev/null
+++ b/doc/source/cn/releasenote.md
@@ -0,0 +1,858 @@
+---
+title: Release Note
+type: releasenote
+layout: post
+---
+
+# Release Note
+
+## v0.10.0
+------
+- New Feature
+  - Support Vue.js  
+    The Vue.js 2.1.8 ([runtime-only build](https://vuejs.org/v2/guide/installation.html#Standalone-vs-Runtime-only-Build)) is in WeexSDK now. You can use Vue.js to build native app by WeexSDK 0.10.0.  
+    We reused the original native render engine and developed a new renderer ([weex-vue-render](https://www.npmjs.com/package/weex-vue-render)) for the web platform, which is based on Vue 2.0.  
+    The former front-end framework (commonly known as `.we`), which is inspired by Vue 1.0, is deprecated. Although it still works well in this release, we suggest to migrate it to Vue 2.0.
+  - SDK
+    - New CSS support
+      - [text `font-weight`](https://weex-project.io/references/text-style.html)  
+        `font-weight` can set to [`normal`|`bold`] or 100-900.
+      - gradient  
+        like CSS3, now you can use gradient in Weex. For example:   
+        
+        ``` css
+        background-image: linear-gradient(to right, blue, white);
+        ```
+        ![img_1695](https://cloud.githubusercontent.com/assets/115201/23015955/ba075876-f46f-11e6-9d88-2ca3096551b9.jpeg)
+        [Read more about gradient](https://weex-project.io/references/common-style.html).
+      - Pseudo class  
+        Currently, Weex supports 4 pseudo classes:`active`, `focus`, `disabled`, `enabled`. 
+    - New BroadcastChannel API
+      Developers can use `BroadcastChannel` API to implement inter-instance communication.   
+      
+      ``` js
+      const Stack = new BroadcastChannel('Avengers')
+      Stack.onmessage = function (event) {
+        console.log(event.data) // in this case, it's "Hulk Smash !!!"
+      }
+      
+      // in another instance
+      const Hulk = new BroadcastChannel('Avengers')
+      Hulk.postMessage("Hulk Smash !!!")
+      ```
+    - Image's `onload` event add [`naturalHeight` and `naturalWidthimage`](https://weex-project.io/references/components/image.html) to get the original size of image file.
+    - Websocket Support  
+      WebSockets is an advanced technology that makes it possible to open an interactive communication session between the user's h5/iOS/android and a server. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply.  
+      [Read more about Weex's websocket.](https://weex-project.io/cn/references/modules/websocket.html)
+    - Support synchronous method call
+      Both module and component method can defined synchronous method exposed to JS runtime now. Means native will invoke these method in JS thread directly.
+    - Support `viewport` configuration
+      Similar to [W3C specification](https://drafts.csswg.org/css-device-adapt/#viewport-meta), Weex support set define `viewport` in script tag:   
+      
+      ``` html
+      <script type="config">
+        {
+          "viewport": {
+              "width": "device-width"
+          }
+        }
+      </script>
+      ```
+  - Tools   
+    - [Devtools](https://github.com/weexteam/weex-devtool)
+      - Support Vue 2.0 debugging.  
+      - Add network switch for network inspector.
+      - Make application capable to decide which bundle is 'un-debuggable', which means page's source code is unreadable in debug mode.
+    - [Weexpack](https://github.com/weexteam/weex-pack)
+      - Has full set of commands for developers to setup android/ios application with his .we/.vue files.
+      - Developers could easily pack/install his application with simple command.
+      - Has full set of commands for developers to manage weex plugins, including create plugin template, add plugin to his project etc.
+      - [Plugin market](http://market.weex-project.io) was formally used for developers to publish/download weex plugins.
+- Bugfix
+  - \* [android] add fixed size property 5191241
+  - \* [android] bug fix NPE && cache ScreenWidth and ScreenHeight 950e843
+  - \* [android] bugfix duplicate destroy 25412e0
+  - \* [android] bugfix keyboard force hide (#106) 0ad2f95
+  - \* [android] bugfix scroller offset transform twice cd7ad66
+  - \* [android] change gradle to fix build 1feaadf
+  - \* [android] ClipPath doesn't work when the following conditions met   1. rotation or scale is used   2. API level is 24 As border-radius uses clipPath, this will cause views with border-radius using rotation or scale on API level 24 doesn't. So far, this is a bug of Android N,https://code.google.com/p/android/issues/detail?id=225556&sort=-id&colspec=ID f69e918
+  - \* [android] Fix bug of border width due to viewport. Refer https://github.com/sospartan/weex/commit/7cfe9752e0c95f3b23bedfa3f51ba3bafb4318f4#diff-42908d45812780fec8606537dffab67dL1054 9cd6800
+  - \* [android] fix cast exception 3136fcf
+  - \* [android] fix DCL thread safely (#48) 62e9b71
+  - \* [android] fix duplicate add component child to list 3fd73d7
+  - \* [android] fix find component 45643ab
+  - \* [android] fix getScreenWidth with context parameter (#80) 16377f2
+  - \* [android] fix inefficient use of keySet iterator instead of entrySet iterator (#47) dac80e2
+  - \* [android] fix intrinsicSize when img.resize=contain b6272a2
+  - \* [android] fix npe in onScrollerListener (#138) 8141de7
+  - \* [android] fix npe in stream callback 24aa2c2
+  - \* [android] fix PageActivity duplicate add view to container 06f77b8
+  - \* [android] fix refresh crash after destoryed (#144) 51ea00b
+  - \* [android] fix refresh/loading a726d3c
+  - \* [android] fix slider auto scroll behavior 28926ba
+  - \* [android] fix slider layout, ignore position offset. a0381e4
+  - \* [android] fix some weak code that may cause file leak or useless (#49) 8d0f049
+  - \* [android] fix stackoverflow 6a01059
+  - \* [android] fix stream response status type (#63) 8580c66
+  - \* [android] fix switch case (#127) c301b92
+  - \* [android] fix textarea vertical gravity 9730948
+  - \* [android] fix the IllegalArgumentException on empty arguments f799d67
+  - \* [android] fix the wrong header location (#135) d58fce9
+  - \* [android] fix typo: WebSocket -> webSocket c162d54
+  - \* [android] fix wrong initial direction value on appear event (#107) 593c799
+  - \* [android] modify default real position (+1 squashed commit) Squashed commits: [9470835] \* [android] fix unittest b915584
+  - \* [android] move indicator layout logic to subclass;seperate fixed layout logic fc2a009
+  - \* [android] rename debug activity 95ab73a
+  - \* [android] update fix do not remove loading and fresh ddf74ff
+  - \* [html5] fix border & border-width for less than 1px. (#2059) 3eb34b9
+  - \* [html5] fix bugs of neighbor 34fafb2
+  - \* [html5] fix compatibility problem & support deps arguments. 00e7079
+  - \* [html5] fix content-type error 5b06140
+  - \* [html5] fix h5 build 56e9c03
+  - \* [html5] fix shrink & grow for flex. (#2082) b5b600d
+  - \* [html5] fix slider container's style. (#2157) a79bd9c
+  - \* [html5] fix uncaught dom exception for video.play. (#1877) 7a0bd03
+  - \* [html5] fixbug:change name from WebSocket to webSocket] (#2146) b72bbb9
+  - \* [ios]  bug fix: websocket module name is changed , playground should change 3f35b82
+  - \* [ios] bug fix: onload success value type is not same as android, change it for unify 531633c
+  - \* [ios] bugfix call renderFinish 1fb2e0a
+  - \* [ios] bugfix module default method not called 0be9f87
+  - \* [ios] bugfix moduleEvent compatible dbea448
+  - \* [ios] bugfix multi input or textarea maybe wrongly change root view frame a2e97db
+  - \* [ios] bugfix navigation pop animated value convert cfe98a8
+  - \* [ios] bugfix navigator open and close. beef00b
+  - \* [ios] bugfix rootView information  coordinate 7313703
+  - \* [ios] bugfix slider-neighbor may beyond item count index cbfa9df
+  - \* [ios] bugfix view event 83d3e6a
+  - \* [ios] bugfix: playground cannot open c949463
+  - \* [ios] bugfix:delete configpicker not delete the method in header cc3afc2
+  - \* [ios] fix : Change the lastoffsetXRatio to lastOffsetXRatio de8f246
+  - \* [ios] fix : Change the parameter wording to make it more in line with development habits. 869da54
+  - \* [ios] fix : if _fontFamily is nil set _fontFamily value with the correct system font. In the case of Chinese characters, this logic help system select the right system default font name. 6e202b6
+  - \* [ios] fix : improve slider-neighbor demo code .remove useless <container> label and <scroller> label. 2c236c8
+  - \* [ios] fix bug : you can't slide to the right when the slider has only two pages. d224bfb
+  - \* [ios] fix bug that border-x-radius not work 96ba5b5
+  - \* [ios] fix bug that horizontalpan and verticalpan can not trigger simultaneously eb03cb0
+  - \* [ios] fix bug: text input padding is not right f4accba
+  - \* [ios] fix crash after returning id type, need to copy here. 4f5276b
+  - \* [ios] fix issue that cells pushed down by inserted cells will not trigger disappear event. 9dcc4dd
+  - \* [ios] fix issue that rotate 90->180->270 not work. 5b3c13d
+  - \* [ios] fix issue that rotate(0) not work after rotate(>180degree) 0f6989d
+  - \* [ios] fix issue that there will be 1px space remaining between list's top and navigator when UITableView is pulled down and finger releases. d286e3c
+  - \* [ios] fix typo in [WXSDKEngine initSDKEnvironment] 17a093f
+  - \* [ios] fix variable name spelling error becd631
+  - \* [ios] Fixed :Merge remote-tracking branch 'alibaba/ios-feature-20170118' into ios-feature-20170118-new-slider-neighbor-fix    move "sliderview init" code to loadview method. 141fd9d
+  - \* [ios] fixed component's view should be removed separately since its view is a subview of rootview. f9b2378
+  - \* [ios] fixed issues that horizontal/vertical pan not respond while recyling views. c7b4bec
+  - \* [ios] js service bug fixed c068bd7
+  - \* [ios] removed debug code and fixed bug 548984f
+  - \* [ios] update navigator module, add open and close interface. f65c42f
+  - \* [ios] upgrade JSFM to 0.19.3 to fix callback problem 9ab9b92
+  - \* [jsfm] fix mismatch of weex.require and weex.document ad63f2a
+  - \* [jsfm] fix support native method bug ce26a6f
+  - \* [jsfm] fixed Promies bug in android 17282c2
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.10.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.10.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+
+## v0.9.4
+------
+- New features
+  - SDK
+    - New API to get Component's size and position:
+      Now you can get these data through `getComponentRect`:   
+      ``` javascript
+      var dom = require('@weex-module/dom');
+      dom.getComponentRect(this.$el('comp_id'), function(data){
+        if(data.result)
+          console.log(data);
+      });
+      ```
+      The `data` callback parameter contains a `result` to tell if operation is success. And `size` tell you the true data(`bottom`/`top`/`left`/`right`/`width`/`height`) of component.
+    - A brand new `picker` module. We have 'single-picker','date-picker' and 'time-picker' currently, and more common pickers are on the way.  
+      ![img_1282](https://cloud.githubusercontent.com/assets/115201/21414801/e6341b36-c83d-11e6-9e5a-3acdabb592ee.png)
+    There are two ways to use `picker`
+    - Use `picker` module directly:
+    ``` javascript
+    var picker = require('@weex-module/picker');
+    var self = this;
+    picker.pickDate({
+        'value':'2016-11-28',
+        'max':'2029-11-28',
+        'min':'2015-11-28'
+    },function (ret) {
+        var result = ret.result;
+        if(result == 'success')
+        {
+            self.value = ret.data;
+        }
+    });
+    ```
+    - `input` component also add 'date' and 'time`type to work with`picker` module internally:
+    ``` html
+    <input
+      type="date"
+      placeholder="select date"
+      class="input"
+      autofocus="false"
+      value=""
+      onchange="onchange"
+      max = "2029-11-28"
+      min = "2015-11-28"
+              ></input>
+    ```
+  - Support animation with `width` and `height` property.
+  - Support use empty value to reset css property to default value.
+  - Components can expose methods too, like modules do. Developers use the same way as create module method to achieve that.
+  -  Add `blur` and `focus` method to manually control `input` component to lose or get focus.
+  -  Support relative URL, which will resolve real URL by bundle's URL.
+  -  Core javascript framework's unit test coverage is 100% now. we'll pay more attention to quality.  
+  - DevTool
+    - Support to check the node hierarchy in [weex-devtool-extension](https://github.com/weexteam/weex-devtool-extension) and highlight the node if it exceeds an specified level.
+    - Support different refresh mode in devtools to reload the page or SDK automatically when source file updated.
+    - Improve quality in [weex-devtools-android](https://github.com/weexteam/weex-devtools-android) module
+      - Remove explicit dependency on okhttp and okhttp3 by reflection and proxy
+      - Improve demo application with less and refactored code
+      - Fix some crash caused by class up cast
+      - Fix reflection crash caused by complier optimization
+      - Fix "network on main thread" and stop screencast when disconnect
+    - Add [weex-analyzer-android](https://github.com/weexteam/weex-analyzer-android) and [weex-analyzer-ios](https://github.com/weexteam/weex-analyzer-ios) which support the following on device directly:
+      - Inspect FPS/CPU/memory
+      - Inspect storage
+      - Display log information
+      - 3D viewer of the weex page
+      - Javascript error prompt
+- Bugfix
+- \* [android] bug fix slider (#56) 29b9d29f5acd9677a64316b94d5c95f8c7f1a837
+- \* [android] bugfix duplicate destroy 0a59a85467671ddb982fbea6def810e6fa415137
+- \* [android] bugfix scroller offset transform twice 1db300d470951f543236e0b605d7b5a974b96430
+- \* [android] fix appear event not trigger at first 85085a394dd2bae5e397b889c01c1e1a3b8e6b46
+- \* [android] fix build 46bcf4298cd74c1d9706255143f95e0299ebdd15
+- \* [android] fix callback parameter 16db52ed031f7182f2159bc18c0c6e20e7c907f7
+- \* [android] fix dialog window leaked (#55) 4c478044355d6d552fb2f72935cd93867e5f0802
+- \* [android] fix different behavior with iOS switch (#43) 7708a6680e51ae6af9351724940778ce953538ed
+- \* [android] fix dynamic inserted header not sticky display 83c06383aa513061d144ec448ce0ccc25bde5484
+- \* [android] fix fireevent change key 9fb7d0f25d6b1bfe54fb63c9b73c53f8c927e4ad
+- \* [android] fix flash when render video tag a53e6b80b8fa67cce85307a2e5e93d9fb6c28784
+- \* [android] fix list not lazy 0be12be1194bea0c624791662e9f38aac4f0c3fd
+- \* [android] fix methods generate external-loader-component ec6d4136a29c1626470d3bbba90db3d9916c374e
+- \* [android] fix move child from index to index b within the same parent 72259e7a5734ed9a595de080d05ea8e1bf1e716e
+- \* [android] fix slider auto scroll a8d74031dbd526201c05433a08c8aac2047b7a66
+- \* [android] fix slider auto scroll after activity resume bba3bdea45bfb4030b10ea9a847a77463d1ab20a
+- \* [android] fix slider auto scroll after activity resume e0d5e79fc29e07b734d892073effc041a39c85c6
+- \* [android] fix stackoverflow in slider c1f1d702110f49ead4005fae50e4e63c5e72cfac
+- \* [android] fix sticky not display when scrolltoelement 22d163cb572e6b1c510c350a692a4265eb27e204
+- \* [android] fix test d756db8b4c26f8610076a13a0980d024a4e734ac
+- \* [android] fix textarea content vertical gravity eecc32c0a72ce82aa4e998cabb31308fc737fe95
+- \* [android] fix the invalid index of slider-neighbor (#62) 59fd5742a23908174de12804b1a0992d89663afd
+- \* [android] fix unittest 0b2a3778dfa39f17ae6346168b55a3418d85aa1b
+- \* [android] fix unittest 0d2bd982507820f5840e99ee12cd351ae6eb18e5
+- \* [android] fix unittest 4f120b6dbcb4433c8c320c310cd4de051163780c
+- \* [android] fix unittest 6129cd2ed06ce7acc0366b4c172bdf199d52e997
+- \* [android] fix wrong behavior with slider.index (cherry picked from commit c59ae39) 3028f32278a47603d1dc9f0f4314b44721069ac4
+- \* [android] fix wrong behavior with slider.index c59ae3977837be238b08b69388aec12eb4817716
+- \* [android] move element  bug fix dfc643df7fb100737c98efa7f5932e75d07ca59f
+- \* [android] move element  bug fix f28fbdd3ac57c157f52d82fa9473e8651b88023b
+- \* [android] NPE fix ee67a26c045cc351d317e805712bd6e50c4213cb
+- \* [android] Parent's "append=tree" will prevent child's transform style, this commit fix it by add the whole dom tree to animation set instead of the root dom. \* 626915b34bfb348947709c23e09a3dac7acd6962
+- \* [android] slider: fix the IllegalStateException (#58) 0e94762e1ebc240a5e8be6c131848b57bb48b1ea
+- \* [android] v8 security bug fix 7a8f14b78753fd02d59b126fffbd52996376ecc3
+- \* [html5] fix the conflict ac845591a65501c4eae70471502d8370f9983130
+- \* [html5] fix wwp config 0a2420a7202887a0222c0294c510267f139858c8
+- \* [html5] fixed lazyLoad filename 4119190c6b093f87bcb8ebd00f23bd939c307ad1
+- \* [html5] fixed rollup build 03f241ce3c7d8ac786b632f80aa22b94fdc00d34
+- \* [ios] 1. fix refresh location 2. cancel playground re-checkupdate 69f43da52ab22c7777d54bc2d9f45e95eb1d437f
+- \* [ios] bug fix 1664, add resetLoadmore on scroller & list. 4efe8662912ec5a8ce5fac8e09c2e061a21056a4
+- \* [ios] bug fix picker 2d979a58c4b37e93dda5b775d79a7a1ea2165c22
+- \* [ios] bug fix picker 983fe0069ff670b92b6fa7e3e6e29c5b2c768762
+- \* [ios] bug fix picker rescue 27fe3f23bb63072b766f75b69351464d163b331a
+- \* [ios] bug fix setNeedsLayout in every elements. not in once. because elements not contain css node only edd47e09ff453a26c7b176279d0ab84454d4914a
+- \* [ios] bug fix update code style 05b2959be0e0c35ad31b5b20b77f86f296786da2
+- \* [ios] bug fix: change resetTextCSSNodes to resetTextCSSNode a782e092b175a0a34db7cfccb74b5f157ddb3fd4
+- \* [ios] bug fix: refresh view layout error. b0c4a403b1e1dc8aa500c60efcef263b6f7fdd6f
+- \* [ios] bug fix:slider does not remove items  synchronously when item view has been remove from superview. f60997fc3fe7bcfd220e159d61dbaae438e59131
+- \* [ios] bugfix add register component type f7e72ea289ce5f909fb9f6b61705e4f4b9930c53
+- \* [ios] bugfix cancel url uft8-encode 6b67a9e8a3f62849709d552bea0d947679164041
+- \* [ios] bugfix cancel url uft8-encode 9a43cfc9ecb9683562560a880d0f026fd28e93ea
+- \* [ios] bugfix component load rewriteurl f92a6d70e0f3db1eb14c4d90c7e30609e5175dff
+- \* [ios] bugfix globalEvent removeObserver don't need specify target a5420939bac4e21ef61b15710e2fa5e205403d96
+- \* [ios] bugfix iconfont load font , support woff 4c5d5812cb145d60270c5e59ae29def9be8fdcf3
+- \* [ios] cancel animation while handle input keyboard and fix bug when there are many input in a page 61f9259bf77c59916d3dbcdf62b12cd0161698b4
+- \* [ios] debug performance ae3d30802681990e79ce06fb4229b74f3c1d99c2
+- \* [ios] fix #1192, #FFF display error in iOS 5df5cd3739e79ec6e2fefbff66ba7ba2a411d637
+- \* [ios] fix #1479, add handler for slider's items count less than or equal to 2 d654ed7d926c2e20b3a34315348a87470171cdd1
+- \* [ios] fix : Compatible non-standard url ("//a.b.example.png") 3da33595d6e1a261b1c761811d1d8f7672ba3db5
+- \* [ios] fix border's "Overlapping Curves" not recomputed when relayout d302adf14568a32d2b635a64d1326172d9590893
+- \* [ios] fix bug datepicker no update and crash eef4483b3176a0f2e18673e26068a6ec53fef5ca
+- \* [ios] fix bug debugTool unload 751b752f72690954c49ffaf8b89702a0f93712f2
+- \* [ios] fix bug default style f8f056e9f067b4ce23731cb3114383705a5926ac
+- \* [ios] fix bug height change to zero when style change 1ed428dda5d1b4e2b360f216b1b96433479dad28
+- \* [ios] fix bug height change to zero when style change a4d7ebea5e288b753ee71571b149130149768c6b
+- \* [ios] fix bug height change to zero when style change aac7c013003c055e840674e5f61dba4d5073dd73
+- \* [ios] fix bug height change to zero when style change bb8cdb1f2f7ff6ad9b8ac4de23323ca9dea7e0d9
+- \* [ios] fix bug that setFrame incorrectly when transform has been set 84dfd4c7395ae728356b660a0b605c7b85353973
+- \* [ios] fix bug that sticky component's absolutePosition will be computed twice if the actual absolute position is {0,0} a780352d0a1a139ce3e276404d03bd3f9e2e6fd6
+- \* [ios] fix bug: text area cursor auto go to end .reason: if attributes[@"value"] is exist. _updateAttributesOnMainThread will change textview text.the cursor go to end. \* solution: save the  textview  selectedRange , when set textview.text ,correct it d22836ef559809f566068bfe47be960a6d2e9faa
+- \* [ios] fix bug:_updateAttributesOnComponentThread reset styles delete 7c993d1952551ccfad2ad22f01ffa40ea9d12245
+- \* [ios] fix bundlejs 616f4653925c801406ca5fc80fd5f890c45c2b19
+- \* [ios] fix code style 31b08adf525559d9ce46f25eab349584d2f621a9
+- \* [ios] fix compiler complain about warning b92e471c1195f40f8167c8253ea0a909930a9880
+- \* [ios] fix componentRect infomation da08628c562dded860fe1558fb9dc187530223c9
+- \* [ios] fix componentSize to get 41af993f1ffd4e041083a0150607040b9e7cdef2
+- \* [ios] fix crash 55f69b502f0ff1f997dbfbe5238e35a4f123bc5b
+- \* [ios] fix crash on events' copy 491df3dca1fd47c1c564823c7f46527bf064c2dc
+- \* [ios] fix datepicker bug when no value can not pop right picker 24441ad6273e6093a9919b2699a4333b9d7147df
+- \* [ios] fix datepicker complie error 3bf2a0753cf47170144939d42173a668b22e27f5
+- \* [ios] fix datepicker complie error a362ef85918551bacac762ee660300e3108c1c5a
+- \* [ios] fix deprecated method of textarea 4d24f3ff7e792a1c97aa7ee31fbc7f0899c21efb
+- \* [ios] fix failed tests. b5210b244f2f2331be01c9afc4a8cde5b32ed0ee
+- \* [ios] fix input bind each other feb1e7c1ce959491fefed808e46e6291203ccbd7
+- \* [ios] fix ios7 crash f02eff33acab4a58a1a8d6e4d84cef44dcf09bf4
+- \* [ios] fix issue about WXConvert 's UIColor method add193b643c980e310866498dc081130ee287373
+- \* [ios] fix issue that iOS 7 will crash while alert still alive but instance has been destroyed 160a2dae54d6e656c980b9d008b15b0dc28aa4e1
+- \* [ios] fix issue that onappear/ondisappreat not work if binding to cell component. 63f6d7507731d2004e996f99bf859c228fc8b651
+- \* [ios] fix multi keyboard notification 684d3955de263cb39f8afc42c6ffa7340674c81a
+- \* [ios] fix navigator parameter b3117a9c482fb5491b5206413fa7607c356cf95a
+- \* [ios] fix override bundleUrl d7729716aea6652d325e4282ad6b42aaaf14f82c
+- \* [ios] fix playground Podfile   remove c header file  include in WXUtility.h e299feaf4076a5bf7140335ac6cc70d9d99a01da
+- \* [ios] fix responderToSelector target b0f550d6b94da6d9764863b328edfba6d730a75b
+- \* [ios] fix rootComponent order 999c59da3a1dc6c91f036b938c9963cc3cfe87c4
+- \* [ios] fix set navigator callback msg a30b7ed4978de3c91448a1c944431f19e942b515
+- \* [ios] fix single picker but 969d4212967c084a3477e3877052af224354f0e4
+- \* [ios] fix stream jsonp bug b018343b71eb7289bde326acf2f2fe1b124cfad8
+- \* [ios] fix testComponentFactory 99574bf0a1072dbfba547d74545783891b15cdff
+- \* [ios] fix tests compile error 461c24401e5fa1c37f9af25db35665f9f6b4a8da
+- \* [ios] fix text line-height and text-align conflict b1a0673020b7a271fb540ae723ca481aa18db7b4
+- \* [ios] fix textinput component inputEvent fired repetitiously 5c8242776f1410771a357735d6ae2a5b261b7d20
+- \* [ios] fix warning b8464248f61ad3ed9570730608e563f9c73e8ae6
+- \* [ios] fix warnning e2533d036daad60345284f276949dec06b5e0db9
+- \* [ios] fix when options is nil and then  bundleUrl will be nil 5f71a1a2eb7442cf63d9732a6a2b3e2cb3765fa1
+- \* [ios] fix WXSDKInstance rootview bug 3b08a516ff788ca116329dc863ffcb9f66979881
+- \* [ios] texture bug fix : when input change . the text content send to change a38f1b2b8e05e149f09ffbb986268339a9042691
+- \* [jsfm] fix #1447, fix binding event bug of components which have repeat attribute 421cc439d1b8b5abbdbba58882f6c39fd8f862c9
+- \* [jsfm] fix build 8162124f72caf9360657ebc5a2750554d36f3659
+- \* [jsfm] fix condition judgment bug in insertBefore & insertAfter 9c182af615e0e597e21a44217a511126333499e9
+- \* [jsfm] fix eslint c0db1807d080a26c7344f4cc57e5834e98b06085
+- \* [jsfm] fix eslint f75cbe955dc0bcdf33a608af82ab18d3290b87c3
+- \* [jsfm] fix format for lint 5faa860804c1d9adb719a450b53da165ec523e83
+- \* [jsfm] fix the npm run build d3e5124add2dd6a42b1209fe11a8dc58cd536487
+- \* [jsfm] fixed #1818 a757deb7235792c2dd11684500651f717f43226a
+- \* [jsfm] fixed all cases for default framework (black-box) c842ef884e45c568f9ae55e67a066a5de2de15ed
+- \* [jsfm] fixed all test scripts 95ba6a1d6c4211d62d7d2a6693c8aa1e5b7d9607
+- \* [jsfm] fixed all unit test for new file structure d4eb5c97daa34dc53dd929eaf736dcf22e8873b6
+- \* [jsfm] fixed browser render file structure ba7a40bca9a5759101e821c4e043e437b848dcde
+- \* [jsfm] fixed deps error 555ded73f6c6ecb5a9c110f34ab34e596c1c36eb
+- \* [jsfm] fixed html5 render for Vue 980d952d71903545a0bfa7115dfeacd8c7c71ae5
+- \* [jsfm] fixed lint and added case test a3e20a8c78feda705b853f2036cc17bd256f7bb8
+- \* [jsfm] fixed rollup config 4a1c208cf33fb3e5649f8116133f97b003e78127
+- \* [jsfm] fixed runtime instance map management b6e94fa1d54bfdc541ae7c48d98f4dc01481660f
+- \* [jsfm] fixed some vue examples ca2a9c57365a67c9215f69c438c86440a28704ce
+- \* [jsfm] fixed some vue examples da21405b7fab3228bda0e0b2a74853a05c5eb69a
+- \* [jsfm] fixed url checker in vue example 679dc1cffbd0413b9b81624ac46f61473cdf756d
+- \* [jsfm] removed timer bug case and replaced to slot bug case b6f2c8390e3a97df948fc8d2699d15eb62582625
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.9.4.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.9.4.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.8.0
+------
+
+- New Features
+  - Add [globalEvent module](https://github.com/alibaba/weex/blob/doc/doc/modules/globalevent.md)
+  - Support `width/height` animation in transition
+  - Refactor the default js framework code, hide almost all the private APIs #777
+  - iOS 10 compatibility
+- Performance
+  - Support `callAddElement` low-level API to make rendering faster
+  - Improve SDK initialization performance, for minimise invoke thread impact.
+  - Use native `Set` polyfill to fix iOS7 memory leak
+  - Use `setProperty` replace reflection for better performance
+  - Add `static` directive in default js framework to avoid unnecessary data-binding and take down the memory use
+- Tools
+  - Add [weex-pack](https://github.com/weexteam/weex-pack), our next generation of engineering development kits. It allows developers to create weex projects with simple commands and run the project on different development platforms.
+  - Add [weex-devtool-extension](https://github.com/weexteam/weex-devtool-extension), a extension for Weex devtool to improve your debug experience,which equivalent an element tag for debugger page.
+  - Move devtool to separate [iOS](https://github.com/weexteam/weex-devtool-iOS) and [Android](https://github.com/weexteam/weex_devtools_android) repos.
+    - Add "screencast" which enable the screen of the device(or monitor) to appear on the "Inspector" page; 
+    - Add "remote control" function, in Android user could control remote device(or monitor) when he moves mouse on screencast; 
+    - Add "select element" function which enable the user to find the exact node in "Elements" inspector Tab when he click the mouse on screencast;  
+    - Add "vdom inspector", so user can choose to see the details of native dom or vdom in "Elements" Tab at his preference; 
+    - Adjust interfaces with weex SDK to support "callAddElement"; 
+- Bugfix
+  - [jsfm] fix the bug of Dep.target 3448104
+  - [jsfm] fix the test of clearCommonModules 4be9291
+  - [jsfm] fix bug for clear common modules (pr #1097) d2f8c4d
+  - [jsfm] fix callAddElement callback -1 e421b41
+  - [jsfm] fix #1237, fix binding event bug of components which have repeat attribute bfed029
+  - [jsfm] fix bug af99cc1
+  - [jsfm] fixed & closed #1148 4209850
+  - [jsfm] fix merge classStyle fail between nested components 91c5cc6
+  - [jsfm] fix watcher dismatched bug between multi instance 900305d
+  - [jsfm] fixed _Set bug 51b219b
+  - [jsfm] fixed memory management bug in dom event handler in document 9024bda
+  - [jsfm] fixed Promise polyfill problem in iOS 7-8 9a61f33
+  - [android] fix #1380, update method getOffsetAmount in WXCircleViewPager.java (#1382) fd74539
+  - [android] bug fix native crash d8671bd
+  - [android] fix editComponent set non-string value 2e2f032
+  - [android] destroyInstance bugfix 6628460
+  - [android] update fix global event Memory leak fc6d403
+  - [android] add callAddElement debug log 95e3680
+  - [android] bug fix classcast exception e399306
+  - [android] fix circle ci 51d3294
+  - [android] fix slider start auto scroll after activity resume. 89bae89
+  - [android] fix log util implementation 10d508f
+  - [android] fix x86 so file size verification 21d5135
+  - [android] fix build b1fc231
+  - [android] fix log utility 530fe51
+  - [android] NPE bugfix 6d4385f
+  - [android] add cuurentRef to avoid reused bug d836725
+  - [android] bug fix update the ref when cell reused 1f7bf86
+  - [android] bug fix update the ref when cell reused cef277f
+  - [android] fix usertrack modify 8732d70
+  - [android] fix code format 936ebd5
+  - [android] bug fix- Loading layoutY ba0d34e
+  - [android] bug fix - Loading layoutY a8f3c95
+  - [android] bug fix - loading margin 7a3f1e0
+  - [android] fix Deprecated 6aa7da9
+  - [android] fix #1102 (#1103) 5aea5c6
+  - [android] fix merge problem 7923b1e
+  - [android] fix typo 1de6800
+  - [android] fix scroller&list appearance event da1ee4d
+  - [android] fix invaild add dom operation 14b5943
+  - [android] fix build 0d43794
+  - [android] fix build 0520743
+  - [android] fix build 9d596c1
+  - [android] fix list appear&disappear 425c3e1
+  - [android] fix list appear&disappear event 40b52f3
+  - [android] update so for fixing instanceId error 03d0973
+  - [android] fix v8 security problem 06dbc38
+  - [android] bugFix:  List component scrollTo inaccurate 45f0476
+  - [android] fixed #1058 f25238c
+  - [android] fixed #1058 33b4aaf
+  - [android] fix v8 security problem e0b881f
+  - [android] bugFix:  List component scrollTo inaccurate 052aeac
+  - [android] fix comment fd3e0ef
+  - [android] fix indicator default style 57b71fb
+  - [android] fix unit test ee74b5c
+  - [android] fix code style 449bad2
+  - [android] fix list  orientation usage, move component's
+  - [android] fix change/focus confliction b672101
+  - [android] fix change/focus/blur  event confliction c3689e8
+  - [android] fix add dom error a993a84
+  - [android] update the mWXBridge to null when debugmode disable 35005ea
+  - [android] fix invaild add dom operation 7b1ad97
+  - [android] fix moveElement on the same parent dom case 2a94ba2
+  - [android] fix typo 42a2099
+  - [android] fix NPE c2da99e
+  - [ios] fix style line-height conflict with text-align e762637
+  - [ios] fix slider example href 8196792
+  - [ios] fix keyboard cover input sometime 0ad56dc
+  - [ios] fix #1188, support for converting string to NSUInteger. c3f6ea2
+  - [ios] fix issue that fixed-position component's view be reallocated while it is in a cell. d8881c3
+  - [ios] indexDict must be accessed on component thread, fix componentForRef crash 8cc3503
+  - [ios] fix issue that transform-origin not works in rotation transform 5dcab9e
+  - [ios] fix warning f913dab
+  - [ios] fix css node children count invalid while change from or change to fixed position. 81a1dc4
+  - [ios] fix compile error 98a8078
+  - [ios] fix css node children count invalid while change from or change to fixed position. 0b3a2e3
+  - [ios] fix podspec syntax error d0386e6
+  - [ios] ios7 bugfix api 6e7cf07
+  - [ios] try to fix NSMapTable crash in iOS8 a03a4bc
+  - [ios] fix slider-neighbor bc03620
+  - [ios] fix remove Observer crash 46fcbc5
+  - [ios] fix issue that rotate transform not work in styles. 8601304
+  - [ios] fix layer setBackgroundColor crash 5778422
+  - [ios] fix sliderNeighbor 39cb4ea
+  - [ios] fix warning ea8c8f8
+  - [ios] fix warning 4d2528e
+  - [ios] fix warning issue d77fd5d
+  - [ios] fix issue transform does not work while initialized. c36f1bf
+  - [ios] canvas component property error fix 448d4f4
+  - [ios] try to fix textStorage thread-safe issue 0d62716
+  - [ios] fix A component onclick event 01f9706
+  - [ios] fix input disabled attribute bug 533df4f
+  - [ios] fix input disabled attribute bug fd2c526
+  - [ios] fix iconfont src update bug f99906b
+  - [ios] customize debug switch 86346ea
+  - [ios] fix typo ae99b92
+  - [ios] change context name for remove JSContext debugging 75c1e42
+  - [ios] fix input max length bug fe9a013
+  - [ios]add LogLevel control and RemoteDebug control 164abf8
+  - [ios] fix memory leak 00009c0
+  - [ios] fix a bug that re-deleting procedure 717bf3f
+  - [ios] fix storage module in swift f13b72f
+  - [ios] fix highlight problem 93eb282
+  - [html5] fix conflicts with jsfm 0.16 ce63e22
+  - [html5] fix lint 9612daa
+  - [html5] fix class name b224685
+  - [html5] fix img lazyload 3984111
+  - [html5] fix registration of tabheader d38a4c0
+  - [html5] fix bug of null rules of stylesheet in spinner c058f95
+  - [html5] fix top 41c603a
+  - [html5] fix toast a3a4730
+  - [html5] fix lazyload typo 493bee7
+  - [html5] fix lint 43b24da
+  - [html5] fix loadmoreoffset 3c7e262
+  - [html5] fix sticky 9bdf079
+  - [html5] fix lazyload 38ee957
+  - [html5] fix lint 0e94380
+  - [html5] fix flexible a06eb80
+  - [html5] fix jsonp callback error 6db0850
+  - [html5] fix typo 5f61a06
+  - [html5] fix lint 363decd
+  - [html5] fix bug of scroll to c007c86
+    orientation field to scroller 3febd83
+  - [html5] fix dist bug 9d102a5
+  - [html5] fix missing viewport meta. 1cf98e5
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.8.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.8.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.7.0
+------
+- New Features
+  - [Timer Module](https://github.com/alibaba/weex/blob/doc/doc/modules/timer.md)
+  - [Storage Module](https://github.com/alibaba/weex/blob/dev/doc/modules/storage.md)
+  - Unify the `image` component's error page when src is invalid
+  - Unify the `border`,`padding`,`background-color` style
+  - Horizontal-scroller support  `scrollto`  api
+  - Fix the issue that component with  `position:fixed` style can not be closed
+  - Module callback support `object` params
+  - Slider suppport  `setIndex` api
+- Performance
+  - Use `callNative` signal to stop JSFM render after instance been destroyed
+  - Lazily initialize JSFM When device is in low-memory status, improve SDK stability
+- [Tools](http://alibaba.github.io/weex/doc/tools/devtools.html)
+  - Support debugging  weex(.we) and  react(.jsx) source 
+  - Support apps debugging on the same device 
+  - Support "watch" feature
+  - Solve the dependency on Debugger, user could start "Inspector" first or "Debugger" at will
+  - Add "refresh" function in sdk, user could inspect new file by scanning its QR code in playground;
+  - Android/ios inspect module split from weex sdk,  and will deliver in separate repo in future; support inspect in windows system
+- Bugfix
+  - [android] fix 'fixed' position not work when append tree 6ccfa4f
+  - [android] fix slider set index frzee 6524849
+  - [android] bug fix - setLayout LayoutParams b70f6e2
+  - [android] fix get header:compitable with lower case header key 5ebec75
+  - [android] fix storage module: keep open when module is live c311f15
+  - [android] fix build 0389302
+  - [android] fix jsonp response process 28588c6
+  - [android] fix ViewHolder NPE f9005ab
+  - [android] bug fix ViewHolder NPE 86dd101
+  - [android] fix build b14dd26
+  - [android] fix cell memory leak c03fdc1
+  - [html5] fix e2e test ci 77f14af
+  - [ios] fix type of callback params 2aa8f47
+  - [android] fix sdk init time measurement 3d7cd02
+  - [android] fix sdk init time measurement f4cbfd0
+  - [android] fix sdk init time measurement 8cffa5a
+  - [ios] fix stream fetch response type 9a7c296
+  - [android] forbid except cell、header、fixed、refresh and loading 114860f
+  - [android] fix comment cf53fd3
+  - [android] fix build 82a03fd
+  - [android] WXUtils bugfix 3655d9d
+  - [android] bug fix - setProperty class cast d567f89
+  - [android] fix argument format crash 1baac57
+  - [android] function name fix : hasAppearAndDisappearEvent 1f8b501
+  - [android] fix NPE crash in textarea nad modalModule c3a08ff
+  - [ios] fix bug when url has chinese character. b7e2c2f
+  - [android] update so fix not delRef argument b0db514
+  - [jsfm] fixed repeat bug when update values with new object references 371e58c
+  - [android] fix slider initialization crash. 4c52d33
+  - [android] add a debugger switch, decouple the dept between inspector and debugger dfa71c4
+  - [android] fix bug sticky not show dc3ca4d
+  - [android] fix component register type missed 92a92dc
+  - [android] sticky null child bug fix 541b68b
+  - [android] fix list scroller default height fc0aa58
+  - [android] fix indicator default style 610624c
+  - [android] fix embed page appear event 71a5360
+  - [android] update debug manifest 0541126
+  - [android] update JSF to 0.14.6 fix bind data error 4f7e3c8
+  - [android] fix bug mChild NPE a313b81
+  - [android] fix sticky offsetX 1bae906
+  - [jsfm] fixed updateMark error in compileType 9533431
+  - [jsfm] fixed updateMark error in compileType 5ea0132
+  - [android] Sticky fast fling bug fix 7092c6a
+  - [android] fix view appear event 4bf67e4
+  - [android] fix list scroll to 6355fc6
+  - [ios] fix default debug value 79daf2f
+  - [android] fix list scroll to ad0201b
+  - [ios] fix stat 2d3ab94
+  - [android] refresh the instance when reload called by the debug server 99392db
+  - [android] add a stop method to IWXDebugProxy b06d352
+  - [android] sticky bug fix f9d3265
+  - [android] fix list scrollTo a198b2e
+  - [android] fix scroller getView and getInnerView 4fa0453
+  - [android] refresh the instance when reload called by the debug server fd2be06
+  - [android] add a stop method to IWXDebugProxy 5789700
+  - [android] refresh the instance when reload called by the debug server 5ddf782
+  - [android] add a stop method to IWXDebugProxy 79cd97b
+  - [ios] fix modal bug about message is number d0cdaf9
+  - [html5] fix fire event 978c454
+  - [android] bug fix event lost f9c4357
+  - [android] add debug log cae86fa
+  - [html5] fix typo b84a1b3
+  - [html5] fix lint 8e905dc
+  - [android] fix bug - setLayout 0b5082f
+  - [jsfm] fixed native param format of setTimeout in app.differ a9f101e
+  - [ios] cancel AppDelegate.m debug annotation 03abcf8
+  - [android] fix bug - scroller height error 7458441
+  - [ios] support weex-devtool and weex --debugger 714c924
+  - [ios] resume original logger debug feature a144699
+  - [ios] modify the debug switch, update WXDebugTool.h/m file 1ce1277
+  - [android] fix input restore init value when batch 3a54da2
+  - [android] fix build 8450473
+  - [android] fix switch fireevent with domchange b6c2d31
+  - [android]  fix input change event 58563b5
+  - [jsfm] fixed repeat binding da9f40d
+  - [html5] fix typo 09bcdb3
+  - [ios] bug fix: slider is embed in list cell d56c7ec
+  - [ios] fix typo for wrong quote in Podfile ab8a83b
+  - [html5] fix loadmore offset of list 69ed65a
+  - [android] fix model callback data from string to json 3aed566
+  - [android] use diff vars flag the remote debug 5e976fc
+  - [html5] fix typo b8eec69
+  - [android] fix bug - refresh not compatible MI2 c814cd9
+  - [android] fix problem that session is null and init framework failed b985d59
+  - [ios] fix element cssstyle selected bug 41450a9
+  - [ios] fix crash from cssstyle e079e5c
+  - [android] update the debug init sequence to make sure the handshake well 28741da
+  - [android] fix example file name fc7862c
+  - [android] update debug switch f9369bb
+  - [android] reuse image adapter for avoid Fresco bug 62dc67c
+  - [android] add debug proxy, adapt to the weex-debugger d93f9e5
+  - [android] fix NPE in stream f5f8a4d
+  - [android] fix getScreenWidth npe e264f2a
+  - [android] fix register order 5c8a264
+  - [ios] Stupid scoll view, always reset content offset to zero after insert cells, fixed it by hooking 981dcd6
+  - [ios] fix data type d815e2a
+  - [ios] update debug tool 3d82054
+  - [ios] fix input component width calculation ba9a3b7
+  - [ios] fix notes about WXComponent+ViewManagement d31e8b6
+  - [android] fix list component addsubview error 69c3286
+  - [ios] fix inverted-logic 773bea7
+  - [android] fix crash when list append tree 686e450
+  - [ios] fix playground scan qr code bug 28f7de2
+  - [android] fix bug - Scroll getView 647a927
+  - [android] fix bug - delete </merge> 77680f1
+  - [android] fix bug - nested scroll ac50cd2
+  - [android] fix onTouchEvent bug 911e569
+  - [ios] fix thread safe method indexOfObject in array 1623165
+  - [ios] remove the timing of network debug 5b00fe5
+  - [ios] fix warning e1d496c
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.7.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.7.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.6.1
+------
+- New Features
+  1. [iOS has been open sourced](https://github.com/alibaba/weex/tree/dev/ios)
+  2. [Lifecycle Page Event](https://github.com/alibaba/weex/blob/v0.6.1/doc/references/common-event.md#page-event): viewappear, viewdisappear
+  3. [fetch](https://github.com/alibaba/weex/blob/v0.6.1/doc/modules/stream.md#fetchoptions-callbackprogresscallback)
+  4. [line-height](https://github.com/alibaba/weex/blob/v0.6.1/doc/components/text.md#styles)
+  5. [list component](https://github.com/alibaba/weex/blob/v0.6.1/doc/components/list.md) 
+     - support sticky header 
+     - support scrollToElement API
+     - support nested horizontal scroller
+     - support cell children nodes event: appear/disappear
+  6. [Gesture](https://github.com/alibaba/weex/blob/v0.6.1/doc/references/gesture.md): panstart/panmove/panend, swipe, longpress
+  7. Improve Android text compatibility
+- Performance
+  1. iOS, iPhone 5c, rendering frame rate ascends from 45FPS to 52FPS
+  2. Android, Redmi Note 1, loading time of the first screen  descends from 602ms to 480ms
+  3. Improve Android animation performance
+- Tools
+  1. [weex-toolkit](https://www.npmjs.com/package/weex-toolkit) supports require and generator
+  2. Playground supports runtime performance viewer
+  3. [Weex DevTools](https://github.com/alibaba/weex/blob/v0.6.1/doc/tools/devtools.md)
+     
+     <img src="https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png" width="600">
+
+Bugfix
+- [android] fix view appear event 4bf67e4
+- [android] fix list scroll to 6355fc6
+- [ios] fix default debug value 79daf2f
+- [android] fix list scroll to ad0201b
+- [android] fix build 5d1286c
+- [android] bug fix 6a1788e
+- [ios] fix stat 2d3ab94
+- [android] bug fix 60073af
+- [android] refresh the instance when reload called by the debug server 99392db
+- [android] add a stop method to IWXDebugProxy b06d352
+- [android] sticky bug fix f9d3265
+- [android] fix build 62ee68a
+- [android] fix list scrollTo a198b2e
+- [android] fix scroller getView and getInnerView 4fa0453
+- [android] refresh the instance when reload called by the debug server fd2be06
+- [android] add a stop method to IWXDebugProxy 5789700
+- [android] bug fix 7a83ddc
+- [android] refresh the instance when reload called by the debug server 5ddf782
+- [android] add a stop method to IWXDebugProxy 79cd97b
+- [html5] fix fire event 978c454
+- [android] bug fix event lost f9c4357
+- [android] add debug log cae86fa
+- [html5] fix typo b84a1b3
+- [html5] fix lint 8e905dc
+- [android] fix bug - setLayout 0b5082f
+- [jsfm] fixed native param format of setTimeout in app.differ a9f101e
+- [ios] cancel AppDelegate.m debug annotation 03abcf8
+- [android] fix bug - scroller height error 7458441
+- [ios] support weex-devtool and weex --debugger 714c924
+- [ios] resume original logger debug feature a144699
+- [ios] modify the debug switch, update WXDebugTool.h/m file 1ce1277
+- [android] fix input restore init value when batch 3a54da2
+- [android] fix build 8450473
+- [android] fix switch fireevent with domchange b6c2d31
+- [android]  fix input change event 58563b5
+- [jsfm] fixed repeat binding da9f40d
+- [html5] fix typo 09bcdb3
+- [ios] bug fix: slider is embed in list cell d56c7ec
+- [ios] fix typo for wrong quote in Podfile ab8a83b
+- [html5] fix loadmore offset of list 69ed65a
+- [android] fix build 0f39533
+- [android] fix model callback data from string to json 3aed566
+- [android] use diff vars flag the remote debug 5e976fc
+- [html5] fix typo b8eec69
+- [html5] fix ignore de5837a
+- [android] fix bug - refresh not compatible MI2 c814cd9
+- [android] fix problem that session is null and init framework failed b985d59
+- [ios] fix element cssstyle selected bug 41450a9
+- [ios] fix crash from cssstyle e079e5c
+- [android] update the debug init sequence to make sure the handshake well 28741da
+- [android] fix example file name fc7862c
+- [ios] fix #567 3be6561
+- [android] update debug switch f9369bb
+- [android] reuse image adapter for avoid Fresco bug 62dc67c
+- [android] add debug proxy, adapt to the weex-debugger d93f9e5
+- [android] fix ut bug 85c5cae
+- [android] fix NPE in stream f5f8a4d
+- [android] fix getScreenWidth npe e264f2a
+- [android] fix register order 5c8a264
+- [ios] Stupid scoll view, always reset content offset to zero after insert cells, fixed it by hooking 981dcd6
+- [ios] fix data type d815e2a
+- [ios] update debug tool 3d82054
+- [ios] fix input component width calculation ba9a3b7
+- [ios] fix notes about WXComponent+ViewManagement d31e8b6
+- [android] fix list component addsubview error 69c3286
+- [ios] fix inverted-logic 773bea7
+- [android] fix crash when list append tree 686e450
+- [ios] fix playground scan qr code bug 28f7de2
+- [android] fix bug - Scroll getView 647a927
+- [android] fix bug - delete </merge> 77680f1
+- [android] fix bug - nested scroll ac50cd2
+- [android] fix onTouchEvent bug 911e569
+- [ios]fix thread safe method indexOfObject in array 1623165
+- [ios] remove the timing of network debug 5b00fe5
+- [ios] fix warning e1d496c
+- [ios] remove unnecessary removeFromSuperView from unload method and fix async unload view issue in list. b6c3a62
+- [android] fix unit test 4dda4ac
+- [android] update power info and debug protocol, mark stable 3323776
+- [ios] fix indicator style  abnormal when update 7dcb54b
+- [ios] fix list delete issue 579b720
+- [ios] fix indicator item size abnormal e3cd91b
+- [android] bufix NPE 904146e
+- [android] fix  multithreading exception b1c2af1
+- [android] update debug info 7a82747
+- [android] fit bug - indicator error 673b7b6
+- [android] fix bug loading-indicator 981728a
+- [android] fix unit test aafec20
+- [android] bugfix  getInstance singleton 397dc39
+- [android] fix WXSwipeRefreshLayout 745705d
+- [ios] fix scan qrcode after back from scan result failed 0b308aa
+- [android] fix unit test 02d8489
+- [android] fix create body NPE 89690f7
+- [android] fix getView()==null crash b0ca974
+- [android] bugfix NPE 93ef1e1
+- [android] bug fix NPE when instance destroy e7aad12
+- [android] NPE bugfix 9f15552
+- [android] NPE bug fix when recycleImage 4edecef
+- [android] bugfix layout can not be reset for list b19c0a1
+- [android] add DebugAdapter f10cf9c
+- [android] fix text layout unexpect quit when text is zero-length content 9320623
+- [android] fix spell error 23c5440
+- [android] update debug 567e9e0
+- [android] fix list remove cell crash bug 84844f9
+- [android] fix unit test be636fb
+- [android] update debug tool 8d9cad9
+- [android] bug fix remove fixed node f867bd1
+- [android] update debug tool 5b75507
+- [android] fix unit test 40b10de
+- [android] update debug.move some code from WXPrettyFish to WXDebugTool c70927b
+- [android] update debug 6047c43
+- [android] update debug add class ScalpelFrameLayout d956819
+- [android] fix status badge url 35a491b
+- [android] fix border style 329f128
+- [android] update weex_debug grade wrapper 793c67b
+- [android] fix fetch response data 1503431
+- [android] fix progress callback 1f72495
+- [android] bugfix init sdk b6946ad
+- [android] NPE fix fc9b595
+- [android] update how-to-debug.md playgroup-app.md c61d7b4
+- [android] update debug function 1bcfdd3
+- [android] fix v8 compile potential crash & closed v8  snapshot 6d159a6
+- [android] update debug d7c6d61
+- [android] fix v8 compile potential crash & closed v8  snapshot 67b01a1
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.6.1.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.6.1.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.5.0
+------
+
+### New Features
+1. [TabBar](https://github.com/alibaba/weex/blob/dev/doc/components/wxc-tabbar.md) is a specialized component corresponding to the radio-style selection.
+2. [NavPage](https://github.com/alibaba/weex/blob/dev/doc/components/wxc-navpage.md) contains a navbar at the top of the window and an embed content page.
+3. [Activity Showcase](https://github.com/alibaba/weex/blob/dev/examples/showcase/new-fashion/index.we) is built by composing TabBar and NavPage.
+4. [Web](https://github.com/alibaba/weex/blob/dev/doc/components/web.md) displays web content in the weex page.
+5. [A](https://github.com/alibaba/weex/blob/dev/doc/components/a.md)  defines a hyperlink to a page in the web.
+6. `Text` supports style [text-overflow](https://github.com/alibaba/weex/blob/dev/doc/references/text-style.md#properties).
+7. `Image` supports attribute [resize](https://github.com/alibaba/weex/blob/dev/doc/components/image.md#styles).
+8. `List` supports [events `appear`, `disappear`, `loadmore`](https://github.com/alibaba/weex/blob/dev/doc/components/list.md#events) and [refresh](https://github.com/alibaba/weex/blob/dev/doc/components/list.md#child-components).
+9. New Syntax
+   1. [Inline event](https://github.com/alibaba/weex/blob/dev/doc/syntax/events.md#inline-handler) supports a expression of calling event handler in template.
+   2. [Require Native Module](https://github.com/alibaba/weex/blob/dev/doc/modules#how-to-use) requires a native module by `require('@weex-module/moduleName')`.
+   3. [Computed Property](https://github.com/alibaba/weex/blob/dev/doc/syntax/data-binding.md#computed-properties) supports complicated logic in data bindings.
+   4. [New Repeat Syntax](https://github.com/alibaba/weex/blob/dev/doc/syntax/display-logic.md#a-extension-of-repeat-syntax) is easy to access the key or value of repeated object.
+
+### Bugfixes
+- [android] fix crash https://github.com/alibaba/weex/commit/4fa27716d82d90c5e16d023c6e55cf65eeb9136b
+- [android] fix #20, android slider indicator edge is not smooth https://github.com/alibaba/weex/commit/5b8f3a7e6d4d547d892223d8abc02ac2084b5a6e
+- [android] fix List https://github.com/alibaba/weex/commit/4acc90a1c8c0a9181d91e2ef984266c39d255cac
+- [android] fix NavBar https://github.com/alibaba/weex/commit/8b4ea4f0c18d4e732749c025ea496c59d19004a5
+- [android] fix position=fixed did not setLayout https://github.com/alibaba/weex/commit/3b9128c2a421243d7c28f64abaebcbffd6a2ec73
+- [jsfm] fix change data when ready https://github.com/alibaba/weex/commit/0a1aa5db40713abb2923a2effb06c28349ac0213
+- [jsfm] fix when the key of trackby is zero https://github.com/alibaba/weex/commit/efa50707efd24cfb775c7e0f467279bbaade1fd6
+- [jsfm] fix append tree https://github.com/alibaba/weex/commit/d3871b308e642fd71c2b7ba630aed0f573079daa
+- [jsfm] fix transformer version https://github.com/alibaba/weex/commit/9f21bccb07869883edc261516272aa5e41933c78
+- [jsfm] fix inline event test https://github.com/alibaba/weex/commit/1ce3212a83c58187a2be0df43eecafababce8ecb
+- [jsfm] fixed transformer 0.3 https://github.com/alibaba/weex/commit/66b647afa08671812a7c5e11b440c23ae18750d9
+- [jsfm] fixed jscs error https://github.com/alibaba/weex/commit/a5067d52e2a1708852ab704a9004f5c35f3451b6
+- [jsfm] hotfixed transformer version bug and fixed a small sample code bug https://github.com/alibaba/weex/commit/48862dc40375bbc8caa30384d45b031440694f3b
+- [jsfm] fix callback https://github.com/alibaba/weex/commit/2f85737c51ebd037a72db1c18daf4a9690c45837
+- [jsfm] fix #1 #12 https://github.com/alibaba/weex/commit/56e6a79c50f1b2fd3c0ecebec000e9a693cb4b92
+- [jsfm] fix undefined for element's depth https://github.com/alibaba/weex/commit/2b7eb9ea82e6552b6e57fddb332dfbbfa3401473
+- [jsfm] fix calling functional data-binding multiply https://github.com/alibaba/weex/commit/dcd9b660912bea69b17622e13fddb80ecb42bc35
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.5.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.5.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+------
\ No newline at end of file
diff --git a/doc/source/cn/v-0.10/advanced/extend-to-html5.md b/doc/source/cn/v-0.10/advanced/extend-to-html5.md
index fec27d8..ff99629 100644
--- a/doc/source/cn/v-0.10/advanced/extend-to-html5.md
+++ b/doc/source/cn/v-0.10/advanced/extend-to-html5.md
@@ -77,7 +77,7 @@
 - `appendChild` 在子节点列表的最后加上一个节点.
 - `removeChild` 移除一个子节点.
 
-**进阶**:更多关于组件定制和扩展的细节和代码展示,可以参考 [weex 主仓库的代码](https://github.com/alibaba/weex/tree/dev/html5/browser/extend/components),这里的组件基本上都是通过上述方式进行定义的。
+**进阶**:更多关于组件定制和扩展的细节和代码展示,可以参考 [weex 主仓库的代码](https://github.com/apache/incubator-weex/tree/dev/html5),这里的组件基本上都是通过上述方式进行定义的。
 
 重要的一点,注册组件的关键方法是 `Weex.registerComponent`,如示例里的 `weex-hello` 组件的注册:
 
diff --git a/doc/source/cn/v-0.10/advanced/integrate-to-android.md b/doc/source/cn/v-0.10/advanced/integrate-to-android.md
index 19d7192..b5bbf8c 100644
--- a/doc/source/cn/v-0.10/advanced/integrate-to-android.md
+++ b/doc/source/cn/v-0.10/advanced/integrate-to-android.md
@@ -19,8 +19,8 @@
 
 - 已经安装了[JDK](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html) version>=1.7 并配置了环境变量
 - 已经安装[Android SDK](https://developer.android.com/studio/index.html) 并配置环境变量。
-- Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
-- SDK build tools version 23.0.1 (buildToolsVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
+- Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
+- SDK build tools version 23.0.1 (buildToolsVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
 - Android Support Repository >= 17 (for Android Support Library)
 
 ## 快速接入
diff --git a/doc/source/cn/v-0.10/references/modules/globalevent.md b/doc/source/cn/v-0.10/references/modules/globalevent.md
index 05c9e7a..9a04dc0 100644
--- a/doc/source/cn/v-0.10/references/modules/globalevent.md
+++ b/doc/source/cn/v-0.10/references/modules/globalevent.md
@@ -8,7 +8,7 @@
 # 全局事件
 <span class="weex-version">0.8 (开发中)</span>
 
-`globalEvent` 用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外 APIs 处理的次要 API。你能通过 `addEventListener` 注册事件监听,当你不再需要的时候,也可以通过 `removingEventListener` 取消事件监听。
+`globalEvent` 用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外 APIs 处理的次要 API。你能通过 `addEventListener` 注册事件监听,当你不再需要的时候,也可以通过 `removeEventListener` 取消事件监听。
 
 *提醒*
 
diff --git a/doc/source/cn/v-0.10/references/modules/storage.md b/doc/source/cn/v-0.10/references/modules/storage.md
index e85d64c..c18b9ae 100644
--- a/doc/source/cn/v-0.10/references/modules/storage.md
+++ b/doc/source/cn/v-0.10/references/modules/storage.md
@@ -221,4 +221,4 @@
 ## 其它参考
 
 * [W3school: html5 localStorage](http://www.w3school.com.cn/html5/html_5_webstorage.asp)
-* [storage 模块完整的 Demo](https://github.com/alibaba/weex/blob/dev/examples/module/storage-demo.we)
+* [storage 模块完整的 Demo](https://github.com/apache/incubator-weex/blob/dev/examples/module/storage-demo.we)
diff --git a/doc/source/cn/v-0.10/tools/devtools.md b/doc/source/cn/v-0.10/tools/devtools.md
index 24fa943..ab7ddb3 100644
--- a/doc/source/cn/v-0.10/tools/devtools.md
+++ b/doc/source/cn/v-0.10/tools/devtools.md
@@ -94,6 +94,6 @@
 ![debugger-breakpoint](https://img.alicdn.com/tps/TB1_trbKFXXXXc0XVXXXXXXXXXX-2880-1800.png)
 #### 集成devtools
 - Android
-  - 请参考文档 [Weex devtools (Android)](https://github.com/alibaba/weex/blob/dev/android/inspector/README.md), 其中有详细说明。
+  - 请参考文档 [Weex devtools (Android)](../advanced/integrate-devtools-to-android.html), 其中有详细说明。
 - IOS
-  - 请参考文档 [Weex devtools (IOS)](https://github.com/alibaba/weex/blob/dev/ios/WXDevtool/README.md), 其中有详细说明。
+  - 请参考文档 [Weex devtools (IOS)](../advanced/integrate-devtools-to-ios.html), 其中有详细说明。
diff --git a/doc/source/examples/dom-rect.md b/doc/source/examples/dom-rect.md
index 9703f69..9b786ba 100644
--- a/doc/source/examples/dom-rect.md
+++ b/doc/source/examples/dom-rect.md
@@ -7,8 +7,8 @@
 
 ```html
 <template>
-  <div class="wrapper">
-    <div ref="box" class="box">
+  <div class="wrapper" style='margin-top:200px'>
+    <div ref="box"  class="box">
       <text class="info">Width: {{size.width}}</text>
       <text class="info">Height: {{size.height}}</text>
       <text class="info">Top: {{size.top}}</text>
@@ -16,11 +16,26 @@
       <text class="info">Left: {{size.left}}</text>
       <text class="info">Right: {{size.right}}</text>
     </div>
+    
+    <text class="info btn"  @click='click()'>{{this.tip}}</text>
+      
   </div>
-</template>
+</template> 
 
 <script>
   const dom = weex.requireModule('dom')
+  
+ function round(size) {
+      var roundSize = {
+        'width': Math.round(size.width),
+        'height': Math.round(size.height),
+        'top': Math.round(size.top),
+        'bottom': Math.round(size.bottom),
+        'left': Math.round(size.left),
+        'right': Math.round(size.right)
+      }
+      return roundSize
+  }
 
   export default {
     data () {
@@ -32,26 +47,60 @@
           bottom: 0,
           left: 0,
           right: 0
-        }
+        },
+        ref:"viewport",
+        tip:"get box rect"
       }
     },
     mounted () {
-      const result = dom.getComponentRect(this.$refs.box, option => {
+      const result = dom.getComponentRect(this.ref, option => {
         console.log('getComponentRect:', option)
-        this.size = option.size
+        this.size = round.call(this,option.size);
       })
-      console.log('return value:', result)
-      console.log('viewport:', dom.getComponentRect('viewport'))
+    },
+    
+    methods:{
+      click:function() {
+        if (this.ref === 'viewport') {
+          this.ref = this.$refs.box;
+          this.tip = "get viewport rect"
+        } else {
+          this.ref = 'viewport'
+          this.tip = "get box rect"
+        }
+          
+         const result = dom.getComponentRect(this.ref, option => {
+          console.log('getComponentRect:', option)
+          this.size = round.call(this,option.size);
+        })
+      }
     }
+    
   }
 </script>
 
 <style scoped>
+  .btn {
+    margin-top:20px;
+    border-width:2px;
+    border-style: solid;
+    border-radius:10px;
+    width:300px;
+    margin-left:170px;
+    padding-left:35px;
+    border-color: rgb(162, 217, 192);
+    
+  }
+  .btn:active {
+    background-color: #8fbc8f;
+		border-color: gray;
+  }
+  
   .box {
-    margin-top: 200px;
+    align-items:center;
     margin-left: 150px;
-    width: 450px;
-    height: 450px;
+    width: 350px;
+    height: 400px;
     background-color: #DDD;
     border-width: 2px;
     border-style: solid;
@@ -60,6 +109,8 @@
   }
   .info {
     font-size: 40px;
+    top:30px;
+    margin-left:20px;
     font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
     color: #41B883;
   }
diff --git a/doc/source/faq.md b/doc/source/faq.md
index 4c21d20..d9b5928 100644
--- a/doc/source/faq.md
+++ b/doc/source/faq.md
@@ -15,7 +15,7 @@
 
 ## Command errors in Windows
 
-Please install [Git for Windows](https://git-scm.com/download/win) first, see [For Windows](https://github.com/alibaba/weex/tree/dev#for-windows) for more information.
+Please install [Git for Windows](https://git-scm.com/download/win) first, see [For Windows](https://github.com/apache/incubator-weex/tree/dev#for-windows) for more information.
 
 
 ## Gradle errors in Android Studio
diff --git a/doc/source/guide/contributing.md b/doc/source/guide/contributing.md
new file mode 100644
index 0000000..ea824f4
--- /dev/null
+++ b/doc/source/guide/contributing.md
@@ -0,0 +1,106 @@
+---
+title: How to Contribute
+type: guide
+order: 6
+has_chapter_content: true
+version: 2.1
+---
+
+# How to Contribute
+
+Welcome to create [pull requests](https://github.com/apache/incubator-weex/compare) or join in our [mailing list](http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/) for bugfix, doc, example, suggestion and anything.
+
+## Join in Weex Mailing List
+
+In Weex community all discussion will happen on mailing list.
+
+Just send an email to `dev-subscribe@weex.incubator.apache.org` and follow the instructions to subscribe Weex dev mailing list. And then you will receive all discussions and community messages by your personal email. In the same time you can freely send your own emails to join in us.
+
+At the same time you can see the archives of all the mails through the web: [http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/](http://mail-archives.apache.org/mod_mbox/incubator-weex-dev/)
+
+*If you won't follow the mailing list any more. There is another way to unsubscribe it: send an email to `dev-unsubscribe@weex.incubator.apache.org` and follow the instructions.*
+
+Besides Weex dev mailing list, we also have some other mailing lists for you. You can check them out here: http://mail-archives.apache.org/mod_mbox/#weex.incubator
+
+## Branch Management
+
+```
+master
+ ↑
+dev         <--- PR(hotfix/typo/3rd-PR)
+ ↑ PR
+{domain}-feature-{date}
+```
+
+0. `master` branch
+    0. `master` is the latest (pre-)release branch.
+0. `dev` branch
+    0. `dev` is the stable developing branch.
+    0. ***It's RECOMMENDED to commit hotfix (like typo) or feature PR to `dev`***.
+0. `{domain}-feature-{date}` branch
+    0. The branch for a developing iteration, e.g. `android-feature-20160607` is an android developing iteration which is done at 2016.06.07. `{domain}` consists of `android`, `ios`, `jsfm` and `html5`. 
+    0. **DO NOT commit any PR to such a branch**.
+
+### Branch Name 
+
+```
+{module}-{action}-{shortName}
+```
+
+* `{module}`, see [commit log module](#commit-log)
+* `{action}`
+    * `feature`: checkout from `{module}` and merge to `{module}` later. If `{module}` not exists, merge to `dev`
+    * `bugfix`: like `feature`, for bugfix only
+    * `hotfix`: checkout from `master` or release `tag`, merge to `master` and `{module}` later. If `{module}` not exists, merge to `dev`
+
+for example:
+
+* `android-bugfix-memory`
+* `jsfm-feature-communication`
+* `android-hotfix-compute-layout`
+
+## Commit Log
+
+```
+{action} [{module}] {description}
+```
+
+* `{action}`
+    * `+` add
+    * `*` update or bugfix
+    * `-` remove
+* `{module}`
+    * Including: android, ios, jsfm, html5, component, doc, website, example, test, all 
+* `{description}`
+    * Just make it as clear and simple as possible.
+
+for example:
+
+* `+ [android] close #123, add refreshing for WebView`
+* `* [doc] fix #123, update video auto-play property`
+* `- [example] remove abc`
+
+## Pull Request
+
+You can [create pull requests](https://github.com/apache/incubator-weex/compare) in GitHub.
+
+1. First we suggest you have some discussion with the community (commonly in our mailing list) before you code.
+2. Fork repo from [https://github.com/apache/incubator-weex/](https://github.com/apache/incubator-weex/)
+3. Finish the job you want to do.
+4. Create a pull request.
+
+## Code Style Guide
+
+### Objective-C
+
+* Tabs for indentation(not spaces)
+* `*` operator goes with the variable name (e.g. Type *variable;)
+* Function definitions: place each brace on its own line.
+* Other braces: place the open brace on the line preceding the code block; place the close brace on its own line.
+* Use `#pragma marks` to categorize methods into functional groupings and protocol implementations
+* Follow other guidelines on [GitHub Objective-C Style Guide](https://github.com/github/objective-c-style-guide)
+
+### Java & Android 
+
+* Use [Google Java Style](https://google.github.io/styleguide/javaguide.html) as basic guidelines of java code.
+* Follow [AOSP Code Style](https://source.android.com/source/code-style.html) for rest of android related code style.
diff --git a/doc/source/guide/integrate-to-your-app.md b/doc/source/guide/integrate-to-your-app.md
index 7d67d84..55cbc64 100644
--- a/doc/source/guide/integrate-to-your-app.md
+++ b/doc/source/guide/integrate-to-your-app.md
@@ -1,7 +1,7 @@
 ---
 title: Integrate to Your App  
 type: guide
-order: 3
+order: 1.2
 has_chapter_content: false
 chapter_title: Intro
 version: 2.1
@@ -12,7 +12,7 @@
 ## Integrate to Android
 Tip:The following documents assume that you already have a certain Android development experience.    
 
-### Android has tow ways to integrate weex
+### Android has two ways to integrate weex
 1.using source code: Can quickly use the latest features of WEEX, according to your own characteristics of the project. So, you can do some related improvements.
 
 2.using SDK: WEEX will regularly release a stable version at jcenter.[jcenter](https://bintray.com/alibabaweex/maven/weex_sdk/view)       
@@ -29,7 +29,7 @@
 ### Quick to use
 If you are the first time to try or have a higher demand for stability, you can use the way to dependence on the SDK.      
 The steps are as follows:       
- 
+
 1. Create an Android project. There is nothing to be specified, according to your habits to.
 2. Update build.gradle by adding the following dependencies:
 
@@ -258,7 +258,8 @@
     _instance.renderFinish = ^ (UIView *view) {
         //process renderFinish
     };
-    [_instance renderWithURL:self.url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
+    NSURL *url = [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"js"]
+    [_instance renderWithURL:url options:@{@"bundleUrl":[self.url absoluteString]} data:nil];
 }
 ```
 
@@ -276,4 +277,4 @@
 
 #### Import the Weex SDK framework to the project.     
 The Weex SDK can be compiled from the source code. You can try the latest feature in the new feature or bugfix branch.        
-Refer to [here](https://open.taobao.com/doc2/detail?spm=a219a.7629140.0.0.tFddsV&&docType=1&articleId=104829) for direct import of weexSDK.
\ No newline at end of file
+Refer to [here](https://open.taobao.com/doc2/detail?spm=a219a.7629140.0.0.tFddsV&&docType=1&articleId=104829) for direct import of weexSDK.
diff --git a/doc/source/guide/intro/app-architecture.md b/doc/source/guide/intro/app-architecture.md
index 5dd1e1f..d7b3bc6 100644
--- a/doc/source/guide/intro/app-architecture.md
+++ b/doc/source/guide/intro/app-architecture.md
@@ -1,7 +1,7 @@
 ---
 title: Mobile App Architecture
 type: guide
-order: 5.5
+order: 4.5
 version: 2.1
 ---
 
diff --git a/doc/source/guide/intro/how-it-works.md b/doc/source/guide/intro/how-it-works.md
index e66ead8..f67f8b4 100644
--- a/doc/source/guide/intro/how-it-works.md
+++ b/doc/source/guide/intro/how-it-works.md
@@ -1,7 +1,7 @@
 ---
 title: How it works  
 type: guide
-order: 5.1
+order: 4.1
 has_chapter_content: false
 chapter_title: Intro
 version: 2.1
diff --git a/doc/source/guide/intro/index.md b/doc/source/guide/intro/index.md
index 54117fc..24c8236 100644
--- a/doc/source/guide/intro/index.md
+++ b/doc/source/guide/intro/index.md
@@ -1,7 +1,7 @@
 ---
 title: Intro
 type: guide
-order: 5
+order: 4
 has_chapter_content: false
 chapter_title: Intro
 version: 2.1
diff --git a/doc/source/guide/intro/page-architecture.md b/doc/source/guide/intro/page-architecture.md
index 77085f9..a9d8014 100644
--- a/doc/source/guide/intro/page-architecture.md
+++ b/doc/source/guide/intro/page-architecture.md
@@ -1,7 +1,7 @@
 ---
 title: Weex Page Architecture
 type: guide
-order: 5.6
+order: 4.6
 version: 2.1
 ---
 
diff --git a/doc/source/guide/intro/using-vue.md b/doc/source/guide/intro/using-vue.md
index 0f08498..9d981ee 100644
--- a/doc/source/guide/intro/using-vue.md
+++ b/doc/source/guide/intro/using-vue.md
@@ -1,7 +1,7 @@
 ---
 title: Using Vue
 type: guide
-order: 5.3
+order: 4.3
 version: 2.1
 ---
 
diff --git a/doc/source/guide/intro/web-dev-experience.md b/doc/source/guide/intro/web-dev-experience.md
index c24c8cc..81d0ff2 100644
--- a/doc/source/guide/intro/web-dev-experience.md
+++ b/doc/source/guide/intro/web-dev-experience.md
@@ -1,7 +1,7 @@
 ---
 title: Web Dev Experience
 type: guide
-order: 5.2
+order: 4.2
 version: 2.1
 ---
 
diff --git a/doc/source/guide/intro/write-once.md b/doc/source/guide/intro/write-once.md
index 9507d21..382b7b4 100644
--- a/doc/source/guide/intro/write-once.md
+++ b/doc/source/guide/intro/write-once.md
@@ -1,7 +1,7 @@
 ---
 title: Write once, Run Everywhere
 type: guide
-order: 5.4
+order: 4.4
 version: 2.1
 ---
 
diff --git a/doc/source/guide/set-up-env.md b/doc/source/guide/set-up-env.md
index 71ad2fd..702c347 100644
--- a/doc/source/guide/set-up-env.md
+++ b/doc/source/guide/set-up-env.md
@@ -1,7 +1,7 @@
 ---
 title: Set Up Development Environment 
 type: guide
-order: 2
+order: 1.1
 version: 2.1
 has_chapter_content: true
 ---
@@ -37,7 +37,7 @@
 
 Then you can use the weex command to verify that the installation is successful:
 
-![](https://img.alicdn.com/tps/TB1kHFrOFXXXXaYXXXXXXXXXXXX-615-308.jpg)
+![](https://img.alicdn.com/tfs/TB1NBhdQXXXXXXzXFXXXXXXXXXX-712-343.png)
 
 ### Generate a new Weex project
 
diff --git a/doc/source/guide/tools/devtools.md b/doc/source/guide/tools/devtools.md
deleted file mode 100644
index 9fd9de3..0000000
--- a/doc/source/guide/tools/devtools.md
+++ /dev/null
@@ -1,100 +0,0 @@
----
-title: Using Devtools  
-type: guide
-order: 4.1
-version: 2.1
----
-
-# Devtools
-
-Weex devtools is a custom devtools for weex that implements [Chrome Debugging Protocol](https://developer.chrome.com/devtools/docs/debugger-protocol), it is designed to help you quickly inspect your app and debug your JS bundle source in a chrome web page, both Android and IOS platform are supported.
-
-## Install
-
-```
-   $ npm install  -g  weex-toolkit
-```
-#### usage
-```
-weex debug [options] [we_file|bundles_dir]
-
-  Options:
-
-    -h, --help           output usage information
-    -V, --verbose        display logs of debugger server
-    -v, --version        display version
-    -p, --port [port]    set debugger server port
-    -e, --entry [entry]  set the entry bundlejs path when you specific the bundle server root path
-    -m, --mode [mode]    set build mode [transformer|loader]
-    -w, --watch          watch we file changes auto build them and refresh debugger page![default enabled]
-```
-
-#### start debugger
-```
-$weex debug
-```
-this command will start debug server and launch a chrome opening `DeviceList` page.
-this page will display a qrcode ,you can use `Playground App` scan it for starting debug.
-
-#### start debugger with a we file
-```
-$weex debug your_weex.we
-```
-this command will compile `your_weex.we` to `your_weex.js`  and start the debug server as upon command.
-`your_weex.js` will deploy on the server and displayed in `DeviceList` page as  another qrcode contain the url of your_weex.js
-
-
-#### start debugger with a directory of we files
-```
-$weex debug your/we/path  -e index.we
-```
-this command will build every file in your/we/path and deploy them on the bundle server. your directory will mapping to  http://localhost:port/weex/ 
-use -e to set the entry of these bundles. and the url of "index.we" will display on device list page as another qrcode.
-
-## Features
-
-### Connect devices
-![devtools-main](https://img.alicdn.com/tps/TB13fwSKFXXXXXDaXXXXXXXXXXX-887-828.png "connecting (multiple) devices")
-
-### Inspector
- Inspector can be used to show your `Element` \ `Network` \ `Console log` \ `ScreenCast` \ `BoxModel` \ `Native View` and so on.
-
-![devtools-inspector](https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png "devtools-inspector")
-
-#### Element
-##### native view element
-![native-element](https://img.alicdn.com/tps/TB16L3ENXXXXXcsXVXXXXXXXXXX-2878-1798.png "native-element")
-
-##### weex dom element
-![dom-element](https://img.alicdn.com/tps/TB1TsMuNXXXXXcsaXXXXXXXXXXX-2450-1460.png "dom-element")
-
-#### Network
-
-##### show the total time and latency
-![inspector-network](https://img.alicdn.com/tps/TB1NjO_KFXXXXcaaXXXXXXXXXXX-2880-1800.png "inspector-network")
-
-##### show the header and response
-![inspector-network](https://img.alicdn.com/tps/TB1ck6lKFXXXXbZXFXXXXXXXXXX-2880-1800.png "inspector-network")
-
-#### Console
-![inspector-console](https://img.alicdn.com/tps/TB1a7HqKFXXXXXMXFXXXXXXXXXX-2880-1800.png "inspector-console")
-
-#### Resource
-![inspector-resource](https://img.alicdn.com/tps/TB1oY6cKFXXXXXQaXXXXXXXXXXX-2880-1800.png "inspector-resource")
-
-### Debugger
-
- Debugger can be used to debug your bundle js source, you can set `Breakpoint` \ watch `CallStack`.
- 
-![devtools-debugger](https://img.alicdn.com/tps/TB1aPTEKFXXXXXaXXXXXXXXXXXX-1436-813.png "devtools-debugger")
-
-#### Breakpoint and CallStack
-![debugger-breakpoint](https://img.alicdn.com/tps/TB1_trbKFXXXXc0XVXXXXXXXXXX-2880-1800.png "debugger-breakpoint")
-
-
-## Integrate devtools
-
-* Android
-    * See the doc [Weex devtools (Android)](../../references/advanced/integrate-devtool-to-android.html), it will lead you to config and use it step by step.
-* IOS
-    * See the doc [Weex devtools (iOS)](../../references/advanced/integrate-devtool-to-ios.html), it will lead you to config and use it step by step.
\ No newline at end of file
diff --git a/doc/source/guide/tools/index.md b/doc/source/guide/tools/index.md
index 8a2de8e..83ce4dc 100644
--- a/doc/source/guide/tools/index.md
+++ b/doc/source/guide/tools/index.md
@@ -1,11 +1,10 @@
 ---
 title: Tools 
 type: guide
-order: 4
+order: 5
 version: 2.1
 ---
 
 # Tools  
 
-- [Devtools](./devtools.html)
-- [Weexpack](./weexpack.html)
\ No newline at end of file
+- [weex-toolkit](./toolkit.html)
diff --git a/doc/source/guide/tools/toolkit.md b/doc/source/guide/tools/toolkit.md
new file mode 100644
index 0000000..2e19b2d
--- /dev/null
+++ b/doc/source/guide/tools/toolkit.md
@@ -0,0 +1,198 @@
+---
+title: use weex-toolkit
+type: guide
+order: 5.1
+version: 2.1
+---
+
+# weex-toolkit
+
+[weex-toolkit](https://github.com/weexteam/weex-toolkit) is an official command line tool to help developers to create, debug and build their Weex project.
+
+### Install
+use npm to install weex-toolkit:
+
+``` bash
+$ npm install -g weex-toolkit
+```
+if you make it, you can input "weex" in your command line terminal to test it. The right output:
+
+
+![weex-commands](https://img.alicdn.com/tfs/TB1NBhdQXXXXXXzXFXXXXXXXXXX-712-343.png)
+
+if you have never installed node.js, you should go [node.js.org]( https://nodejs.org/en/) to download and install it. 
+* node engine version >= 6. You can try [n](https://github.com/tj/n) to manage your node versions*
+If you meet some errors when installing like `permission error`, please go [weex-toolkit issues](https://github.com/weexteam/weex-toolkit/issues) to find some solution or have a discuss with us. 
+
+
+### initialize Weex project
+```bash
+$ weex init awesome-project
+```
+After command running, you can find `awesome-project` directory and there are some Weex templates in it. 
+There are some useful npm scripts you will use in the future:
+
+- `build`: build the source code and generate the JS bundle
+- `dev`: run webpack watch configuration
+- `serve`: start a web server
+- `debug`: open the debug mode
+
+When all dependences are ready, you can input `npm run dev` and run `npm run server` in a command line tab. Now you can visit our web page in :
+
+http://localhost:8080/index.html
+
+
+### preview Weex page in time
+
+weex-toolkit supports previewing your Weex file(`.we` or `.vue`) in a watch mode. You only need specify your file path.
+
+``` bash
+$ weex src/foo.vue 
+```
+The browser will auto open the location and you could see the layout and effects of your Weex page. If you have a [Playground](https://weex.apache.org/cn/playground.html) app in your mobile devices, you can scan the QR code at the opened page.
+Try the command below, you’ll preview the whole directory files.
+
+``` bash
+$ weex src --entry src/foo.vue
+```
+You need to specify the directory path and the entry file(`--entry`).
+### build Weex project
+Use ` weex compile ` to build your single weex file or the whole project.
+``` bash
+weex compile src/foo.vue dist
+```
+There are two arguments. One is your code source path (a single file or a directory) and another is your destination path you want to build
+
+### debug 
+
+weex-toolkit has the ability to extend third party script.  And **[Weex devtools](https://github.com/weexteam/weex-devtool)** is a custom devtools for Weex that implements [Chrome Debugging Protocol](https://developer.chrome.com/devtools/docs/debugger-protocol), it is designed to help you quickly inspect your app and debug your JS bundle source in a Chrome web page, both android and iOS platform are supported. So you can use weex-devtools feature by weex-toolkit.
+
+#### usage
+
+``` bash
+weex debug [options] [we_file|bundles_dir]
+
+  Options:
+
+    -h, --help           output usage information
+    -V, --verbose        display logs of debugger server
+    -v, --version        display version
+    -p, --port [port]    set debugger server port
+    -e, --entry [entry]  set the entry bundlejs path when you specific the bundle server root path
+    -m, --mode [mode]    set build mode [transformer|loader]
+    -w, --watch          watch we file changes auto build them and refresh debugger page![default enabled]
+```
+#### start debugger
+
+```
+$ weex debug
+```
+
+
+this command will start debug server and launch a chrome opening `DeviceList` page.
+this page will display a qrcode ,you can use `Playground App` scan it for starting debug.
+
+#### debug `.we` | `.vue` file
+
+```
+$ weex debug your_weex.vue
+```
+
+this command will compile `your_weex.we` to `your_weex.js`  and start the debug server as upon command.
+`your_weex.js` will deploy on the server and displayed in `DeviceList` page as  another qrcode contain the url of your_weex.js.
+
+.
+#### start debugger with a directory of we files
+
+
+```
+$weex debug your/we/path  -e index.we
+```
+
+this command will build every file in `your/we/path `and deploy them on the bundle server. your directory will mapping to  http://localhost:port/weex/ 
+use `-e` to set the entry of these bundles. and the url of `index.we` will display on device list page as another qrcode.
+
+
+#### Features
+
+##### Connect devices
+
+![devtools-main](https://img.alicdn.com/tps/TB13fwSKFXXXXXDaXXXXXXXXXXX-887-828.png)
+
+##### Inspector
+
+ Inspector can be used to show your `Element` \ `Network` \ `Console log` \ `ScreenCast` \ `BoxModel` \ `Native View` and so on.
+
+![devtools-inspector](https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png)
+##### Element
+
+![inspector-element](https://img.alicdn.com/tps/TB1.02bKFXXXXXwaXXXXXXXXXXX-2880-1800.png)
+##### NetWork
+##### show the total time and latency
+
+![inspector-network](https://img.alicdn.com/tps/TB1NjO_KFXXXXcaaXXXXXXXXXXX-2880-1800.png)
+##### show the header and response
+
+![inspector-network](https://img.alicdn.com/tps/TB1ck6lKFXXXXbZXFXXXXXXXXXX-2880-1800.png)
+##### Console
+
+![inspector-console](https://img.alicdn.com/tps/TB1a7HqKFXXXXXMXFXXXXXXXXXX-2880-1800.png)
+##### Resource
+
+![inspector-resource](https://img.alicdn.com/tps/TB1oY6cKFXXXXXQaXXXXXXXXXXX-2880-1800.png)
+#### Debugger
+
+![devtools-debugger](https://img.alicdn.com/tps/TB1aPTEKFXXXXXaXXXXXXXXXXXX-1436-813.png)
+##### Breakpoint and CallStack
+
+![debugger-breakpoint](https://img.alicdn.com/tps/TB1_trbKFXXXXc0XVXXXXXXXXXX-2880-1800.png)
+#### Integrate devtools
+* Android
+    * See the doc [Weex devtools (Android)](../../references/advanced/integrate-devtool-to-android.html), it will lead you to config and use it step by step.
+* IOS
+    * See the doc [Weex devtools (IOS)](../../references/advanced/integrate-devtool-to-ios.html), it will lead you to config and use it step by step.
+  
+### weex-toolkit extends weexpack command
+
+[weexpack](https://github.com/weexteam/weex-pack) helps to setup Weex application from scratch quickly. With simple commands, developers could create a Weex project, add different platform template, could install plugins from local, GitHub or Weex market, could pack up his application project and run on mobile. For those who would like to share his own plugins, he could publish them to the Weex market.
+
+Now weex-toolkit can run the same commands of `weexpack` because of the new architecture. If your directory is generated by `weexpack`, you can build your iOS or android app.
+
+### weex platform and run commands
+
+Use `platform add|remove` to add or remove Weex app template and run it in your target devices.
+
+``` bash
+$ weex platform add ios
+```
+If you use these commands firstly, you might see the prompt. Just enter Y.
+
+![install weexpack](https://gw.alicdn.com/tfs/TB19n4AQXXXXXawXVXXXXXXXXXX-577-70.png)
+
+Then run platform, you will see an iPhone simulator.
+
+``` bash
+$ weex run ios
+```
+
+
+### weex plugin commands
+
+If you want to use some plugins on the [weex market](https://market.dotwe.org), weex-toolkit is the right choice.
+
+```bash
+$ weex plugin add plugin_name
+```
+You need to specify the plugin name from market like "weex-chart":
+
+``` bash
+$ weex plugin add weex-chart
+```
+
+Remove some plugins(eg: weex-chart):
+
+``` bash
+$ weex plugin remove weex-chart
+```
+
+Learn more about [weexpack](https://github.com/weexteam/weex-pack) .
\ No newline at end of file
diff --git a/doc/source/guide/tools/weexpack.md b/doc/source/guide/tools/weexpack.md
deleted file mode 100644
index dd0ee36..0000000
--- a/doc/source/guide/tools/weexpack.md
+++ /dev/null
@@ -1,300 +0,0 @@
----
-title: Using Weexpack
-type: guide
-order: 4.2
-version: 2.1
----
-
-# Using Weexpack
-
-## Weexpack introduction
-
-Weexpack is our next generation of engineering development kits, it helps to setup wWex application from scratch quickly. With simple commands, developers could create a Weex project, add different platform template, could install plugins from local, GitHub or Weex market, could pack up his application project and run on mobile. For those who would like to share his own plugins, he could publish them to the Weex market.
-
-weexpack commands can be grouped to three parts:
-* application package
- * **weexpack create** — create Weex project.
- * **weexpack platform add/remove** — add/remove Weex platform template,it support plugins and Weex bundle debugging by default.
- * **weexpack platform list** — query installed platforms and its version.
- * **weexpack platform run** - pack/build/run application.
-
-* plugin usuage
- * **weexpack plugin add/remove** — add/remove Weex plugin, support to install from local, Github or market.
- * **weexpack plugin list** — query installed plugins and its version.
-
-* plugin development
- * **weexpack plugin create** - create plugin template with necessary config file and directory.
- * **weexpack plugin publish** - publish plugin to market.
-
-
-## Installation
-### pre-environmental requirements
-
-- Supported on Mac linux windows.
-- Configure the [Node.js] [1] environment and install the [npm] [2] package manager.(need node 6.0+)
-- Configure iOS development environment:
-    - Install [Xcode IDE] [3] to launch Xcode once so that Xcode automatically installs the Developer Tools and confirms the usage protocol.
-    - Install cocoaPods
-- Configure the Android development environment:
-    - Install [Android Studio] [4] and open the new project. Open the menu bar, open the [AVD Manager] [5], the new Android emulator and start. (If you have installed [Docker] [6], close the Docker Server.)
-    - Or just download the [Android SDK] [7], run the command line [AVD Manager] [8], create a new Android emulator and launch it.
-    - Make sure that Android build-tool version is 23.0.2
-
-### Instructions
-
-First, install the weex-pack command globally:
-
-```bash
-$ npm install -g weexpack
-```
-
-or run the following command under the root path of your cloned weexpack repo
-
-```bash
-$ npm install
-```
-
-## Pack application (and plugin usuage)
-
-Following graph shows how to pack a application, plugin related parts werenot a must.
-
-![weexpack1](https://img.alicdn.com/tps/TB1.bpVPXXXXXarapXXXXXXXXXX-462-310.png)
-
-### Steps in detail
-
-#### 1. create a weexpack project
-
-```bash
-$ weexpack create appName
-```
-
-will create directory as follows:
-
-```
-WeexProject
-├── README.md
-├── android.config.json
-├── config.xml
-├── hooks
-│   └── README.md
-├── ios.config.json
-├── package.json
-├── platforms     // platform template directory
-├── plugins       // plugins download to here
-│   └── README.md
-├── src           // application(we/vue file)directory
-│   └── index.we
-├── start
-├── start.bat
-├── tools
-│   └── webpack.config.plugin.js
-├── web
-│   ├── index.html
-│   ├── index.js
-│   └── js
-│       └── init.js
-└── webpack.config.js
-```
-
-Above project template has no ios/android directory by default, you should change to appName path to install necessary dependency.
-
-```bash
-$ cd appName && npm install
-```
-
-#### 2. install Weex application template
-
-Application template by default support Weex plugins and Weex bundle debugging. Please note template name are in lower-case, template was installed under platforms directory.
-
-* android template
-
-```bash
-$ weexpack platform add android
-```
-
-* ios template
-
-```bash
-$ weexpack platform add ios
-```
-
-Take android platform as example,the directory under platforms looks as following:
-
-```
-platforms
-└── android
-    ├── LICENSE
-    ├── NOTICE
-    ├── README.md
-    ├── app
-    │   ├── build
-    │   ├── build.gradle
-    │   ├── proguard-rules.pro
-    │   └── src
-    ├── appframework
-    │   ├── build
-    │   ├── build.gradle
-    │   ├── proguard-rules.pro
-    │   └── src
-    ├── build
-    │   └── generated
-    ├── build.gradle
-    ├── codeStyleSettings.xml
-    ├── gradle
-    │   └── wrapper
-    ├── gradle.properties
-    ├── gradlew
-    ├── gradlew.bat
-    ├── settings.gradle
-    └── weexplugin
-        ├── build.gradle
-        ├── proguard-rules.pro
-        └── src
-
-```
-
-* query installed platforms
-
-  ```bash
-  $ weexpack platform list
-  ```
-
-  you will get result like:
-
-  ```
-  Installed platforms:
-    android
-  Available platforms:
-    android ^6.2.1
-  ```
-
-* remove platform template
-
-  Please use remove command to remove unnecessary platform, for example user want to remove ios template in windows platform.
-
-  ```bash
-  $ weexpack platform remove ios
-  ```
-
-#### 3. install Weex plugin(optional)
-
-* add plugins from local
-
-  ```bash
-  $ weexpack plugin add path/to/plugin
-  ```
-
-* add plugins from Weex market,for example weex-chart
-
-  ```bash
-  $ weexpack plugin add weex-chart
-  ```
-
-  weexplugin directory was the target directory where plugin was installed. Take android as an example:
-
-  ```
-    weexplugin
-    ├── build.gradle  //  plugin build script, maintained by weexpack tool
-    ├── libs
-    ├── proguard-rules.pro
-    ├── src
-    │   └── main
-    │       ├── AndroidManifest.xml // plugin android manifest file
-    │       ├── java
-    │       │   ├── // 插件src安装目录
-    │       │   └── com
-    │       │       └── alibaba
-    │       │           └── weex
-    │       │               └── plugin
-    │       │                   ├── ConfigXmlParser.java // config file parser
-    │       │                   ├── PluginConfig.java    // external interface
-    │       │                   ├── PluginEntry.java     // plugin description
-    │       │                   └── PluginManager.java   // plugin manager
-    │       └── res // plugin resource path
-    │           ├── drawable
-    │           ├── values
-    │           │   └── strings.xml
-    │           └── xml
-    │               └── config.xml // plugin config file, which used by PluginManager when install
-  ```
-
-* query installed plugins
-
-  ```bash
-  $ weexpack plugin list
-  ```
-
-* remove installed plugin,for example weex-chart
-
-  ```bash
-  $ weexpack plugin remove weex-chart
-  ```
-
-#### 4. pack application and run
-
-After all above steps, you could modify your application we/vue files under src directory. And then, use run command to pack and run your application. Run command will download building tools and all dependencies which may take a while, and open monitor or connect to mobile device to execute your application afterwards.
-
-* for android application
-
-  ```bash
-  $ weexpack run android
-  ```
-
-  You could modify your project information in android.config.json file:
-
-  - AppName: the name of the project
-  - AppId: application_id the name of the package
-  - SplashText: the text in welcome page
-  - WeexBundle: the bundle file (could be local file or remote url). For Local file please put your we/vue files under the src directory
-
-* for ios platform
-
-  * simulator
-
-    ```bash
-    $ weexpack run ios
-    ```
-
-  * Build ipa
-
-    ```bash
-    $ weexpack build ios
-    ```
-
-  this command will prompt for CodeSign, Profile(provisioning profile), AppId to build ipa. Other information like AppName, Weex bundle could be configured as you like in the file ios.config.json. After this command, ipa file could be created under the directory  `/playground/build/ipa_build/`.
-
-  Note: For details about various requirements to deploy to a device, refer to the Launch Your App On Devices section of Apple's [About App Distribution Workflows][9]. Briefly, you need to do the following before deploying:
-
-  1. CodeSign should be installed to keychain, click keychain to get the id;
-  2. provisioning profile need UUID. you could use the file mobileprovision_UUID.sh to generate UUID as follows:
-
-    ```
-    $ ./mobileprovision_UUID.sh abcpath
-    ```
-    abcpath is the path of provisioning profile file.
-
-* for Web platform
-
-  ```bash
-  $ weexpack run web
-  ```
-
-## Plugin development and publishment
-
-![weexpack2](https://img.alicdn.com/tps/TB18hxjPXXXXXXgapXXXXXXXXXX-248-258.png)
-
-[Plugin development guide](https://github.com/weexteam/weex-pack/blob/master/doc/plugin-devloping-web.md)
-
-## Examples
-
- [Create Weex One App with Weexpack](https://github.com/weexteam/weex-pack/wiki/Create-Weex-One-App-with-Weexpack)
-
-  [1]: https://nodejs.org/
-  [2]: https://www.npmjs.com/
-  [3]: https://itunes.apple.com/us/app/xcode/id497799835?mt=12
-  [4]: https://developer.android.com/studio/install.html
-  [5]: https://developer.android.com/studio/run/managing-avds.html
-  [6]: https://www.docker.com/
-  [7]: https://developer.android.com/studio/releases/sdk-tools.html
-  [8]: https://developer.android.com/studio/run/managing-avds.html
-  [9]: https://developer.apple.com/library/content/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html
diff --git a/doc/source/references/advanced/extend-to-ios.md b/doc/source/references/advanced/extend-to-ios.md
index a2ffa33..a6646b9 100644
--- a/doc/source/references/advanced/extend-to-ios.md
+++ b/doc/source/references/advanced/extend-to-ios.md
@@ -7,6 +7,12 @@
 
 # Extend to iOS
 
+#### Notice
+
+**All of the exported APIs in Weex are controllable and safe, they can not access private APIs or do any system hacks at runtime,  neither can they change the primary purpose of the Application**.
+
+**If you are extending your custom modules/components,  be sure NOT to export the ability of Objective-C runtime, be sure NOT to export  dynamic and uncontrolled methods such as `dlopen()`, `dlsym()`, `respondsToSelector:`, `performSelector:`, `method_exchangeImplementations()`, be sure NOT to export any private methods. **
+
 ### Module extend
 
 Weex SDK provides only rendering capabilities, rather than have other capabilities, such as network, picture, and URL redirection. If you want these features, you need to implement it.
@@ -47,7 +53,37 @@
 @end
 ```
 
-In addition, `0.10.0` begins to support synchronous module API call, you can use macro `WX_EXPORT_METHOD_SYNC` to export module methods which could make JavaScript receive return values from native,  it **can only be called on JS thread**.
+#### export synchronous methods <span class="api-version">v0.10+</span> 
+
+If you want to export synchronous methods which could make Javascript receive return values from natvie, you can use `WX_EXPORT_METHOD_SYNC`  macro. 
+
+native code:
+
+```objective-c
+@implementation WXEventModule
+
+WX_EXPORT_METHOD_SYNC(@selector(getString))
+  
+- (NSString *)getString
+{
+    return @"testString";
+}
+
+@end
+```
+
+js code:
+
+```javascript
+const eventModule = weex.requireModule('event')
+const returnString = syncTest.getString()  // return "testString"
+```
+
+You can alse return number/array/dictionary except string.
+
+`notice:`  the exported synchronous native method **can only be called on JS thread**. **Do not** do heavy work which will block js execution.
+
+`notice:`  Vue 2.0 has not supported this feature yet.  It will be supported in version 0.12 at the soonest.
 
 #### Register the module
 
@@ -194,19 +230,19 @@
 
 Weex offers component life cycle hooks that give you visibility into these key moments and the ability to act when they occur.
 
-method| description
-:----:|------
-initWithRef:type:...| Initializes a new component using the specified  properties.
-layoutDidFinish | Called when the component has just laid out.
-loadView   | Creates the view that the component manages.
-viewWillLoad | Called before the load of component's view .
-viewDidLoad | Called after the component's view is loaded and set.
-viewWillUnload | Called just before releasing the component's view.
-viewDidUnload | Called when the component's view is released.
-updateStyles:| Called when component's style are updated.
-updateAttributes:| Called when component's attributes are updated.
-addEvent:| Called when adding an event to the component.
-removeEvent:| Called when removing an event frome the component.
+|        method        | description                              |
+| :------------------: | ---------------------------------------- |
+| initWithRef:type:... | Initializes a new component using the specified  properties. |
+|   layoutDidFinish    | Called when the component has just laid out. |
+|       loadView       | Creates the view that the component manages. |
+|     viewWillLoad     | Called before the load of component's view . |
+|     viewDidLoad      | Called after the component's view is loaded and set. |
+|    viewWillUnload    | Called just before releasing the component's view. |
+|    viewDidUnload     | Called when the component's view is released. |
+|    updateStyles:     | Called when component's style are updated. |
+|  updateAttributes:   | Called when component's attributes are updated. |
+|      addEvent:       | Called when adding an event to the component. |
+|     removeEvent:     | Called when removing an event frome the component. |
 
 
 As in the image component example, if we need to use our own image view, we can override the `loadView` method.
@@ -287,9 +323,9 @@
    }
 @end
 ```
-   
+
 after your registration for your own custom component, now you can call it in your js file.
- 
+
 ```html
 <template>
   <mycomponent id='mycomponent'></mycomponent>
@@ -301,4 +337,4 @@
     }
   }
 </script>
-``` 
\ No newline at end of file
+```
\ No newline at end of file
diff --git a/doc/source/references/common-style.md b/doc/source/references/common-style.md
index 24fac44..e69d573 100644
--- a/doc/source/references/common-style.md
+++ b/doc/source/references/common-style.md
@@ -217,19 +217,19 @@
 
 <style scoped>
   .wrapper {
-    align-items: center; 
+    align-items: center;
     margin-top: 120px;
   }
   .title {
     font-size: 48px;
   }
   .logo {
-    width: 360px; 
+    width: 360px;
     height: 82px;
     background-color: red;
   }
   .logo:active {
-    width: 180px; 
+    width: 180px;
     height: 82px;
     background-color: green;
   }
@@ -274,19 +274,19 @@
 
 `radial-gradient` is not currently supported, do not use it.
 
-Weex currently supports two color gradients. The direction of the gradient is as follows: 
+Weex currently supports two color gradients. The direction of the gradient is as follows:
 
 * to right
   From left to right
-* to left 
+* to left
   From right to left
-* to bottom 
+* to bottom
   From top to bottom
-* to top 
+* to top
   From bottom to top
-* to bottom right 
+* to bottom right
   From the upper left corner to the lower right corner
-* to top left 
+* to top left
   From the lower right corner to the upper left corner
 
 ### Note
@@ -349,6 +349,59 @@
 </style>
 ```
 
+## box-shadow <span class="api-version">v0.11+</span>
+
+Weex supports box-shadow in iOS: `inset`,`offset-x`,`offset-y`, `blur-radius`,`color`
+
+
+### Note
+
+- box-shadow takes effect in iOS
+
+### Example
+
+```html
+<template>
+  <div class="wrapper">
+    <div style="width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px rgb(255, 69, 0);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow: 20px  10px 5px rgba(255, 69, 0, 0.8);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgba(255, 69, 0, 0.8);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgb(255, 69, 0);">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px black;">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+    <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px #008B00;">
+      <text class="title" style="text-align: center">Hello {{target}}</text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+  .wrapper {align-items: center; margin-top: 120px;}
+  .title {font-size: 48px;}
+</style>
+
+<script>
+  module.exports = {
+    data: function () {
+      return {
+        logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+        target: 'World'
+      };
+    }
+  };
+</script>
+```
+
+
 ## Other Common Style
 
 - `opacity`
diff --git a/doc/source/references/components/image.md b/doc/source/references/components/image.md
index 7cf9814..aac1735 100644
--- a/doc/source/references/components/image.md
+++ b/doc/source/references/components/image.md
@@ -9,11 +9,10 @@
 
 ### Summary
 
-`image` tag is used to render a specified picture, and it shouldn't contain any child component. You can use `img` as alias.
+`image` tag is used to render a specified picture, and it shouldn't contain any child component. `<img>` is not supported currently.
 
 **Notes:** the styles of `width` and `height` should be specified, otherwise it won't work.
 
-alias: `<img>`
 
 ### Child Components
 
@@ -43,7 +42,7 @@
 
 - support `click` event. Check out [common events](../common-event.html)
 - support `appear` / `disappear` event. Check out [common events](../common-event.html)    
-- `load`<sup class="api-version">v0.8+</sup> event. The `load` event fires on an image has been loaded. Only Android and iOS are supported currently. [example](http://dotwe.org/25bd347da6a59603dd31ec057d2691da)    
+- `load`<sup class="api-version">v0.8+</sup> event. The `load` event fires on an image has been loaded. Only Android and iOS are supported currently. [example](http://dotwe.org/vue/98ee340348d7cc3e6fbfe68dbaef1eed)    
   - event object
     - `success` : `true` if the image was loaded successfully, otherwise `false`
     - `size` : the original size of image, contains two parameters: `naturalWidth` representing the original width of image in pixels, `naturalHeight` representing the original height of image in pixels. default value. The default value for both parameters is `0`.
diff --git a/doc/source/references/components/input.md b/doc/source/references/components/input.md
index 837c867..aca934b 100644
--- a/doc/source/references/components/input.md
+++ b/doc/source/references/components/input.md
@@ -29,6 +29,8 @@
 
 * `maxlength`: <span class="api-version">v0.7+</span> a number value to specify maxlength of input.
 
+* `return-key-type {string}`:<sup class="wx-v">v0.11</sup>the keybord returen key type support defalut;go;next;search;send,done.
+
 ## Styles
 
 * placeholder-color: the color of placeholder. Default value is '#999999'.
@@ -62,14 +64,20 @@
 * change: the change event is fired when a change to the component's value is commited by the user. It always come after a 'blur' event.
 * focus: a component has received focus.
 * blur: a component has lost focus.
+* `return`:the return key click.
+
+     the object property of event:
+
+    - `returnKeyType`: return key Type  of component
+    - `value`: component text value
 
 ### common events
 check out [common events](../common-event.html)
 
-* support 'appear' / 'disappear' event. 
+* support 'appear' / 'disappear' event.
 
 
-### Methoads 
+### Methoads
 
  - `focus()` <span class="api-version">v0.9+</span>
 
@@ -79,6 +87,15 @@
 
   The `blur()` method is used to remove focus from an input component and close soft keybord(if it has focus).
 
+- `setSelectionRange(selectionStart,selectionEnd)`  <span class="api-version">v0.11+</span>set text selection range of input or textarea
+
+  - `selectionStart {number}`:set starting location text selection range
+  - `selectionEnd {number}`:set end location text selection range
+
+- `getEditSelectionRange(callback[selectionStart,selectionEnd])`  <span class="api-version">v0.11+</span>get text selection range of input or textarea
+    - `selectionStart {number}`:get starting location text selection range
+    - `selectionEnd {number}`: get end location text selection range
+
 ### Notes
 does not support the common-event 'click'. Please listen to the 'input' or 'change' event instead.
 
@@ -151,4 +168,4 @@
 </style>
 ```
 
-[try it](http://dotwe.org/vue/c1b1a5fdcf0937df1d847f8812a7ccb2)
\ No newline at end of file
+[try it](http://dotwe.org/vue/c1b1a5fdcf0937df1d847f8812a7ccb2)
diff --git a/doc/source/references/components/refresh.md b/doc/source/references/components/refresh.md
index 8aaecbb..ed3ef0a 100644
--- a/doc/source/references/components/refresh.md
+++ b/doc/source/references/components/refresh.md
@@ -132,8 +132,15 @@
 common styles: check out [common styles for components](../common-style.html)
 
 ### Events
-* onrefresh triggered when the scroller has been pulled down
-* onpullingdown available on Android. triggered when the scroller has been pulled down. you can get dy, headerHeight, maxHeight from onpullingdowns event object.
+* `onrefresh`: triggered when the scroller has been pulled down
+* `onpullingdown`: triggered when the scroller has been pulled down. you can get `dy, pullingDistance, viewHeight, type` from onpullingdown event object.
+
+ ```
+  dy: the differencen between two scroll actions
+  pullingDistance: the distance of pulling
+  viewHeight: the height of refreshView 
+  type: "pullingdown" constant string type for this event
+ ```
 
 ### Restrictions
 
diff --git a/doc/source/references/components/waterfall.md b/doc/source/references/components/waterfall.md
new file mode 100644
index 0000000..5c035d0
--- /dev/null
+++ b/doc/source/references/components/waterfall.md
@@ -0,0 +1,60 @@
+\---
+
+title: <waterfall>
+
+type: references
+
+order: 2.5
+
+version: 2.1
+
+\---
+
+# waterfall
+
+<span class="weex-version">v0.11.0+</span>
+
+A component providing waterfall layout.
+
+### Child Components
+
+Notes: The waterfall now supports the following child components: cell, header, refresh, loading and fixed-position components. Other kinds of components will not be guaranteed to be displayed correctly. 
+
+* cell: presents the content for a single data item in waterfall
+* header: components that need to stretch across multiple columns. It can be sticky by using css position.
+
+### Attributes
+
+* **column-width** : This property describes the width of columns in waterfall elements.
+  * `auto`: means that the column width will be determined by other properties(e.g., column-count, if it has a non-auto value).
+  * `<length>`: describes the optimal column width. The actual column width may be wider (to fill the available space), or narrower (only if the available space is smaller than the specified column width). Specified values must be greater than 0.
+* **column-count**:This property describes the number of columns of a multicol element.
+  * `auto`: means that the number of columns will be determined by other properties (e.g., column-width, if it has a non-auto value).
+  * `<integer>`: describes the optimal number of columns into which the content of the element will be flowed. Values must be greater than 0. If both column-width and column-count have non-auto values, the integer value describes the maximum number of columns.
+* **column-gap**:sets the gap between columns. if `normal` is specified,  the gap will be `32`.
+
+To see other attributes,  please checkout [List Component Attributes](./list.html) 
+
+### Styles
+
+common styles: check out [common styles for components](../common-style.html)
+
+* support flexbox related styles
+* support box model related styles
+* support position related styles
+* support opacity, background-color etc.
+
+### Events
+
+common events: check out the [common events](../common-event.html)
+
+* support onclick event. Check out [common events](../common-event.html)
+* support onappear / ondisappear event. Check out [common events](../common-event.html)
+
+### API
+
+All subcomponents in waterfall support the scrollToElement API in [dom module](../modules/dom.html)
+
+### Example
+
+see [playground waterfall example](http://dotwe.org/vue/7a9195643e9e8da352b0d879cdbe68c0)
\ No newline at end of file
diff --git a/doc/source/references/components/web.md b/doc/source/references/components/web.md
index b96097d..1bac6d6 100644
--- a/doc/source/references/components/web.md
+++ b/doc/source/references/components/web.md
@@ -46,7 +46,7 @@
 Check out [common events](../common-event.html)
 
 ### Notes
-not support `click` event. 
+not support `click` event.
 
 ## Example
 
@@ -57,7 +57,7 @@
 <template>
   <div class="wrapper">
     <div class="group">
-      <input class="input" ref="input" type="url" autofocus="false" value="https://m.taobao.com"></input>
+      <input class="input" v-model="value" ref="input" type="url" autofocus="false"></input>
     </div>
     <div class="group">
       <text class="button" @click="loadURL">LoadURL</text>
@@ -74,12 +74,13 @@
   export default {
     data () {
       return {
-        url : 'https://m.alibaba.com'
+        url : 'https://m.alibaba.com',
+        value: 'https://m.alibaba.com'
       }
     },
     methods: {
       loadURL (event) {
-        this.url = this.$refs.input.value
+        this.url = this.value
         modal.toast({ message: 'load url:' + this.url })
         setTimeout(() => {
           console.log('will go back.')
@@ -100,7 +101,7 @@
         console.log('pagefinish', event)
         modal.toast({ message: 'pagefinish' })
       },
-      finish (event) {
+      error (event) {
         console.log('error', event)
         modal.toast({ message: 'error' })
       }
@@ -144,4 +145,4 @@
 </style>
 ```
 
-[try it](http://dotwe.org/vue/154c7fa8ac13e87ff4e7bf9862147d50)
\ No newline at end of file
+[try it](http://dotwe.org/vue/221ff37113a12d692a7a92a100f20162)
\ No newline at end of file
diff --git a/doc/source/references/modules/dom.md b/doc/source/references/modules/dom.md
index cd5651e..3fcee70 100644
--- a/doc/source/references/modules/dom.md
+++ b/doc/source/references/modules/dom.md
@@ -9,7 +9,7 @@
 
 ## Summary
 
-A series of dom apis that sending virtual-dom's messages to the native renderer to update the dom tree. The only API for developers to use in a `.we` file is `scrollToElement` <del>which you can use by calling the `$scrollTo` method</del>. Other APIs mentioned on this page should only be used through the native renderer in the `callNative` process.
+A series of dom apis that sending virtual-dom's messages to the native renderer to update the dom tree. The only API for developers to use in a `.vue` file is `scrollToElement` <del>which you can use by calling the `$scrollTo` method</del>. Other APIs mentioned on this page should only be used through the native renderer in the `callNative` process.
 
 ## API
 
@@ -24,6 +24,7 @@
 * `node`*(Node)*: an element that scrolled into the view.
 * `options`*(object)*: some options.
   * `offset`*(number)*: An offset to the visible position, default is `0`.
+  * `animated` *(bool)* :set element animation, default true
 
 #### Example
 
@@ -142,8 +143,8 @@
 
 ```html
 <template>
-  <div class="wrapper">
-    <div ref="box" class="box">
+  <div class="wrapper" style='margin-top:200px'>
+    <div ref="box"  class="box">
       <text class="info">Width: {{size.width}}</text>
       <text class="info">Height: {{size.height}}</text>
       <text class="info">Top: {{size.top}}</text>
@@ -151,11 +152,26 @@
       <text class="info">Left: {{size.left}}</text>
       <text class="info">Right: {{size.right}}</text>
     </div>
+    
+    <text class="info btn"  @click='click()'>{{this.tip}}</text>
+      
   </div>
-</template>
+</template> 
 
 <script>
   const dom = weex.requireModule('dom')
+  
+ function round(size) {
+      var roundSize = {
+        'width': Math.round(size.width),
+        'height': Math.round(size.height),
+        'top': Math.round(size.top),
+        'bottom': Math.round(size.bottom),
+        'left': Math.round(size.left),
+        'right': Math.round(size.right)
+      }
+      return roundSize
+  }
 
   export default {
     data () {
@@ -167,26 +183,60 @@
           bottom: 0,
           left: 0,
           right: 0
-        }
+        },
+        ref:"viewport",
+        tip:"get box rect"
       }
     },
     mounted () {
-      const result = dom.getComponentRect(this.$refs.box, option => {
+      const result = dom.getComponentRect(this.ref, option => {
         console.log('getComponentRect:', option)
-        this.size = option.size
+        this.size = round.call(this,option.size);
       })
-      console.log('return value:', result)
-      console.log('viewport:', dom.getComponentRect('viewport'))
+    },
+    
+    methods:{
+      click:function() {
+        if (this.ref === 'viewport') {
+          this.ref = this.$refs.box;
+          this.tip = "get viewport rect"
+        } else {
+          this.ref = 'viewport'
+          this.tip = "get box rect"
+        }
+          
+         const result = dom.getComponentRect(this.ref, option => {
+          console.log('getComponentRect:', option)
+          this.size = round.call(this,option.size);
+        })
+      }
     }
+    
   }
 </script>
 
 <style scoped>
+  .btn {
+    margin-top:20px;
+    border-width:2px;
+    border-style: solid;
+    border-radius:10px;
+    width:300px;
+    margin-left:170px;
+    padding-left:35px;
+    border-color: rgb(162, 217, 192);
+    
+  }
+  .btn:active {
+    background-color: #8fbc8f;
+		border-color: gray;
+  }
+  
   .box {
-    margin-top: 200px;
+    align-items:center;
     margin-left: 150px;
-    width: 450px;
-    height: 450px;
+    width: 350px;
+    height: 400px;
     background-color: #DDD;
     border-width: 2px;
     border-style: solid;
@@ -195,10 +245,13 @@
   }
   .info {
     font-size: 40px;
+    top:30px;
+    margin-left:20px;
     font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
     color: #41B883;
   }
 </style>
 ```
 
-[try it](http://dotwe.org/vue/87d4ed571de129ab28052b06a5d65fc8)
\ No newline at end of file
+[try it](http://dotwe.org/vue/87d4ed571de129ab28052b06a5d65fc8)
+
diff --git a/doc/source/references/modules/globalevent.md b/doc/source/references/modules/globalevent.md
index 66df3a2..3738976 100644
--- a/doc/source/references/modules/globalevent.md
+++ b/doc/source/references/modules/globalevent.md
@@ -12,7 +12,7 @@
 
 `globalEvent` are used to listen for persistent events, such as changes in positioning information, gyroscopes, and so on. A global event is a secondary API that requires additional APIs to work with.
 
-You can register events via `addEventListener`, which can be removed by `removingEventListener` when you do not need to listen for `globalEvent`.
+You can register events via `addEventListener`, which can be removed by `removeEventListener` when you do not need to listen for `globalEvent`. `globalEvent` is not supported in Vue version.
 
 *AUCTION* 
 - Only instance level is not application level . 
diff --git a/doc/source/references/modules/modal.md b/doc/source/references/modules/modal.md
index 32ffab6..5fd034e 100644
--- a/doc/source/references/modules/modal.md
+++ b/doc/source/references/modules/modal.md
@@ -18,6 +18,8 @@
 - `options` (object): toast options.
  - `message` (string): the text message that the toast shows.
  - `duration` (number): the duration(seconds) that the toast shows.   
+   - For Android: If the duration is longer than 3, it will use a system defined variable called **LONG**, otherwise it will use another variable called **SHORT**
+   - For iOS: It will show the toast during the specified time.
  
 ### alert(options, callback)    
 
diff --git a/doc/source/references/modules/websocket.md b/doc/source/references/modules/websocket.md
index b2752f4..e40cdf1 100644
--- a/doc/source/references/modules/websocket.md
+++ b/doc/source/references/modules/websocket.md
@@ -13,9 +13,9 @@
 
 ## **Notes:**
 - iOS and h5 provide  webSocket default handle. if you use webSocket in android environment . you should provide custom adapter implementation,source:
-  - [DefaultWebSocketAdapter.java](https://github.com/alibaba/weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java);
-  - [DefaultWebSocketAdapterFactory.java](https://github.com/alibaba/weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
-  - refer:  [weex playground](https://github.com/alibaba/weex/tree/dev/android/playground)
+  - [DefaultWebSocketAdapter.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapter.java);
+  - [DefaultWebSocketAdapterFactory.java](https://github.com/apache/incubator-weex/blob/dev/android/commons/src/main/java/com/alibaba/weex/commons/adapter/DefaultWebSocketAdapterFactory.java);
+  - refer:  [weex playground](https://github.com/apache/incubator-weex/tree/dev/android/playground)
 - only support in .we file,not support in vue2.0
 
 ## API
diff --git a/doc/source/references/modules/webview.md b/doc/source/references/modules/webview.md
index 1ca1b5e..c67dfe7 100644
--- a/doc/source/references/modules/webview.md
+++ b/doc/source/references/modules/webview.md
@@ -65,7 +65,7 @@
 <template>
   <div class="wrapper">
     <div class="group">
-      <input class="input" ref="input" type="url" autofocus="false" value="https://m.taobao.com"></input>
+      <input class="input" v-model="value" ref="input" type="url" autofocus="false"></input>
     </div>
     <div class="group">
       <text class="button" @click="loadURL">LoadURL</text>
@@ -82,12 +82,13 @@
   export default {
     data () {
       return {
-        url : 'https://m.alibaba.com'
+        url : 'https://m.alibaba.com',
+        value: 'https://m.alibaba.com'
       }
     },
     methods: {
       loadURL (event) {
-        this.url = this.$refs.input.value
+        this.url = this.value
         modal.toast({ message: 'load url:' + this.url })
         setTimeout(() => {
           console.log('will go back.')
@@ -108,7 +109,7 @@
         console.log('pagefinish', event)
         modal.toast({ message: 'pagefinish' })
       },
-      finish (event) {
+      error (event) {
         console.log('error', event)
         modal.toast({ message: 'error' })
       }
@@ -152,4 +153,4 @@
 </style>
 ```
 
-[try it](http://dotwe.org/vue/154c7fa8ac13e87ff4e7bf9862147d50)
\ No newline at end of file
+[try it](http://dotwe.org/vue/221ff37113a12d692a7a92a100f20162)
\ No newline at end of file
diff --git a/doc/source/releasenote.md b/doc/source/releasenote.md
new file mode 100644
index 0000000..8e5c617
--- /dev/null
+++ b/doc/source/releasenote.md
@@ -0,0 +1,858 @@
+---
+title: Release Note
+type: releasenote
+layout: post
+---
+
+# Release Note
+
+## v0.10.0
+------
+- New Feature
+  - Support Vue.js  
+    The Vue.js 2.1.8 ([runtime-only build](https://vuejs.org/v2/guide/installation.html#Standalone-vs-Runtime-only-Build)) is in WeexSDK now. You can use Vue.js to build native app by WeexSDK 0.10.0.  
+    We reused the original native render engine and developed a new renderer ([weex-vue-render](https://www.npmjs.com/package/weex-vue-render)) for the web platform, which is based on Vue 2.0.  
+    The former front-end framework (commonly known as `.we`), which is inspired by Vue 1.0, is deprecated. Although it still works well in this release, we suggest to migrate it to Vue 2.0.
+  - SDK
+    - New CSS support
+      - [text `font-weight`](https://weex-project.io/references/text-style.html)  
+        `font-weight` can set to [`normal`|`bold`] or 100-900.
+      - gradient  
+        like CSS3, now you can use gradient in Weex. For example:   
+        
+        ``` css
+        background-image: linear-gradient(to right, blue, white);
+        ```
+        ![img_1695](https://cloud.githubusercontent.com/assets/115201/23015955/ba075876-f46f-11e6-9d88-2ca3096551b9.jpeg)
+        [Read more about gradient](https://weex-project.io/references/common-style.html).
+      - Pseudo class  
+        Currently, Weex supports 4 pseudo classes:`active`, `focus`, `disabled`, `enabled`. 
+    - New BroadcastChannel API
+      Developers can use `BroadcastChannel` API to implement inter-instance communication.   
+      
+      ``` js
+      const Stack = new BroadcastChannel('Avengers')
+      Stack.onmessage = function (event) {
+        console.log(event.data) // in this case, it's "Hulk Smash !!!"
+      }
+      
+      // in another instance
+      const Hulk = new BroadcastChannel('Avengers')
+      Hulk.postMessage("Hulk Smash !!!")
+      ```
+    - Image's `onload` event add [`naturalHeight` and `naturalWidthimage`](https://weex-project.io/references/components/image.html) to get the original size of image file.
+    - Websocket Support  
+      WebSockets is an advanced technology that makes it possible to open an interactive communication session between the user's h5/iOS/android and a server. With this API, you can send messages to a server and receive event-driven responses without having to poll the server for a reply.  
+      [Read more about Weex's websocket.](https://weex-project.io/cn/references/modules/websocket.html)
+    - Support synchronous method call
+      Both module and component method can defined synchronous method exposed to JS runtime now. Means native will invoke these method in JS thread directly.
+    - Support `viewport` configuration
+      Similar to [W3C specification](https://drafts.csswg.org/css-device-adapt/#viewport-meta), Weex support set define `viewport` in script tag:   
+      
+      ``` html
+      <script type="config">
+        {
+          "viewport": {
+              "width": "device-width"
+          }
+        }
+      </script>
+      ```
+  - Tools   
+    - [Devtools](https://github.com/weexteam/weex-devtool)
+      - Support Vue 2.0 debugging.  
+      - Add network switch for network inspector.
+      - Make application capable to decide which bundle is 'un-debuggable', which means page's source code is unreadable in debug mode.
+    - [Weexpack](https://github.com/weexteam/weex-pack)
+      - Has full set of commands for developers to setup android/ios application with his .we/.vue files.
+      - Developers could easily pack/install his application with simple command.
+      - Has full set of commands for developers to manage weex plugins, including create plugin template, add plugin to his project etc.
+      - [Plugin market](http://market.weex-project.io) was formally used for developers to publish/download weex plugins.
+- Bugfix
+  - \* [android] add fixed size property 5191241
+  - \* [android] bug fix NPE && cache ScreenWidth and ScreenHeight 950e843
+  - \* [android] bugfix duplicate destroy 25412e0
+  - \* [android] bugfix keyboard force hide (#106) 0ad2f95
+  - \* [android] bugfix scroller offset transform twice cd7ad66
+  - \* [android] change gradle to fix build 1feaadf
+  - \* [android] ClipPath doesn't work when the following conditions met   1. rotation or scale is used   2. API level is 24 As border-radius uses clipPath, this will cause views with border-radius using rotation or scale on API level 24 doesn't. So far, this is a bug of Android N,https://code.google.com/p/android/issues/detail?id=225556&sort=-id&colspec=ID f69e918
+  - \* [android] Fix bug of border width due to viewport. Refer https://github.com/sospartan/weex/commit/7cfe9752e0c95f3b23bedfa3f51ba3bafb4318f4#diff-42908d45812780fec8606537dffab67dL1054 9cd6800
+  - \* [android] fix cast exception 3136fcf
+  - \* [android] fix DCL thread safely (#48) 62e9b71
+  - \* [android] fix duplicate add component child to list 3fd73d7
+  - \* [android] fix find component 45643ab
+  - \* [android] fix getScreenWidth with context parameter (#80) 16377f2
+  - \* [android] fix inefficient use of keySet iterator instead of entrySet iterator (#47) dac80e2
+  - \* [android] fix intrinsicSize when img.resize=contain b6272a2
+  - \* [android] fix npe in onScrollerListener (#138) 8141de7
+  - \* [android] fix npe in stream callback 24aa2c2
+  - \* [android] fix PageActivity duplicate add view to container 06f77b8
+  - \* [android] fix refresh crash after destoryed (#144) 51ea00b
+  - \* [android] fix refresh/loading a726d3c
+  - \* [android] fix slider auto scroll behavior 28926ba
+  - \* [android] fix slider layout, ignore position offset. a0381e4
+  - \* [android] fix some weak code that may cause file leak or useless (#49) 8d0f049
+  - \* [android] fix stackoverflow 6a01059
+  - \* [android] fix stream response status type (#63) 8580c66
+  - \* [android] fix switch case (#127) c301b92
+  - \* [android] fix textarea vertical gravity 9730948
+  - \* [android] fix the IllegalArgumentException on empty arguments f799d67
+  - \* [android] fix the wrong header location (#135) d58fce9
+  - \* [android] fix typo: WebSocket -> webSocket c162d54
+  - \* [android] fix wrong initial direction value on appear event (#107) 593c799
+  - \* [android] modify default real position (+1 squashed commit) Squashed commits: [9470835] \* [android] fix unittest b915584
+  - \* [android] move indicator layout logic to subclass;seperate fixed layout logic fc2a009
+  - \* [android] rename debug activity 95ab73a
+  - \* [android] update fix do not remove loading and fresh ddf74ff
+  - \* [html5] fix border & border-width for less than 1px. (#2059) 3eb34b9
+  - \* [html5] fix bugs of neighbor 34fafb2
+  - \* [html5] fix compatibility problem & support deps arguments. 00e7079
+  - \* [html5] fix content-type error 5b06140
+  - \* [html5] fix h5 build 56e9c03
+  - \* [html5] fix shrink & grow for flex. (#2082) b5b600d
+  - \* [html5] fix slider container's style. (#2157) a79bd9c
+  - \* [html5] fix uncaught dom exception for video.play. (#1877) 7a0bd03
+  - \* [html5] fixbug:change name from WebSocket to webSocket] (#2146) b72bbb9
+  - \* [ios]  bug fix: websocket module name is changed , playground should change 3f35b82
+  - \* [ios] bug fix: onload success value type is not same as android, change it for unify 531633c
+  - \* [ios] bugfix call renderFinish 1fb2e0a
+  - \* [ios] bugfix module default method not called 0be9f87
+  - \* [ios] bugfix moduleEvent compatible dbea448
+  - \* [ios] bugfix multi input or textarea maybe wrongly change root view frame a2e97db
+  - \* [ios] bugfix navigation pop animated value convert cfe98a8
+  - \* [ios] bugfix navigator open and close. beef00b
+  - \* [ios] bugfix rootView information  coordinate 7313703
+  - \* [ios] bugfix slider-neighbor may beyond item count index cbfa9df
+  - \* [ios] bugfix view event 83d3e6a
+  - \* [ios] bugfix: playground cannot open c949463
+  - \* [ios] bugfix:delete configpicker not delete the method in header cc3afc2
+  - \* [ios] fix : Change the lastoffsetXRatio to lastOffsetXRatio de8f246
+  - \* [ios] fix : Change the parameter wording to make it more in line with development habits. 869da54
+  - \* [ios] fix : if _fontFamily is nil set _fontFamily value with the correct system font. In the case of Chinese characters, this logic help system select the right system default font name. 6e202b6
+  - \* [ios] fix : improve slider-neighbor demo code .remove useless <container> label and <scroller> label. 2c236c8
+  - \* [ios] fix bug : you can't slide to the right when the slider has only two pages. d224bfb
+  - \* [ios] fix bug that border-x-radius not work 96ba5b5
+  - \* [ios] fix bug that horizontalpan and verticalpan can not trigger simultaneously eb03cb0
+  - \* [ios] fix bug: text input padding is not right f4accba
+  - \* [ios] fix crash after returning id type, need to copy here. 4f5276b
+  - \* [ios] fix issue that cells pushed down by inserted cells will not trigger disappear event. 9dcc4dd
+  - \* [ios] fix issue that rotate 90->180->270 not work. 5b3c13d
+  - \* [ios] fix issue that rotate(0) not work after rotate(>180degree) 0f6989d
+  - \* [ios] fix issue that there will be 1px space remaining between list's top and navigator when UITableView is pulled down and finger releases. d286e3c
+  - \* [ios] fix typo in [WXSDKEngine initSDKEnvironment] 17a093f
+  - \* [ios] fix variable name spelling error becd631
+  - \* [ios] Fixed :Merge remote-tracking branch 'alibaba/ios-feature-20170118' into ios-feature-20170118-new-slider-neighbor-fix    move "sliderview init" code to loadview method. 141fd9d
+  - \* [ios] fixed component's view should be removed separately since its view is a subview of rootview. f9b2378
+  - \* [ios] fixed issues that horizontal/vertical pan not respond while recyling views. c7b4bec
+  - \* [ios] js service bug fixed c068bd7
+  - \* [ios] removed debug code and fixed bug 548984f
+  - \* [ios] update navigator module, add open and close interface. f65c42f
+  - \* [ios] upgrade JSFM to 0.19.3 to fix callback problem 9ab9b92
+  - \* [jsfm] fix mismatch of weex.require and weex.document ad63f2a
+  - \* [jsfm] fix support native method bug ce26a6f
+  - \* [jsfm] fixed Promies bug in android 17282c2
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.10.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.10.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+
+## v0.9.4
+------
+- New features
+  - SDK
+    - New API to get Component's size and position:
+      Now you can get these data through `getComponentRect`:   
+      ``` javascript
+      var dom = require('@weex-module/dom');
+      dom.getComponentRect(this.$el('comp_id'), function(data){
+        if(data.result)
+          console.log(data);
+      });
+      ```
+      The `data` callback parameter contains a `result` to tell if operation is success. And `size` tell you the true data(`bottom`/`top`/`left`/`right`/`width`/`height`) of component.
+    - A brand new `picker` module. We have 'single-picker','date-picker' and 'time-picker' currently, and more common pickers are on the way.  
+      ![img_1282](https://cloud.githubusercontent.com/assets/115201/21414801/e6341b36-c83d-11e6-9e5a-3acdabb592ee.png)
+    There are two ways to use `picker`
+    - Use `picker` module directly:
+    ``` javascript
+    var picker = require('@weex-module/picker');
+    var self = this;
+    picker.pickDate({
+        'value':'2016-11-28',
+        'max':'2029-11-28',
+        'min':'2015-11-28'
+    },function (ret) {
+        var result = ret.result;
+        if(result == 'success')
+        {
+            self.value = ret.data;
+        }
+    });
+    ```
+    - `input` component also add 'date' and 'time`type to work with`picker` module internally:
+    ``` html
+    <input
+      type="date"
+      placeholder="select date"
+      class="input"
+      autofocus="false"
+      value=""
+      onchange="onchange"
+      max = "2029-11-28"
+      min = "2015-11-28"
+              ></input>
+    ```
+  - Support animation with `width` and `height` property.
+  - Support use empty value to reset css property to default value.
+  - Components can expose methods too, like modules do. Developers use the same way as create module method to achieve that.
+  -  Add `blur` and `focus` method to manually control `input` component to lose or get focus.
+  -  Support relative URL, which will resolve real URL by bundle's URL.
+  -  Core javascript framework's unit test coverage is 100% now. we'll pay more attention to quality.  
+  - DevTool
+    - Support to check the node hierarchy in [weex-devtool-extension](https://github.com/weexteam/weex-devtool-extension) and highlight the node if it exceeds an specified level.
+    - Support different refresh mode in devtools to reload the page or SDK automatically when source file updated.
+    - Improve quality in [weex-devtools-android](https://github.com/weexteam/weex-devtools-android) module
+      - Remove explicit dependency on okhttp and okhttp3 by reflection and proxy
+      - Improve demo application with less and refactored code
+      - Fix some crash caused by class up cast
+      - Fix reflection crash caused by complier optimization
+      - Fix "network on main thread" and stop screencast when disconnect
+    - Add [weex-analyzer-android](https://github.com/weexteam/weex-analyzer-android) and [weex-analyzer-ios](https://github.com/weexteam/weex-analyzer-ios) which support the following on device directly:
+      - Inspect FPS/CPU/memory
+      - Inspect storage
+      - Display log information
+      - 3D viewer of the weex page
+      - Javascript error prompt
+- Bugfix
+- \* [android] bug fix slider (#56) 29b9d29f5acd9677a64316b94d5c95f8c7f1a837
+- \* [android] bugfix duplicate destroy 0a59a85467671ddb982fbea6def810e6fa415137
+- \* [android] bugfix scroller offset transform twice 1db300d470951f543236e0b605d7b5a974b96430
+- \* [android] fix appear event not trigger at first 85085a394dd2bae5e397b889c01c1e1a3b8e6b46
+- \* [android] fix build 46bcf4298cd74c1d9706255143f95e0299ebdd15
+- \* [android] fix callback parameter 16db52ed031f7182f2159bc18c0c6e20e7c907f7
+- \* [android] fix dialog window leaked (#55) 4c478044355d6d552fb2f72935cd93867e5f0802
+- \* [android] fix different behavior with iOS switch (#43) 7708a6680e51ae6af9351724940778ce953538ed
+- \* [android] fix dynamic inserted header not sticky display 83c06383aa513061d144ec448ce0ccc25bde5484
+- \* [android] fix fireevent change key 9fb7d0f25d6b1bfe54fb63c9b73c53f8c927e4ad
+- \* [android] fix flash when render video tag a53e6b80b8fa67cce85307a2e5e93d9fb6c28784
+- \* [android] fix list not lazy 0be12be1194bea0c624791662e9f38aac4f0c3fd
+- \* [android] fix methods generate external-loader-component ec6d4136a29c1626470d3bbba90db3d9916c374e
+- \* [android] fix move child from index to index b within the same parent 72259e7a5734ed9a595de080d05ea8e1bf1e716e
+- \* [android] fix slider auto scroll a8d74031dbd526201c05433a08c8aac2047b7a66
+- \* [android] fix slider auto scroll after activity resume bba3bdea45bfb4030b10ea9a847a77463d1ab20a
+- \* [android] fix slider auto scroll after activity resume e0d5e79fc29e07b734d892073effc041a39c85c6
+- \* [android] fix stackoverflow in slider c1f1d702110f49ead4005fae50e4e63c5e72cfac
+- \* [android] fix sticky not display when scrolltoelement 22d163cb572e6b1c510c350a692a4265eb27e204
+- \* [android] fix test d756db8b4c26f8610076a13a0980d024a4e734ac
+- \* [android] fix textarea content vertical gravity eecc32c0a72ce82aa4e998cabb31308fc737fe95
+- \* [android] fix the invalid index of slider-neighbor (#62) 59fd5742a23908174de12804b1a0992d89663afd
+- \* [android] fix unittest 0b2a3778dfa39f17ae6346168b55a3418d85aa1b
+- \* [android] fix unittest 0d2bd982507820f5840e99ee12cd351ae6eb18e5
+- \* [android] fix unittest 4f120b6dbcb4433c8c320c310cd4de051163780c
+- \* [android] fix unittest 6129cd2ed06ce7acc0366b4c172bdf199d52e997
+- \* [android] fix wrong behavior with slider.index (cherry picked from commit c59ae39) 3028f32278a47603d1dc9f0f4314b44721069ac4
+- \* [android] fix wrong behavior with slider.index c59ae3977837be238b08b69388aec12eb4817716
+- \* [android] move element  bug fix dfc643df7fb100737c98efa7f5932e75d07ca59f
+- \* [android] move element  bug fix f28fbdd3ac57c157f52d82fa9473e8651b88023b
+- \* [android] NPE fix ee67a26c045cc351d317e805712bd6e50c4213cb
+- \* [android] Parent's "append=tree" will prevent child's transform style, this commit fix it by add the whole dom tree to animation set instead of the root dom. \* 626915b34bfb348947709c23e09a3dac7acd6962
+- \* [android] slider: fix the IllegalStateException (#58) 0e94762e1ebc240a5e8be6c131848b57bb48b1ea
+- \* [android] v8 security bug fix 7a8f14b78753fd02d59b126fffbd52996376ecc3
+- \* [html5] fix the conflict ac845591a65501c4eae70471502d8370f9983130
+- \* [html5] fix wwp config 0a2420a7202887a0222c0294c510267f139858c8
+- \* [html5] fixed lazyLoad filename 4119190c6b093f87bcb8ebd00f23bd939c307ad1
+- \* [html5] fixed rollup build 03f241ce3c7d8ac786b632f80aa22b94fdc00d34
+- \* [ios] 1. fix refresh location 2. cancel playground re-checkupdate 69f43da52ab22c7777d54bc2d9f45e95eb1d437f
+- \* [ios] bug fix 1664, add resetLoadmore on scroller & list. 4efe8662912ec5a8ce5fac8e09c2e061a21056a4
+- \* [ios] bug fix picker 2d979a58c4b37e93dda5b775d79a7a1ea2165c22
+- \* [ios] bug fix picker 983fe0069ff670b92b6fa7e3e6e29c5b2c768762
+- \* [ios] bug fix picker rescue 27fe3f23bb63072b766f75b69351464d163b331a
+- \* [ios] bug fix setNeedsLayout in every elements. not in once. because elements not contain css node only edd47e09ff453a26c7b176279d0ab84454d4914a
+- \* [ios] bug fix update code style 05b2959be0e0c35ad31b5b20b77f86f296786da2
+- \* [ios] bug fix: change resetTextCSSNodes to resetTextCSSNode a782e092b175a0a34db7cfccb74b5f157ddb3fd4
+- \* [ios] bug fix: refresh view layout error. b0c4a403b1e1dc8aa500c60efcef263b6f7fdd6f
+- \* [ios] bug fix:slider does not remove items  synchronously when item view has been remove from superview. f60997fc3fe7bcfd220e159d61dbaae438e59131
+- \* [ios] bugfix add register component type f7e72ea289ce5f909fb9f6b61705e4f4b9930c53
+- \* [ios] bugfix cancel url uft8-encode 6b67a9e8a3f62849709d552bea0d947679164041
+- \* [ios] bugfix cancel url uft8-encode 9a43cfc9ecb9683562560a880d0f026fd28e93ea
+- \* [ios] bugfix component load rewriteurl f92a6d70e0f3db1eb14c4d90c7e30609e5175dff
+- \* [ios] bugfix globalEvent removeObserver don't need specify target a5420939bac4e21ef61b15710e2fa5e205403d96
+- \* [ios] bugfix iconfont load font , support woff 4c5d5812cb145d60270c5e59ae29def9be8fdcf3
+- \* [ios] cancel animation while handle input keyboard and fix bug when there are many input in a page 61f9259bf77c59916d3dbcdf62b12cd0161698b4
+- \* [ios] debug performance ae3d30802681990e79ce06fb4229b74f3c1d99c2
+- \* [ios] fix #1192, #FFF display error in iOS 5df5cd3739e79ec6e2fefbff66ba7ba2a411d637
+- \* [ios] fix #1479, add handler for slider's items count less than or equal to 2 d654ed7d926c2e20b3a34315348a87470171cdd1
+- \* [ios] fix : Compatible non-standard url ("//a.b.example.png") 3da33595d6e1a261b1c761811d1d8f7672ba3db5
+- \* [ios] fix border's "Overlapping Curves" not recomputed when relayout d302adf14568a32d2b635a64d1326172d9590893
+- \* [ios] fix bug datepicker no update and crash eef4483b3176a0f2e18673e26068a6ec53fef5ca
+- \* [ios] fix bug debugTool unload 751b752f72690954c49ffaf8b89702a0f93712f2
+- \* [ios] fix bug default style f8f056e9f067b4ce23731cb3114383705a5926ac
+- \* [ios] fix bug height change to zero when style change 1ed428dda5d1b4e2b360f216b1b96433479dad28
+- \* [ios] fix bug height change to zero when style change a4d7ebea5e288b753ee71571b149130149768c6b
+- \* [ios] fix bug height change to zero when style change aac7c013003c055e840674e5f61dba4d5073dd73
+- \* [ios] fix bug height change to zero when style change bb8cdb1f2f7ff6ad9b8ac4de23323ca9dea7e0d9
+- \* [ios] fix bug that setFrame incorrectly when transform has been set 84dfd4c7395ae728356b660a0b605c7b85353973
+- \* [ios] fix bug that sticky component's absolutePosition will be computed twice if the actual absolute position is {0,0} a780352d0a1a139ce3e276404d03bd3f9e2e6fd6
+- \* [ios] fix bug: text area cursor auto go to end .reason: if attributes[@"value"] is exist. _updateAttributesOnMainThread will change textview text.the cursor go to end. \* solution: save the  textview  selectedRange , when set textview.text ,correct it d22836ef559809f566068bfe47be960a6d2e9faa
+- \* [ios] fix bug:_updateAttributesOnComponentThread reset styles delete 7c993d1952551ccfad2ad22f01ffa40ea9d12245
+- \* [ios] fix bundlejs 616f4653925c801406ca5fc80fd5f890c45c2b19
+- \* [ios] fix code style 31b08adf525559d9ce46f25eab349584d2f621a9
+- \* [ios] fix compiler complain about warning b92e471c1195f40f8167c8253ea0a909930a9880
+- \* [ios] fix componentRect infomation da08628c562dded860fe1558fb9dc187530223c9
+- \* [ios] fix componentSize to get 41af993f1ffd4e041083a0150607040b9e7cdef2
+- \* [ios] fix crash 55f69b502f0ff1f997dbfbe5238e35a4f123bc5b
+- \* [ios] fix crash on events' copy 491df3dca1fd47c1c564823c7f46527bf064c2dc
+- \* [ios] fix datepicker bug when no value can not pop right picker 24441ad6273e6093a9919b2699a4333b9d7147df
+- \* [ios] fix datepicker complie error 3bf2a0753cf47170144939d42173a668b22e27f5
+- \* [ios] fix datepicker complie error a362ef85918551bacac762ee660300e3108c1c5a
+- \* [ios] fix deprecated method of textarea 4d24f3ff7e792a1c97aa7ee31fbc7f0899c21efb
+- \* [ios] fix failed tests. b5210b244f2f2331be01c9afc4a8cde5b32ed0ee
+- \* [ios] fix input bind each other feb1e7c1ce959491fefed808e46e6291203ccbd7
+- \* [ios] fix ios7 crash f02eff33acab4a58a1a8d6e4d84cef44dcf09bf4
+- \* [ios] fix issue about WXConvert 's UIColor method add193b643c980e310866498dc081130ee287373
+- \* [ios] fix issue that iOS 7 will crash while alert still alive but instance has been destroyed 160a2dae54d6e656c980b9d008b15b0dc28aa4e1
+- \* [ios] fix issue that onappear/ondisappreat not work if binding to cell component. 63f6d7507731d2004e996f99bf859c228fc8b651
+- \* [ios] fix multi keyboard notification 684d3955de263cb39f8afc42c6ffa7340674c81a
+- \* [ios] fix navigator parameter b3117a9c482fb5491b5206413fa7607c356cf95a
+- \* [ios] fix override bundleUrl d7729716aea6652d325e4282ad6b42aaaf14f82c
+- \* [ios] fix playground Podfile   remove c header file  include in WXUtility.h e299feaf4076a5bf7140335ac6cc70d9d99a01da
+- \* [ios] fix responderToSelector target b0f550d6b94da6d9764863b328edfba6d730a75b
+- \* [ios] fix rootComponent order 999c59da3a1dc6c91f036b938c9963cc3cfe87c4
+- \* [ios] fix set navigator callback msg a30b7ed4978de3c91448a1c944431f19e942b515
+- \* [ios] fix single picker but 969d4212967c084a3477e3877052af224354f0e4
+- \* [ios] fix stream jsonp bug b018343b71eb7289bde326acf2f2fe1b124cfad8
+- \* [ios] fix testComponentFactory 99574bf0a1072dbfba547d74545783891b15cdff
+- \* [ios] fix tests compile error 461c24401e5fa1c37f9af25db35665f9f6b4a8da
+- \* [ios] fix text line-height and text-align conflict b1a0673020b7a271fb540ae723ca481aa18db7b4
+- \* [ios] fix textinput component inputEvent fired repetitiously 5c8242776f1410771a357735d6ae2a5b261b7d20
+- \* [ios] fix warning b8464248f61ad3ed9570730608e563f9c73e8ae6
+- \* [ios] fix warnning e2533d036daad60345284f276949dec06b5e0db9
+- \* [ios] fix when options is nil and then  bundleUrl will be nil 5f71a1a2eb7442cf63d9732a6a2b3e2cb3765fa1
+- \* [ios] fix WXSDKInstance rootview bug 3b08a516ff788ca116329dc863ffcb9f66979881
+- \* [ios] texture bug fix : when input change . the text content send to change a38f1b2b8e05e149f09ffbb986268339a9042691
+- \* [jsfm] fix #1447, fix binding event bug of components which have repeat attribute 421cc439d1b8b5abbdbba58882f6c39fd8f862c9
+- \* [jsfm] fix build 8162124f72caf9360657ebc5a2750554d36f3659
+- \* [jsfm] fix condition judgment bug in insertBefore & insertAfter 9c182af615e0e597e21a44217a511126333499e9
+- \* [jsfm] fix eslint c0db1807d080a26c7344f4cc57e5834e98b06085
+- \* [jsfm] fix eslint f75cbe955dc0bcdf33a608af82ab18d3290b87c3
+- \* [jsfm] fix format for lint 5faa860804c1d9adb719a450b53da165ec523e83
+- \* [jsfm] fix the npm run build d3e5124add2dd6a42b1209fe11a8dc58cd536487
+- \* [jsfm] fixed #1818 a757deb7235792c2dd11684500651f717f43226a
+- \* [jsfm] fixed all cases for default framework (black-box) c842ef884e45c568f9ae55e67a066a5de2de15ed
+- \* [jsfm] fixed all test scripts 95ba6a1d6c4211d62d7d2a6693c8aa1e5b7d9607
+- \* [jsfm] fixed all unit test for new file structure d4eb5c97daa34dc53dd929eaf736dcf22e8873b6
+- \* [jsfm] fixed browser render file structure ba7a40bca9a5759101e821c4e043e437b848dcde
+- \* [jsfm] fixed deps error 555ded73f6c6ecb5a9c110f34ab34e596c1c36eb
+- \* [jsfm] fixed html5 render for Vue 980d952d71903545a0bfa7115dfeacd8c7c71ae5
+- \* [jsfm] fixed lint and added case test a3e20a8c78feda705b853f2036cc17bd256f7bb8
+- \* [jsfm] fixed rollup config 4a1c208cf33fb3e5649f8116133f97b003e78127
+- \* [jsfm] fixed runtime instance map management b6e94fa1d54bfdc541ae7c48d98f4dc01481660f
+- \* [jsfm] fixed some vue examples ca2a9c57365a67c9215f69c438c86440a28704ce
+- \* [jsfm] fixed some vue examples da21405b7fab3228bda0e0b2a74853a05c5eb69a
+- \* [jsfm] fixed url checker in vue example 679dc1cffbd0413b9b81624ac46f61473cdf756d
+- \* [jsfm] removed timer bug case and replaced to slot bug case b6f2c8390e3a97df948fc8d2699d15eb62582625
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.9.4.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.9.4.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.8.0
+------
+
+- New Features
+  - Add [globalEvent module](https://github.com/alibaba/weex/blob/doc/doc/modules/globalevent.md)
+  - Support `width/height` animation in transition
+  - Refactor the default js framework code, hide almost all the private APIs #777
+  - iOS 10 compatibility
+- Performance
+  - Support `callAddElement` low-level API to make rendering faster
+  - Improve SDK initialization performance, for minimise invoke thread impact.
+  - Use native `Set` polyfill to fix iOS7 memory leak
+  - Use `setProperty` replace reflection for better performance
+  - Add `static` directive in default js framework to avoid unnecessary data-binding and take down the memory use
+- Tools
+  - Add [weex-pack](https://github.com/weexteam/weex-pack), our next generation of engineering development kits. It allows developers to create weex projects with simple commands and run the project on different development platforms.
+  - Add [weex-devtool-extension](https://github.com/weexteam/weex-devtool-extension), a extension for Weex devtool to improve your debug experience,which equivalent an element tag for debugger page.
+  - Move devtool to separate [iOS](https://github.com/weexteam/weex-devtool-iOS) and [Android](https://github.com/weexteam/weex_devtools_android) repos.
+    - Add "screencast" which enable the screen of the device(or monitor) to appear on the "Inspector" page; 
+    - Add "remote control" function, in Android user could control remote device(or monitor) when he moves mouse on screencast; 
+    - Add "select element" function which enable the user to find the exact node in "Elements" inspector Tab when he click the mouse on screencast;  
+    - Add "vdom inspector", so user can choose to see the details of native dom or vdom in "Elements" Tab at his preference; 
+    - Adjust interfaces with weex SDK to support "callAddElement"; 
+- Bugfix
+  - [jsfm] fix the bug of Dep.target 3448104
+  - [jsfm] fix the test of clearCommonModules 4be9291
+  - [jsfm] fix bug for clear common modules (pr #1097) d2f8c4d
+  - [jsfm] fix callAddElement callback -1 e421b41
+  - [jsfm] fix #1237, fix binding event bug of components which have repeat attribute bfed029
+  - [jsfm] fix bug af99cc1
+  - [jsfm] fixed & closed #1148 4209850
+  - [jsfm] fix merge classStyle fail between nested components 91c5cc6
+  - [jsfm] fix watcher dismatched bug between multi instance 900305d
+  - [jsfm] fixed _Set bug 51b219b
+  - [jsfm] fixed memory management bug in dom event handler in document 9024bda
+  - [jsfm] fixed Promise polyfill problem in iOS 7-8 9a61f33
+  - [android] fix #1380, update method getOffsetAmount in WXCircleViewPager.java (#1382) fd74539
+  - [android] bug fix native crash d8671bd
+  - [android] fix editComponent set non-string value 2e2f032
+  - [android] destroyInstance bugfix 6628460
+  - [android] update fix global event Memory leak fc6d403
+  - [android] add callAddElement debug log 95e3680
+  - [android] bug fix classcast exception e399306
+  - [android] fix circle ci 51d3294
+  - [android] fix slider start auto scroll after activity resume. 89bae89
+  - [android] fix log util implementation 10d508f
+  - [android] fix x86 so file size verification 21d5135
+  - [android] fix build b1fc231
+  - [android] fix log utility 530fe51
+  - [android] NPE bugfix 6d4385f
+  - [android] add cuurentRef to avoid reused bug d836725
+  - [android] bug fix update the ref when cell reused 1f7bf86
+  - [android] bug fix update the ref when cell reused cef277f
+  - [android] fix usertrack modify 8732d70
+  - [android] fix code format 936ebd5
+  - [android] bug fix- Loading layoutY ba0d34e
+  - [android] bug fix - Loading layoutY a8f3c95
+  - [android] bug fix - loading margin 7a3f1e0
+  - [android] fix Deprecated 6aa7da9
+  - [android] fix #1102 (#1103) 5aea5c6
+  - [android] fix merge problem 7923b1e
+  - [android] fix typo 1de6800
+  - [android] fix scroller&list appearance event da1ee4d
+  - [android] fix invaild add dom operation 14b5943
+  - [android] fix build 0d43794
+  - [android] fix build 0520743
+  - [android] fix build 9d596c1
+  - [android] fix list appear&disappear 425c3e1
+  - [android] fix list appear&disappear event 40b52f3
+  - [android] update so for fixing instanceId error 03d0973
+  - [android] fix v8 security problem 06dbc38
+  - [android] bugFix:  List component scrollTo inaccurate 45f0476
+  - [android] fixed #1058 f25238c
+  - [android] fixed #1058 33b4aaf
+  - [android] fix v8 security problem e0b881f
+  - [android] bugFix:  List component scrollTo inaccurate 052aeac
+  - [android] fix comment fd3e0ef
+  - [android] fix indicator default style 57b71fb
+  - [android] fix unit test ee74b5c
+  - [android] fix code style 449bad2
+  - [android] fix list  orientation usage, move component's
+  - [android] fix change/focus confliction b672101
+  - [android] fix change/focus/blur  event confliction c3689e8
+  - [android] fix add dom error a993a84
+  - [android] update the mWXBridge to null when debugmode disable 35005ea
+  - [android] fix invaild add dom operation 7b1ad97
+  - [android] fix moveElement on the same parent dom case 2a94ba2
+  - [android] fix typo 42a2099
+  - [android] fix NPE c2da99e
+  - [ios] fix style line-height conflict with text-align e762637
+  - [ios] fix slider example href 8196792
+  - [ios] fix keyboard cover input sometime 0ad56dc
+  - [ios] fix #1188, support for converting string to NSUInteger. c3f6ea2
+  - [ios] fix issue that fixed-position component's view be reallocated while it is in a cell. d8881c3
+  - [ios] indexDict must be accessed on component thread, fix componentForRef crash 8cc3503
+  - [ios] fix issue that transform-origin not works in rotation transform 5dcab9e
+  - [ios] fix warning f913dab
+  - [ios] fix css node children count invalid while change from or change to fixed position. 81a1dc4
+  - [ios] fix compile error 98a8078
+  - [ios] fix css node children count invalid while change from or change to fixed position. 0b3a2e3
+  - [ios] fix podspec syntax error d0386e6
+  - [ios] ios7 bugfix api 6e7cf07
+  - [ios] try to fix NSMapTable crash in iOS8 a03a4bc
+  - [ios] fix slider-neighbor bc03620
+  - [ios] fix remove Observer crash 46fcbc5
+  - [ios] fix issue that rotate transform not work in styles. 8601304
+  - [ios] fix layer setBackgroundColor crash 5778422
+  - [ios] fix sliderNeighbor 39cb4ea
+  - [ios] fix warning ea8c8f8
+  - [ios] fix warning 4d2528e
+  - [ios] fix warning issue d77fd5d
+  - [ios] fix issue transform does not work while initialized. c36f1bf
+  - [ios] canvas component property error fix 448d4f4
+  - [ios] try to fix textStorage thread-safe issue 0d62716
+  - [ios] fix A component onclick event 01f9706
+  - [ios] fix input disabled attribute bug 533df4f
+  - [ios] fix input disabled attribute bug fd2c526
+  - [ios] fix iconfont src update bug f99906b
+  - [ios] customize debug switch 86346ea
+  - [ios] fix typo ae99b92
+  - [ios] change context name for remove JSContext debugging 75c1e42
+  - [ios] fix input max length bug fe9a013
+  - [ios]add LogLevel control and RemoteDebug control 164abf8
+  - [ios] fix memory leak 00009c0
+  - [ios] fix a bug that re-deleting procedure 717bf3f
+  - [ios] fix storage module in swift f13b72f
+  - [ios] fix highlight problem 93eb282
+  - [html5] fix conflicts with jsfm 0.16 ce63e22
+  - [html5] fix lint 9612daa
+  - [html5] fix class name b224685
+  - [html5] fix img lazyload 3984111
+  - [html5] fix registration of tabheader d38a4c0
+  - [html5] fix bug of null rules of stylesheet in spinner c058f95
+  - [html5] fix top 41c603a
+  - [html5] fix toast a3a4730
+  - [html5] fix lazyload typo 493bee7
+  - [html5] fix lint 43b24da
+  - [html5] fix loadmoreoffset 3c7e262
+  - [html5] fix sticky 9bdf079
+  - [html5] fix lazyload 38ee957
+  - [html5] fix lint 0e94380
+  - [html5] fix flexible a06eb80
+  - [html5] fix jsonp callback error 6db0850
+  - [html5] fix typo 5f61a06
+  - [html5] fix lint 363decd
+  - [html5] fix bug of scroll to c007c86
+    orientation field to scroller 3febd83
+  - [html5] fix dist bug 9d102a5
+  - [html5] fix missing viewport meta. 1cf98e5
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.8.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.8.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.7.0
+------
+- New Features
+  - [Timer Module](https://github.com/alibaba/weex/blob/doc/doc/modules/timer.md)
+  - [Storage Module](https://github.com/alibaba/weex/blob/dev/doc/modules/storage.md)
+  - Unify the `image` component's error page when src is invalid
+  - Unify the `border`,`padding`,`background-color` style
+  - Horizontal-scroller support  `scrollto`  api
+  - Fix the issue that component with  `position:fixed` style can not be closed
+  - Module callback support `object` params
+  - Slider suppport  `setIndex` api
+- Performance
+  - Use `callNative` signal to stop JSFM render after instance been destroyed
+  - Lazily initialize JSFM When device is in low-memory status, improve SDK stability
+- [Tools](http://alibaba.github.io/weex/doc/tools/devtools.html)
+  - Support debugging  weex(.we) and  react(.jsx) source 
+  - Support apps debugging on the same device 
+  - Support "watch" feature
+  - Solve the dependency on Debugger, user could start "Inspector" first or "Debugger" at will
+  - Add "refresh" function in sdk, user could inspect new file by scanning its QR code in playground;
+  - Android/ios inspect module split from weex sdk,  and will deliver in separate repo in future; support inspect in windows system
+- Bugfix
+  - [android] fix 'fixed' position not work when append tree 6ccfa4f
+  - [android] fix slider set index frzee 6524849
+  - [android] bug fix - setLayout LayoutParams b70f6e2
+  - [android] fix get header:compitable with lower case header key 5ebec75
+  - [android] fix storage module: keep open when module is live c311f15
+  - [android] fix build 0389302
+  - [android] fix jsonp response process 28588c6
+  - [android] fix ViewHolder NPE f9005ab
+  - [android] bug fix ViewHolder NPE 86dd101
+  - [android] fix build b14dd26
+  - [android] fix cell memory leak c03fdc1
+  - [html5] fix e2e test ci 77f14af
+  - [ios] fix type of callback params 2aa8f47
+  - [android] fix sdk init time measurement 3d7cd02
+  - [android] fix sdk init time measurement f4cbfd0
+  - [android] fix sdk init time measurement 8cffa5a
+  - [ios] fix stream fetch response type 9a7c296
+  - [android] forbid except cell、header、fixed、refresh and loading 114860f
+  - [android] fix comment cf53fd3
+  - [android] fix build 82a03fd
+  - [android] WXUtils bugfix 3655d9d
+  - [android] bug fix - setProperty class cast d567f89
+  - [android] fix argument format crash 1baac57
+  - [android] function name fix : hasAppearAndDisappearEvent 1f8b501
+  - [android] fix NPE crash in textarea nad modalModule c3a08ff
+  - [ios] fix bug when url has chinese character. b7e2c2f
+  - [android] update so fix not delRef argument b0db514
+  - [jsfm] fixed repeat bug when update values with new object references 371e58c
+  - [android] fix slider initialization crash. 4c52d33
+  - [android] add a debugger switch, decouple the dept between inspector and debugger dfa71c4
+  - [android] fix bug sticky not show dc3ca4d
+  - [android] fix component register type missed 92a92dc
+  - [android] sticky null child bug fix 541b68b
+  - [android] fix list scroller default height fc0aa58
+  - [android] fix indicator default style 610624c
+  - [android] fix embed page appear event 71a5360
+  - [android] update debug manifest 0541126
+  - [android] update JSF to 0.14.6 fix bind data error 4f7e3c8
+  - [android] fix bug mChild NPE a313b81
+  - [android] fix sticky offsetX 1bae906
+  - [jsfm] fixed updateMark error in compileType 9533431
+  - [jsfm] fixed updateMark error in compileType 5ea0132
+  - [android] Sticky fast fling bug fix 7092c6a
+  - [android] fix view appear event 4bf67e4
+  - [android] fix list scroll to 6355fc6
+  - [ios] fix default debug value 79daf2f
+  - [android] fix list scroll to ad0201b
+  - [ios] fix stat 2d3ab94
+  - [android] refresh the instance when reload called by the debug server 99392db
+  - [android] add a stop method to IWXDebugProxy b06d352
+  - [android] sticky bug fix f9d3265
+  - [android] fix list scrollTo a198b2e
+  - [android] fix scroller getView and getInnerView 4fa0453
+  - [android] refresh the instance when reload called by the debug server fd2be06
+  - [android] add a stop method to IWXDebugProxy 5789700
+  - [android] refresh the instance when reload called by the debug server 5ddf782
+  - [android] add a stop method to IWXDebugProxy 79cd97b
+  - [ios] fix modal bug about message is number d0cdaf9
+  - [html5] fix fire event 978c454
+  - [android] bug fix event lost f9c4357
+  - [android] add debug log cae86fa
+  - [html5] fix typo b84a1b3
+  - [html5] fix lint 8e905dc
+  - [android] fix bug - setLayout 0b5082f
+  - [jsfm] fixed native param format of setTimeout in app.differ a9f101e
+  - [ios] cancel AppDelegate.m debug annotation 03abcf8
+  - [android] fix bug - scroller height error 7458441
+  - [ios] support weex-devtool and weex --debugger 714c924
+  - [ios] resume original logger debug feature a144699
+  - [ios] modify the debug switch, update WXDebugTool.h/m file 1ce1277
+  - [android] fix input restore init value when batch 3a54da2
+  - [android] fix build 8450473
+  - [android] fix switch fireevent with domchange b6c2d31
+  - [android]  fix input change event 58563b5
+  - [jsfm] fixed repeat binding da9f40d
+  - [html5] fix typo 09bcdb3
+  - [ios] bug fix: slider is embed in list cell d56c7ec
+  - [ios] fix typo for wrong quote in Podfile ab8a83b
+  - [html5] fix loadmore offset of list 69ed65a
+  - [android] fix model callback data from string to json 3aed566
+  - [android] use diff vars flag the remote debug 5e976fc
+  - [html5] fix typo b8eec69
+  - [android] fix bug - refresh not compatible MI2 c814cd9
+  - [android] fix problem that session is null and init framework failed b985d59
+  - [ios] fix element cssstyle selected bug 41450a9
+  - [ios] fix crash from cssstyle e079e5c
+  - [android] update the debug init sequence to make sure the handshake well 28741da
+  - [android] fix example file name fc7862c
+  - [android] update debug switch f9369bb
+  - [android] reuse image adapter for avoid Fresco bug 62dc67c
+  - [android] add debug proxy, adapt to the weex-debugger d93f9e5
+  - [android] fix NPE in stream f5f8a4d
+  - [android] fix getScreenWidth npe e264f2a
+  - [android] fix register order 5c8a264
+  - [ios] Stupid scoll view, always reset content offset to zero after insert cells, fixed it by hooking 981dcd6
+  - [ios] fix data type d815e2a
+  - [ios] update debug tool 3d82054
+  - [ios] fix input component width calculation ba9a3b7
+  - [ios] fix notes about WXComponent+ViewManagement d31e8b6
+  - [android] fix list component addsubview error 69c3286
+  - [ios] fix inverted-logic 773bea7
+  - [android] fix crash when list append tree 686e450
+  - [ios] fix playground scan qr code bug 28f7de2
+  - [android] fix bug - Scroll getView 647a927
+  - [android] fix bug - delete </merge> 77680f1
+  - [android] fix bug - nested scroll ac50cd2
+  - [android] fix onTouchEvent bug 911e569
+  - [ios] fix thread safe method indexOfObject in array 1623165
+  - [ios] remove the timing of network debug 5b00fe5
+  - [ios] fix warning e1d496c
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.7.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.7.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.6.1
+------
+- New Features
+  1. [iOS has been open sourced](https://github.com/alibaba/weex/tree/dev/ios)
+  2. [Lifecycle Page Event](https://github.com/alibaba/weex/blob/v0.6.1/doc/references/common-event.md#page-event): viewappear, viewdisappear
+  3. [fetch](https://github.com/alibaba/weex/blob/v0.6.1/doc/modules/stream.md#fetchoptions-callbackprogresscallback)
+  4. [line-height](https://github.com/alibaba/weex/blob/v0.6.1/doc/components/text.md#styles)
+  5. [list component](https://github.com/alibaba/weex/blob/v0.6.1/doc/components/list.md) 
+     - support sticky header 
+     - support scrollToElement API
+     - support nested horizontal scroller
+     - support cell children nodes event: appear/disappear
+  6. [Gesture](https://github.com/alibaba/weex/blob/v0.6.1/doc/references/gesture.md): panstart/panmove/panend, swipe, longpress
+  7. Improve Android text compatibility
+- Performance
+  1. iOS, iPhone 5c, rendering frame rate ascends from 45FPS to 52FPS
+  2. Android, Redmi Note 1, loading time of the first screen  descends from 602ms to 480ms
+  3. Improve Android animation performance
+- Tools
+  1. [weex-toolkit](https://www.npmjs.com/package/weex-toolkit) supports require and generator
+  2. Playground supports runtime performance viewer
+  3. [Weex DevTools](https://github.com/alibaba/weex/blob/v0.6.1/doc/tools/devtools.md)
+     
+     <img src="https://img.alicdn.com/tps/TB1O.nwKFXXXXX8XpXXXXXXXXXX-1436-811.png" width="600">
+
+Bugfix
+- [android] fix view appear event 4bf67e4
+- [android] fix list scroll to 6355fc6
+- [ios] fix default debug value 79daf2f
+- [android] fix list scroll to ad0201b
+- [android] fix build 5d1286c
+- [android] bug fix 6a1788e
+- [ios] fix stat 2d3ab94
+- [android] bug fix 60073af
+- [android] refresh the instance when reload called by the debug server 99392db
+- [android] add a stop method to IWXDebugProxy b06d352
+- [android] sticky bug fix f9d3265
+- [android] fix build 62ee68a
+- [android] fix list scrollTo a198b2e
+- [android] fix scroller getView and getInnerView 4fa0453
+- [android] refresh the instance when reload called by the debug server fd2be06
+- [android] add a stop method to IWXDebugProxy 5789700
+- [android] bug fix 7a83ddc
+- [android] refresh the instance when reload called by the debug server 5ddf782
+- [android] add a stop method to IWXDebugProxy 79cd97b
+- [html5] fix fire event 978c454
+- [android] bug fix event lost f9c4357
+- [android] add debug log cae86fa
+- [html5] fix typo b84a1b3
+- [html5] fix lint 8e905dc
+- [android] fix bug - setLayout 0b5082f
+- [jsfm] fixed native param format of setTimeout in app.differ a9f101e
+- [ios] cancel AppDelegate.m debug annotation 03abcf8
+- [android] fix bug - scroller height error 7458441
+- [ios] support weex-devtool and weex --debugger 714c924
+- [ios] resume original logger debug feature a144699
+- [ios] modify the debug switch, update WXDebugTool.h/m file 1ce1277
+- [android] fix input restore init value when batch 3a54da2
+- [android] fix build 8450473
+- [android] fix switch fireevent with domchange b6c2d31
+- [android]  fix input change event 58563b5
+- [jsfm] fixed repeat binding da9f40d
+- [html5] fix typo 09bcdb3
+- [ios] bug fix: slider is embed in list cell d56c7ec
+- [ios] fix typo for wrong quote in Podfile ab8a83b
+- [html5] fix loadmore offset of list 69ed65a
+- [android] fix build 0f39533
+- [android] fix model callback data from string to json 3aed566
+- [android] use diff vars flag the remote debug 5e976fc
+- [html5] fix typo b8eec69
+- [html5] fix ignore de5837a
+- [android] fix bug - refresh not compatible MI2 c814cd9
+- [android] fix problem that session is null and init framework failed b985d59
+- [ios] fix element cssstyle selected bug 41450a9
+- [ios] fix crash from cssstyle e079e5c
+- [android] update the debug init sequence to make sure the handshake well 28741da
+- [android] fix example file name fc7862c
+- [ios] fix #567 3be6561
+- [android] update debug switch f9369bb
+- [android] reuse image adapter for avoid Fresco bug 62dc67c
+- [android] add debug proxy, adapt to the weex-debugger d93f9e5
+- [android] fix ut bug 85c5cae
+- [android] fix NPE in stream f5f8a4d
+- [android] fix getScreenWidth npe e264f2a
+- [android] fix register order 5c8a264
+- [ios] Stupid scoll view, always reset content offset to zero after insert cells, fixed it by hooking 981dcd6
+- [ios] fix data type d815e2a
+- [ios] update debug tool 3d82054
+- [ios] fix input component width calculation ba9a3b7
+- [ios] fix notes about WXComponent+ViewManagement d31e8b6
+- [android] fix list component addsubview error 69c3286
+- [ios] fix inverted-logic 773bea7
+- [android] fix crash when list append tree 686e450
+- [ios] fix playground scan qr code bug 28f7de2
+- [android] fix bug - Scroll getView 647a927
+- [android] fix bug - delete </merge> 77680f1
+- [android] fix bug - nested scroll ac50cd2
+- [android] fix onTouchEvent bug 911e569
+- [ios]fix thread safe method indexOfObject in array 1623165
+- [ios] remove the timing of network debug 5b00fe5
+- [ios] fix warning e1d496c
+- [ios] remove unnecessary removeFromSuperView from unload method and fix async unload view issue in list. b6c3a62
+- [android] fix unit test 4dda4ac
+- [android] update power info and debug protocol, mark stable 3323776
+- [ios] fix indicator style  abnormal when update 7dcb54b
+- [ios] fix list delete issue 579b720
+- [ios] fix indicator item size abnormal e3cd91b
+- [android] bufix NPE 904146e
+- [android] fix  multithreading exception b1c2af1
+- [android] update debug info 7a82747
+- [android] fit bug - indicator error 673b7b6
+- [android] fix bug loading-indicator 981728a
+- [android] fix unit test aafec20
+- [android] bugfix  getInstance singleton 397dc39
+- [android] fix WXSwipeRefreshLayout 745705d
+- [ios] fix scan qrcode after back from scan result failed 0b308aa
+- [android] fix unit test 02d8489
+- [android] fix create body NPE 89690f7
+- [android] fix getView()==null crash b0ca974
+- [android] bugfix NPE 93ef1e1
+- [android] bug fix NPE when instance destroy e7aad12
+- [android] NPE bugfix 9f15552
+- [android] NPE bug fix when recycleImage 4edecef
+- [android] bugfix layout can not be reset for list b19c0a1
+- [android] add DebugAdapter f10cf9c
+- [android] fix text layout unexpect quit when text is zero-length content 9320623
+- [android] fix spell error 23c5440
+- [android] update debug 567e9e0
+- [android] fix list remove cell crash bug 84844f9
+- [android] fix unit test be636fb
+- [android] update debug tool 8d9cad9
+- [android] bug fix remove fixed node f867bd1
+- [android] update debug tool 5b75507
+- [android] fix unit test 40b10de
+- [android] update debug.move some code from WXPrettyFish to WXDebugTool c70927b
+- [android] update debug 6047c43
+- [android] update debug add class ScalpelFrameLayout d956819
+- [android] fix status badge url 35a491b
+- [android] fix border style 329f128
+- [android] update weex_debug grade wrapper 793c67b
+- [android] fix fetch response data 1503431
+- [android] fix progress callback 1f72495
+- [android] bugfix init sdk b6946ad
+- [android] NPE fix fc9b595
+- [android] update how-to-debug.md playgroup-app.md c61d7b4
+- [android] update debug function 1bcfdd3
+- [android] fix v8 compile potential crash & closed v8  snapshot 6d159a6
+- [android] update debug d7c6d61
+- [android] fix v8 compile potential crash & closed v8  snapshot 67b01a1
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.6.1.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.6.1.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+## v0.5.0
+------
+
+### New Features
+1. [TabBar](https://github.com/alibaba/weex/blob/dev/doc/components/wxc-tabbar.md) is a specialized component corresponding to the radio-style selection.
+2. [NavPage](https://github.com/alibaba/weex/blob/dev/doc/components/wxc-navpage.md) contains a navbar at the top of the window and an embed content page.
+3. [Activity Showcase](https://github.com/alibaba/weex/blob/dev/examples/showcase/new-fashion/index.we) is built by composing TabBar and NavPage.
+4. [Web](https://github.com/alibaba/weex/blob/dev/doc/components/web.md) displays web content in the weex page.
+5. [A](https://github.com/alibaba/weex/blob/dev/doc/components/a.md)  defines a hyperlink to a page in the web.
+6. `Text` supports style [text-overflow](https://github.com/alibaba/weex/blob/dev/doc/references/text-style.md#properties).
+7. `Image` supports attribute [resize](https://github.com/alibaba/weex/blob/dev/doc/components/image.md#styles).
+8. `List` supports [events `appear`, `disappear`, `loadmore`](https://github.com/alibaba/weex/blob/dev/doc/components/list.md#events) and [refresh](https://github.com/alibaba/weex/blob/dev/doc/components/list.md#child-components).
+9. New Syntax
+   1. [Inline event](https://github.com/alibaba/weex/blob/dev/doc/syntax/events.md#inline-handler) supports a expression of calling event handler in template.
+   2. [Require Native Module](https://github.com/alibaba/weex/blob/dev/doc/modules#how-to-use) requires a native module by `require('@weex-module/moduleName')`.
+   3. [Computed Property](https://github.com/alibaba/weex/blob/dev/doc/syntax/data-binding.md#computed-properties) supports complicated logic in data bindings.
+   4. [New Repeat Syntax](https://github.com/alibaba/weex/blob/dev/doc/syntax/display-logic.md#a-extension-of-repeat-syntax) is easy to access the key or value of repeated object.
+
+### Bugfixes
+- [android] fix crash https://github.com/alibaba/weex/commit/4fa27716d82d90c5e16d023c6e55cf65eeb9136b
+- [android] fix #20, android slider indicator edge is not smooth https://github.com/alibaba/weex/commit/5b8f3a7e6d4d547d892223d8abc02ac2084b5a6e
+- [android] fix List https://github.com/alibaba/weex/commit/4acc90a1c8c0a9181d91e2ef984266c39d255cac
+- [android] fix NavBar https://github.com/alibaba/weex/commit/8b4ea4f0c18d4e732749c025ea496c59d19004a5
+- [android] fix position=fixed did not setLayout https://github.com/alibaba/weex/commit/3b9128c2a421243d7c28f64abaebcbffd6a2ec73
+- [jsfm] fix change data when ready https://github.com/alibaba/weex/commit/0a1aa5db40713abb2923a2effb06c28349ac0213
+- [jsfm] fix when the key of trackby is zero https://github.com/alibaba/weex/commit/efa50707efd24cfb775c7e0f467279bbaade1fd6
+- [jsfm] fix append tree https://github.com/alibaba/weex/commit/d3871b308e642fd71c2b7ba630aed0f573079daa
+- [jsfm] fix transformer version https://github.com/alibaba/weex/commit/9f21bccb07869883edc261516272aa5e41933c78
+- [jsfm] fix inline event test https://github.com/alibaba/weex/commit/1ce3212a83c58187a2be0df43eecafababce8ecb
+- [jsfm] fixed transformer 0.3 https://github.com/alibaba/weex/commit/66b647afa08671812a7c5e11b440c23ae18750d9
+- [jsfm] fixed jscs error https://github.com/alibaba/weex/commit/a5067d52e2a1708852ab704a9004f5c35f3451b6
+- [jsfm] hotfixed transformer version bug and fixed a small sample code bug https://github.com/alibaba/weex/commit/48862dc40375bbc8caa30384d45b031440694f3b
+- [jsfm] fix callback https://github.com/alibaba/weex/commit/2f85737c51ebd037a72db1c18daf4a9690c45837
+- [jsfm] fix #1 #12 https://github.com/alibaba/weex/commit/56e6a79c50f1b2fd3c0ecebec000e9a693cb4b92
+- [jsfm] fix undefined for element's depth https://github.com/alibaba/weex/commit/2b7eb9ea82e6552b6e57fddb332dfbbfa3401473
+- [jsfm] fix calling functional data-binding multiply https://github.com/alibaba/weex/commit/dcd9b660912bea69b17622e13fddb80ecb42bc35
+
+### Downloads
+- [Source code (zip)](https://github.com/alibaba/weex/archive/v0.5.0.zip)
+- [Source code (tar.gz)](https://github.com/alibaba/weex/archive/v0.5.0.tar.gz)
+- [Cocoapods WeexSDK](https://cocoapods.org/pods/WeexSDK)
+- [Bintray weex_sdk](https://bintray.com/alibabaweex/maven/weex_sdk)
+
+------
\ No newline at end of file
diff --git a/doc/source/v-0.10/advanced/extend-to-html5.md b/doc/source/v-0.10/advanced/extend-to-html5.md
index 4386dd6..6201fc7 100644
--- a/doc/source/v-0.10/advanced/extend-to-html5.md
+++ b/doc/source/v-0.10/advanced/extend-to-html5.md
@@ -78,7 +78,7 @@
 * `appendChild` to append a child in the children list.
 * `removeChild` to remove a child in the children list.
 
-**Advanced**: Need more code demonstrations about overriding the component's methods ? Just take a look at the [weex repo's code](https://github.com/alibaba/weex/tree/dev/html5/browser/extend/components). Basically the most of the built-in components are defined this way.
+**Advanced**: Need more code demonstrations about overriding the component's methods ? Just take a look at the [weex repo's code](https://github.com/apache/incubator-weex/tree/dev/html5/). Basically the most of the built-in components are defined this way.
 
 Important! To register your component in the `init` method, use `Weex.registerComponent`. Here's the demo code:
 
diff --git a/doc/source/v-0.10/advanced/integrate-to-android.md b/doc/source/v-0.10/advanced/integrate-to-android.md
index 9671bcd..e2b2569 100644
--- a/doc/source/v-0.10/advanced/integrate-to-android.md
+++ b/doc/source/v-0.10/advanced/integrate-to-android.md
@@ -16,8 +16,8 @@
 
 Make sure you have the following installed:
 
-1. Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
-2. SDK build tools version 23.0.2 (buildToolsVersion in [`build.gradle`](https://github.com/alibaba/weex/blob/master/android/sdk/build.gradle))
+1. Android SDK version 23 (compileSdkVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
+2. SDK build tools version 23.0.2 (buildToolsVersion in [`build.gradle`](https://github.com/apache/incubator-weex/blob/master/android/sdk/build.gradle))
 3. Android Support Repository >= 17 (for Android Support Library)
 4. Android NDK (download & extraction instructions [here](http://developer.android.com/ndk/downloads/index.html))
 
@@ -201,4 +201,4 @@
 
 ## Reference Example   
 
-[`Weex Examples`](https://github.com/alibaba/weex/tree/master/examples)
+[`Weex Examples`](https://github.com/apache/incubator-weex/tree/master/examples)
diff --git a/doc/source/v-0.10/guide/how-to/preview-in-playground-app.md b/doc/source/v-0.10/guide/how-to/preview-in-playground-app.md
index b2cbb90..5800737 100644
--- a/doc/source/v-0.10/guide/how-to/preview-in-playground-app.md
+++ b/doc/source/v-0.10/guide/how-to/preview-in-playground-app.md
@@ -8,7 +8,7 @@
 # How to preview weex code in sample-app ?
    
 ### Weex Sample Step By Step
-1. Clone Weex from github [`https://github.com/alibaba/weex/`](https://github.com/alibaba/weex/)
+1. Clone Weex from github [`https://github.com/apache/incubator-weex/`](https://github.com/apache/incubator-weex/)
 2. Use Android Studio open Android Sample 。
 3. run Sample project.
 4. into Sample homePage,you will see this picture  
diff --git a/doc/source/v-0.10/references/components/list.md b/doc/source/v-0.10/references/components/list.md
index 3c51418..3b4745e 100644
--- a/doc/source/v-0.10/references/components/list.md
+++ b/doc/source/v-0.10/references/components/list.md
@@ -18,7 +18,7 @@
 ```html
 <template>
   <list>
-    <cell onappear="onappear" ondisappear="ondisappear" class="row" repeat="{{staffs}}" index="{{$index}}">
+    <cell onappear="onappear($event, $index)" ondisappear="ondisappear($event, $index)" class="row" repeat="{{staffs}}" index="{{$index}}">
       <div class="item">
         <text>{{name}}</text>
       </div>
@@ -45,13 +45,12 @@
       staffs:[{name:'inns'},{name:'connon'},{name:'baos'},{name:'anna'},{name:'dolley'},{name:'lucy'},{name:'john'}, {name:'lily'},{name:'locke'},{name:'jack'},{name:'danny'},{name:'rose'},{name:'harris'},{name:'lotus'},{name:'louis'}]
     },
     methods:{
-      onappear: function (e) {
-        var index = e.target.attr.index
-        nativeLog('+++++', index);
+      onappear: function (e, index) {
+        console.log('+++++', index)
         console.log(this.staffs[index].name + ' is appearing...');
       },
-      ondisappear:function (e) {
-        nativeLog('+++++', e.target.attr.index);
+      ondisappear:function (e, index) {
+        console.log('+++++', index)
       }
     }
   }
diff --git a/doc/source/v-0.10/references/components/refresh-loading.md b/doc/source/v-0.10/references/components/refresh-loading.md
index 5152964..8b1d610 100644
--- a/doc/source/v-0.10/references/components/refresh-loading.md
+++ b/doc/source/v-0.10/references/components/refresh-loading.md
@@ -17,7 +17,7 @@
 **example**
 
 ```html
-<template>
+`<template>
   <list>
     <header>
       <div class="center">
@@ -27,7 +27,7 @@
     <loading onloading="onloading" display="{{loadingDisplay}}" style="width:750;flex-direction: row;justify-content: center;">
       <loading-indicator style="height:160;width:160;color:#3192e1"></loading-indicator>
     </loading>
-    <cell onappear="onappear" ondisappear="ondisappear" class="row" repeat="{{staffs}}" index="{{$index}}">
+    <cell onappear="onappear($event, $index)" ondisappear="ondisappear($event, $index)" class="row" repeat="{{staffs}}" index="{{$index}}">
         <div class="item">
           <text>{{name}}</text>
         </div>
@@ -69,13 +69,12 @@
       this.staffs=[{name:'inns'},{name:'connon'},{name:'baos'},{name:'anna'},{name:'dolley'},{name:'lucy'},{name:'john'}, {name:'lily'},{name:'locke'},{name:'jack'},{name:'danny'},{name:'rose'},{name:'harris'},{name:'lotus'},{name:'louis'}];
     },
     methods:{
-      onappear: function (e) {
-        var index = e.target.attr.index
-        // nativeLog('+++++', index);
+      onappear: function (e, index) {
+        // console.log('+++++', index);
         // console.log(this.staffs[index].name + ' is appearing...');
       },
-      ondisappear:function (e) {
-        // nativeLog('+++++', e.target.attr.index);
+      ondisappear:function (e, index) {
+        // console.log('+++++', index);
       },
       onloading:function(e){
         console.log('onloading...');
diff --git a/doc/source/v-0.10/references/modules/globalevent.md b/doc/source/v-0.10/references/modules/globalevent.md
index 58e275b..0db8c48 100644
--- a/doc/source/v-0.10/references/modules/globalevent.md
+++ b/doc/source/v-0.10/references/modules/globalevent.md
@@ -12,7 +12,7 @@
 
 `globalEvent` are used to listen for persistent events, such as changes in positioning information, gyroscopes, and so on. A global event is a secondary API that requires additional APIs to work with.
 
-You can register events via `addEventListener`, which can be removed by `removingEventListener` when you do not need to listen for `globalEvent`.
+You can register events via `addEventListener`, which can be removed by `removeEventListener` when you do not need to listen for `globalEvent`.
 
 *AUCTION* 
 - Only instance level is not application level . 
diff --git a/doc/themes/weex/languages/cn.yml b/doc/themes/weex/languages/cn.yml
index 67f72e6..23b209a 100644
--- a/doc/themes/weex/languages/cn.yml
+++ b/doc/themes/weex/languages/cn.yml
@@ -70,14 +70,15 @@
   references: 手册
   doc: 文档
   faq: FAQ
+  note: 参考
+  releasenote: 版本说明
   index: 首页
   blog: 博客
   showcase: 示例
   download: 下载
-  resources: 下载
+  resources: 资源
   tools: 工具和服务
   advanced: 高阶知识
-  baichuan: 阿里百川
   github: GitHub
   legacy: 旧语法文档
 playground:
diff --git a/doc/themes/weex/languages/en.yml b/doc/themes/weex/languages/en.yml
index 47ca0ec..6eea9fd 100644
--- a/doc/themes/weex/languages/en.yml
+++ b/doc/themes/weex/languages/en.yml
@@ -1,31 +1,31 @@
 index:
-  page_title: A framework for building Mobile cross-platform UI
+  page_title: A framework for building Mobile cross-platform UIs
   get_started: Get Started
   edge:
     title: Competitive Edge
-    edge1: 
+    edge1:
       title: Lightweight
       content: low footprint,simple syntax,and easy to use
-    edge2: 
+    edge2:
       title: Extendable
-      content: abundant build-in components,extendable apis,various events
-    edge3: 
+      content: abundant built-in components,extendable apis,various events
+    edge3:
       title: High Performance
       content: load fast,render fast,better Experience
-  feature: 
-    title: Help you build real Native App
-    content: Different from "web app" , "HTML5 app" and "hybrid app", you can use Weex to build a real mobile app. More intimate is that you write the code is relatively simple, just use HTML, CSS, Javascript can build native applications.But in fact, the bottom of the application is Objective-C or Java. At the same time, Weex will provide a lot of native components or modules for developers to use.
+  feature:
+    title: Help you build a real Native App
+    content: Different from a "web app", "HTML5 app", or "hybrid app", you can use Weex to build a real mobile app. The code that you write is relatively simple, because you can build native applications just using HTML, CSS, Javascript. But underneath, the core of the application is Objective-C or Java. At the same time, Weex will provide a lot of native components or modules for developers to use.
   cross_platform:
     title: Write Once Run Everywhere
-    content: Weex provides the ability to cross platform, such as the web, Android and IOS can use the same API development function. At the same time, we provide a rich extension of the interface. In this way, it will be very convenient when you need to extend native components or modules.
+    content: Weex provides the ability to publish cross platform, so web, Android, and IOS apps can use the same API development functions. At the same time, we provide a rich extension of the native interfaces. In this way, it will be very convenient when you need to extend native components or modules.
   vue:
     title: Supporting Vue syntax
     content: Weex follows the web standard, while supporting the "vue.js" syntax. So, you can use the "vue.js" syntax to develop applications.
   schematic:
     title: How it works
-    content: Weex is a extendable cross-platform solution for dynamic programming and publishing projects. In the source code you can write pages or components with <template>, <style> and <script> tags, and then transform them into bundles for deploying. In server-side we can use these JS bundles for client request. When client get a bundle from server, it will be processed by client-side JavaScript engine and manages the native view rendering, the native API invoking and user interactions.
-  users: 
-    title: Who use it
+    content: Weex is a extendable cross-platform solution for dynamic programming and publishing projects. In the source code you can write pages or components with <template>, <style> and <script> tags, and then transform them into bundles for deploying. On the server-side we can use these JS bundles for client requests. When clients get a bundle from the server, it will be processed by the client-side JavaScript engine that manages the native view rendering, the native API invoking, and user interactions.
+  users:
+    title: Who uses it
     tmall:
       title: Tmall
       content: Tmall is a business-to-consumer (B2C) platform and is the most visited B2C online retail website in China.
@@ -37,48 +37,49 @@
       content: Taobao is China's largest consumer-to-consumer online shopping platform.
     dingtalk:
       title: DingTalk
-      content: DingTalk, an App by Alibaba. Free communication and collaboration platform used by millions of enterprises or orgnization.
+      content: DingTalk, an App by Alibaba. Free communication and collaboration platform used by millions of enterprises or organizations.
     alibaba:
       title: '1688'
       content: Launched in 1999, 1688.com is the leading platform for global wholesale trade. We serve millions of buyers and suppliers around the world.
     cainiao:
       title: Cainiao
-      content: Cainiao is committed to provide you the best tracking service for all kinds of your cross-border packages.
+      content: Cainiao is committed to providing you the best tracking service for all kinds of your cross-border packages.
     xiami:
       title: Xiami
-      content: Xiami is a music and audio platform. That is operated by Alibaba Group.
+      content: Xiami is a music and audio platform that is operated by Alibaba Group.
     youku:
       title: Youku
       content: Youku is one of China's top online video and streaming service platforms.
 
   feedback:
-    title: People says
+    title: People say
     user1:
       name: Tianyu Chen
       title: Zhong An Insurance, R&D Director
       content: "Weex is not only flexible and powerful, but also allows front-end developers to maximize the reuse of existing technology to help us design a new cross-platform architecture, and as soon as possible into the implementation phase."
-    user2: 
+    user2:
       name: Jianfeng Lin
       title: Eleme, FE Leader
       content: "Weex provides Web development efficiency and Native performance, comparable to our iterative speed requirements of the team is relatively high, is currently the best solution."
-    user3: 
+    user3:
       name: Taicheng Huang
       title: Tmall, Technical Expert
       content: "Weex as a lightweight rendering engine also provides a very convenient plug-in mechanism, so that each side can put their ability to play out, give full play to the cat's business, and good support for Global Shopping Festival."
 
-menu: 
+menu:
   guide: Guide
   references: References
   doc: Docs
   faq: FAQ
+  note: Note
+  releasenote: ReleaseNote
   index: Index
   blog: Blog
   showcase: Showcase
   download: Download
-  resources: Download
-  tools: Service & Tools
+  resources: Resources
+  tools: Services & Tools
   advanced: Advanced
-  baichuan: AliBaichuan
   github: GitHub
   legacy: Old Syntax Doc
 playground:
diff --git a/doc/themes/weex/layout/_partial/after-footer.ejs b/doc/themes/weex/layout/_partial/after-footer.ejs
index 186f20b..babfb3c 100644
--- a/doc/themes/weex/layout/_partial/after-footer.ejs
+++ b/doc/themes/weex/layout/_partial/after-footer.ejs
@@ -1,3 +1,3 @@
 <div style="display: none;">
-  <script src="//s95.cnzz.com/z_stat.php?id=1261102667&amp;web_id=1261102667" language="JavaScript"></script>
+  <script src="//s95.cnzz.com/z_stat.php?id=1261496509&web_id=1261496509" language="JavaScript"></script>
 </div>
diff --git a/doc/themes/weex/layout/_partial/footer.ejs b/doc/themes/weex/layout/_partial/footer.ejs
index 80fdc14..289cfb8 100644
--- a/doc/themes/weex/layout/_partial/footer.ejs
+++ b/doc/themes/weex/layout/_partial/footer.ejs
@@ -1,8 +1,5 @@
 <footer id="footer">
   <div class="row clearfix">
-    <div class="ali-logo">
-      <img src="//gw.alicdn.com/tps/TB1Ef93PXXXXXaXXpXXXXXXXXXX-252-126.png" alt="Alibaba">
-    </div>
     <div class="dropdown select-lang">
       <a href="javascript:;" class="dropdown-toggle">
         Language
@@ -18,11 +15,16 @@
       </ul>
     </div>
   </div>
+  <div class="disclaimer">
+    <div><img src="//gw.alicdn.com/tfs/TB1pTBZQFXXXXX9XXXXXXXXXXXX-794-280.png" width="200px" alt="Apache Incubator"></div>
+    <div><span class="title">Disclaimer:</span> Apache Weex is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, and decision making process have stabilized in a manner consistent with other successful ASF projects. While incubation status is not necessarily a reflection of the completeness or stability of the code, it does indicate that the project has yet to be fully endorsed by the ASF.</div>
+    <br/>
+  </div>
+  <hr>
   <div class="row">
-    <p><span>Released under </span><a href="">Apache License 2.0</a></p>
+    <p> <img src="//gw.alicdn.com/tfs/TB1bg8SQFXXXXcHXXXXXXXXXXXX-85-170.png" height="50px" alt="Apache"><span>Copyright(c) 2017 The Apache Software Foundation. Licensed under the </span> <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a></p>
   </div>
   <div class="row clearfix">
-    <div class="cell"><span>Copyright(c) 2016 </span><a href="https://www.alibaba.com">Alibaba</a></div>
-    <div class="cell"><span>Designed by </span><a href="">阿里云UED AX</a></div>
+    <div></div>
   </div>
 </footer>
\ No newline at end of file
diff --git a/doc/themes/weex/layout/_partial/header.ejs b/doc/themes/weex/layout/_partial/header.ejs
index 9b2cdb6..6922437 100644
--- a/doc/themes/weex/layout/_partial/header.ejs
+++ b/doc/themes/weex/layout/_partial/header.ejs
@@ -7,30 +7,37 @@
       <ul class="links">
         <li><a href="<%= url_for_lang('guide') %>"><%= _p('menu.guide') %></a></li>
         <li><a href="<%= url_for_lang('references') %>"><%= _p('menu.references') %></a></li>
-        <li><a href="<%= url_for_lang('faq.html') %>"><%= _p('menu.faq') %></a></li>
         <li class="dropdown">
-            <a href="javascript:;"><%= _p('menu.resources') %></a>
+          <a href="javascript:;"><%= _p('menu.note') %></a>
+          <ul class="dropdown-menu subnav">
+            <li>
+              <a href="<%= url_for_lang('faq.html') %>"><%= _p('menu.faq') %></a>
+            </li>
+            <li>
+              <a href="<%= url_for_lang('releasenote.html') %>"><%= _p('menu.releasenote') %></a>
+            </li>
+          </ul>
+        </li>
+        <li class="dropdown">
+            <a href="javascript:;"><%= _p('menu.tools') %></a>
             <ul class="dropdown-menu subnav">
               <li>
                 <a href="<%= url_for_lang('playground.html') %>">Playground</a>
               </li>
               <li>
-                <a href="https://www.npmjs.com/package/weex-devtool" target="_blank">Devtool</a>
+                <a href="<%= url_for_lang('guide/tools/toolkit.html') %>">Weex-toolkit</a>
               </li>
               <li>
-                <a href="https://www.npmjs.com/package/weexpack" target="_blank">Weexpack</a>
+                <a href="http://dotwe.org" target="_blank">Code Snippets</a>
               </li>
               <li>
-                <a href="http://dotwe.org" target="_blank">Snippets</a>
-              </li>
-              <li>
-                <a href="https://market.weex-project.io/" target="_blank">Market</a>
+                <a href="https://market.dotwe.org" target="_blank">Market</a>
               </li>
             </ul>
         </li>
       </ul>
       <ul class="info">
-        <li><a href="https://github.com/alibaba/weex/" target="_blank"><span class="btn-github iconfont icon-github"></span></a></li>
+        <li><a href="https://github.com/apache/incubator-weex/" target="_blank"><span class="btn-github iconfont icon-github"></span></a></li>
       </ul>
       <ul class="tools">
         <li>
@@ -62,4 +69,4 @@
     </a>
     <a class="btn-menu"><span class="iconfont icon-nav"></span></a>
   </div>
-</header>
\ No newline at end of file
+</header>
diff --git a/doc/themes/weex/layout/_partial/sidebar.ejs b/doc/themes/weex/layout/_partial/sidebar.ejs
index 2287671..3074b4a 100644
--- a/doc/themes/weex/layout/_partial/sidebar.ejs
+++ b/doc/themes/weex/layout/_partial/sidebar.ejs
@@ -24,28 +24,27 @@
           </a>
         </li>
         <li>
-            <p><%= _p('menu.resources') %></p>
+            <p><%= _p('menu.tools') %></p>
             <ul class="subnav">
               <li>
                 <a href="<%= url_for_lang('playground.html') %>">Playground</a>
               </li>
               <li>
-                <a href="https://www.npmjs.com/package/weex-devtool" target="_blank">Devtool</a>
+                <a href="<%= url_for_lang('guide/tools/devtools.html') %>">Devtools</a>
               </li>
               <li>
-                <a href="https://www.npmjs.com/package/weexpack" target="_blank">Weexpack</a>
+                <a href="<%= url_for_lang('guide/tools/weexpack.html') %>">Weexpack</a>
               </li>
               <li>
                 <a href="http://dotwe.org" target="_blank">Snippets</a>
               </li>
-              </li>
               <li>
-                <a href="https://market.weex-project.io/" target="_blank">Market</a>
+                <a href="https://market.dotwe.org" target="_blank">Market</a>
               </li>
             </ul>
         </li>
         <li>
-          <a href="https://github.com/alibaba/weex" target="_blank">
+          <a href="https://github.com/apache/incubator-weex/" target="_blank">
             <%= _p('menu.github') %>
           </a>
         </li>
@@ -53,4 +52,4 @@
     <% } %>
     <a class="btn-close-sidebar iconfont  icon-close"></a>
   </div>
-</div>
\ No newline at end of file
+</div>
diff --git a/doc/themes/weex/layout/_partial/slider.ejs b/doc/themes/weex/layout/_partial/slider.ejs
index 295df0d..f35c58f 100644
--- a/doc/themes/weex/layout/_partial/slider.ejs
+++ b/doc/themes/weex/layout/_partial/slider.ejs
@@ -6,7 +6,7 @@
           <h1 class="page-title"><%= _p('index.page_title') %></h1>
           <div class="btn-group">
             <a href="<%= url_for_lang('guide/index.html') %>" class="button get-started"><%= _p('index.get_started') %></a>
-            <a href="https://github.com/alibaba/weex/" class="button get-started" target="_blank"><%= _p('menu.github') %></a>
+            <a href="https://github.com/apache/incubator-weex/" class="button get-started" target="_blank"><%= _p('menu.github') %></a>
           </div>
         </div>
       </div>
diff --git a/doc/themes/weex/layout/playground.ejs b/doc/themes/weex/layout/playground.ejs
index ad748f1..88bfbc6 100644
--- a/doc/themes/weex/layout/playground.ejs
+++ b/doc/themes/weex/layout/playground.ejs
@@ -3,7 +3,7 @@
     <h2>Weex Playground</h2>
     <p><%= _p('playground.content') %></p>
     <div class="download clearfix">
-      <img class="qr-code" src="//gw.alicdn.com/tps/TB1PZ1HPXXXXXctXVXXXXXXXXXX-280-280.png" alt="playground qr code">
+      <img class="qr-code" src="//img.alicdn.com/tps/TB1Yv7ZQXXXXXaYaXXXXXXXXXXX-148-148.png" alt="playground qr code">
       <ul class="links">
         <li class="ios">
           <a href="" id="ios-link" class="link" target="_blank">iOS</a>
diff --git a/doc/themes/weex/source/css/common.scss b/doc/themes/weex/source/css/common.scss
index d9701b8..47a1fe9 100644
--- a/doc/themes/weex/source/css/common.scss
+++ b/doc/themes/weex/source/css/common.scss
@@ -18,9 +18,9 @@
 
 body {
   background: $bg-gray;
-  font-family: "PingFang SC","Helvetica Neue",Arial,STHeiti,"Microsoft YaHei","Source Han Sans SC","Noto Sans CJK SC","Source Han Sans CN","Noto Sans SC","Noto Sans CJK TC",SimSun,sans-serif;
+  font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen,Ubuntu,Cantarell,"Open Sans","Helvetica Neue","PingFang SC","Helvetica Neue",Arial,STHeiti,"Microsoft YaHei","Source Han Sans SC","Noto Sans CJK SC","Source Han Sans CN","Noto Sans SC","Noto Sans CJK TC",SimSun,sans-serif;
   font-size: 14px;
-  line-height: 1.2;
+  line-height: 1.4;
   color: $text-light-black;
   -webkit-tap-highlight-color: transparent;
 }
diff --git a/doc/themes/weex/source/css/partial/article.scss b/doc/themes/weex/source/css/partial/article.scss
index 9afcc5e..6628f46 100644
--- a/doc/themes/weex/source/css/partial/article.scss
+++ b/doc/themes/weex/source/css/partial/article.scss
@@ -65,4 +65,8 @@
 
 #faq .article {
   margin-left: 0;
+}
+
+#releasenote .article {
+  margin-left: 0;
 }
\ No newline at end of file
diff --git a/doc/themes/weex/source/css/partial/footer.scss b/doc/themes/weex/source/css/partial/footer.scss
index 3c4d976..71d263f 100644
--- a/doc/themes/weex/source/css/partial/footer.scss
+++ b/doc/themes/weex/source/css/partial/footer.scss
@@ -36,14 +36,10 @@
   }
 
   .row {
-    font-size: 14px;
+    font-size: 12px;
     margin: 8px 0;
   } 
 
-  .row span {
-    color: $text-gray;
-  } 
-
   .row .icon-baichuan {
     font-size: 14px;
     color: $text-light-black;
@@ -60,4 +56,16 @@
     margin-left: 2px;
     @include triangle-down($border-gray, 4px);
   }
+  .disclaimer{
+    max-width: 800px;
+    line-height: 150%
+  }
+  hr{
+    border: 0;
+    border-top: 1px solid #e6e6e6;
+  }
+  .disclaimer .title{
+    font-weight: bold;
+    margin-bottom: 10px;
+  }
 }
diff --git a/examples/accessibilitySupport.we b/examples/accessibilitySupport.we
new file mode 100644
index 0000000..fe41c55
--- /dev/null
+++ b/examples/accessibilitySupport.we
@@ -0,0 +1,57 @@
+<template>
+  <scoller style='padding:30'>
+      <div class='direction'>
+        <text>role:button  text btn </text>
+        <text class='box' role='button' aria-label='I am a button with text' >text button</text>
+      </div>
+      <div class='direction'>
+        <text>role:button  div btn </text>
+        <div class='box' role='button' aria-label='I am a button with div' >
+        </div>
+      </div>
+
+      <div class='direction'>
+        <text>role:input </text>
+        <input class='box' aria-label='I am a input' placeholder='please input'></input>
+      </div>
+      <div class='direction'>
+        <text>role:search </text>
+        <input class='box' role='search' aria-label='I am a search item' placeholder='please input something to search'></input>
+      </div>
+
+      <div class='direction'>
+        <text>role:link </text>
+        <a class='box' role='link' href='http://g.tbcdn.cn/ali-wireless-h5/res/0.0.16/hello.js' aria-label='I am a link'></a>
+      </div>
+
+      <div class='direction'>
+        <text>role:img </text>
+        <image class='box' role='img' src="https://imgsa.baidu.com/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5f234c7e0d7b020818c437b303b099b6/d4628535e5dde711a1ca272da0efce1b9c1661d4.jpg"
+         aria-label='I am a image, a little dog with brown hair'></image>
+      </div>
+
+      <div class='direction'>
+        <text aria-hidden='true'>hidden from voice-over/talkback </text>
+        <image class='box' aria-hidden='true' role='img' src="https://imgsa.baidu.com/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5f234c7e0d7b020818c437b303b099b6/d4628535e5dde711a1ca272da0efce1b9c1661d4.jpg" aria-label='I am a image'></image>
+      </div>
+      
+   </scroller>
+</template>
+
+<style>
+.box {
+  border-width:2;
+  border-color:red;
+  width:200;
+  height:50;
+  margin-left:20;
+}
+.direction {
+  flex-direction:row;
+  padding:20;
+  margin:10;
+  border-bottom-width:2;
+  border-color:black;
+}
+
+</style>
\ No newline at end of file
diff --git a/examples/component/image-demo.we b/examples/component/image-demo.we
index e24417c..ed9f05e 100644
--- a/examples/component/image-demo.we
+++ b/examples/component/image-demo.we
@@ -44,7 +44,7 @@
 require('weex-components');
 module.exports = {
   data: {
-    img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+    img: 'http://gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
   }
 }
 </script>
\ No newline at end of file
diff --git a/examples/component/input-demo.we b/examples/component/input-demo.we
index 7056218..ea4313b 100644
--- a/examples/component/input-demo.we
+++ b/examples/component/input-demo.we
@@ -3,127 +3,180 @@
         <div>
             <text style="font-size: 40px">oninput: {{txtInput}}</text>
             <text style="font-size: 40px">onchange: {{txtChange}}</text>
+            <text style="font-size: 40px">onreturntype: {{txtReturnType}}</text>
+            <text style="font-size: 40px">onrange: {{txtRange}}</text>
         </div>
         <scroller>
-            <wxc-panel title="input type = text" type="primary">
-                <input
-                        type="text"
-                        placeholder="Input Text"
-                        class="input"
-                        autofocus="{{autofocus}}"
-                        value=""
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = text</text>
+                </div>
+                <input type="text" placeholder="Input Text" class="input" autofocus=true value="" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = password" type="primary">
-                <input
-                        type="password"
-                        placeholder="Input Password"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = password</text>
+                </div>
+                <input type="password" placeholder="Input Password" class="input" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = url" type="primary">
-                <input
-                        type="url"
-                        placeholder="Input URL"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = url</text>
+                </div>
+                <input type="url" placeholder="Input URL" class="input" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = email" type="primary">
-                <input
-                        type="email"
-                        placeholder="Input Email"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = email</text>
+                </div>
+                <input type="email" placeholder="Input Email" class="input" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = tel" type="primary">
-                <input
-                        type="tel"
-                        placeholder="Input Tel"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = tel</text>
+                </div>
+                <input type="tel" placeholder="Input Tel" class="input" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = time" type="primary">
-                <input
-                        type="time"
-                        placeholder="Input Time"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = time</text>
+                </div>
+                <input type="time" placeholder="Input Time" class="input" onchange="onchange" oninput="oninput"/>
+            </div>
 
-            <wxc-panel title="input type = date" type="primary">
-                <input
-                        type="date"
-                        placeholder="Input Date"
-                        class="input"
-                        onchange="onchange"
-                        oninput="oninput"
-                        max="2017-12-12"
-                        min="2015-01-01"
-                />
-            </wxc-panel>
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = date</text>
+                </div>
+                <input type="date" placeholder="Input Date" class="input" onchange="onchange" oninput="oninput" max="2017-12-12" min="2015-01-01"/>
+            </div>
 
-            <wxc-panel title="function focus() & blur()" type="primary">
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = default</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="default" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = go</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="go" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = next</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="next" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = search</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="search" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = send</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="send" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = done</text>
+                </div>
+                <input type="text" placeholder="please input" return-key-type="done" class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput" />
+            </div>
+
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">function focus() & blur()</text>
+                </div>
                 <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
-                    <wxc-button value="Focus" type="primary" onclick="{{focus}}"></wxc-button>
-                    <wxc-button value="Blur" type="primary" onclick="{{blur}}"></wxc-button>
+                    <text class="button" value="Focus" type="primary" onclick="focus"></text>
+                    <text class="button" value="Blur" type="primary" onclick="blur"></text>
                 </div>
 
-                <input
-                        type="text"
-                        placeholder="Input1"
-                        class="input"
-                        value=""
-                        id="input1"
-                />
-            </wxc-panel>
+                <input type="text" placeholder="Input1" class="input" value="" id="input1"/>
+            </div>
+
+
+            <div>
+                <div style="background-color: #286090">
+                    <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input selection</text>
+                </div>
+                <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+                    <text class="button" value="setRange" type="primary" onclick="setRange"></text>
+                    <text class="button" value="getRange" type="primary" onclick="getRange"></text>
+                </div>
+                <input type="text"  id="inputselection" placeholder="please input" value="123456789"  class="input" onchange="onchange" onreturn = "onreturn" oninput="oninput"/>
+            </div>
+
+
+
         </scroller>
     </div>
 </template>
 
-<style>
+<style scoped>
     .input {
         font-size: 60px;
         height: 80px;
         width: 750px;
     }
+    .button {
+        font-size: 36;
+        width: 200;
+        color: #41B883;
+        text-align: center;
+        padding-top: 10;
+        padding-bottom: 10;
+        border-width: 2;
+        border-style: solid;
+        margin-right: 20;
+        border-color: rgb(162, 217, 192);
+        background-color: rgba(162, 217, 192, 0.2);
+    }
 </style>
 
 <script>
-    require('weex-components');
     module.exports = {
-        data: {
-            txtInput: '',
-            txtChange: '',
-            autofocus: false,
+        data: function () {
+            return {
+                txtInput: '',
+                txtChange: '',
+                txtReturnType: '',
+                txtSelection:'',
+                autofocus: false,
+                txtRange:''
+            };
         },
         methods: {
-            ready : function () {
+            ready: function () {
                 var self = this;
                 setTimeout(function () {
                     self.autofocus = true;
-                },1000);
+                }, 1000);
             },
             onchange: function (event) {
                 this.txtChange = event.value;
                 console.log('onchange', event.value);
             },
+            onreturn: function (event) {
+                this.txtReturnType = event.returnKeyType;
+                console.log('onreturn', event.type);
+            },
             oninput: function (event) {
                 this.txtInput = event.value;
                 console.log('oninput', event.value);
@@ -133,6 +186,16 @@
             },
             blur: function () {
                 this.$el('input1').blur();
+            },
+            setRange: function() {
+                console.log(this.$el["inputselection"]);
+                this.$el("inputselection").setSelectionRange(2, 6);
+            },
+            getRange: function() {
+                var self = this;
+                this.$el("inputselection").getSelectionRange(function(e) {
+                    self.txtRange =  e.selectionStart + '-'+e.selectionEnd;
+                });
             }
         }
     };
diff --git a/examples/component/list/list-basic.we b/examples/component/list/list-basic.we
index f7e0efc..ca3c12f 100644
--- a/examples/component/list/list-basic.we
+++ b/examples/component/list/list-basic.we
@@ -21,7 +21,7 @@
 
 <style>
   .list {
-    height:850
+    height:850;
   }
   .count {
     font-size: 48;
@@ -49,6 +49,11 @@
     height: 100;
     padding:20;
   }
+
+  .item:active {
+    background-color: #00BFFF;
+  }
+
   .item-title {
   }
   .refresh-view {
diff --git a/examples/component/slider-tab.we b/examples/component/slider-tab.we
new file mode 100644
index 0000000..7a3bf8a
--- /dev/null
+++ b/examples/component/slider-tab.we
@@ -0,0 +1,100 @@
+<template>
+  <div style="padding: 25px">
+    <div style="height: 80px; flex-direction: row;">
+      <div style="flex: 1;background-color: darkcyan;justify-content: center;align-items: center" onclick="goto(0)">
+        <text class="page-title">Page 1</text>
+      </div>
+      <div style="flex: 1;background-color: aquamarine;justify-content: center;align-items: center" onclick="goto(1)">
+        <text class="page-title">Page 2</text>
+      </div>
+      <div style="flex: 1;background-color: darkcyan;justify-content: center;align-items: center" onclick="goto(2)">
+        <text class="page-title">Page 3</text>
+      </div>
+    </div>
+    <div style="height: 10px;background-color: skyblue">
+      <div style="width: 233px;height: 10px;margin-left:{{progress}}; background-color:darkblue"></div>
+    </div>
+    <slider class="slider" interval="4500" onchange="onchange" append="tree" index="{{index}}" onscroll="onscroll"
+            onchange="onchange" offset-x-accuracy="0.01">
+      <div class="frame" repeat="{{img in imageList}}">
+        <image class="image" resize="cover" src="{{img.src}}"></image>
+        <text class="title">{{img.title}}</text>
+      </div>
+      <indicator style="height: 20px"></indicator>
+    </slider>
+  </div>
+</template>
+<style>
+  .page-title {
+    color: black;
+    font-size: 40px;
+    font-weight: bold;
+  }
+
+  .image {
+    width: 700px;
+    height: 700px;
+  }
+
+  .slider {
+    width: 700px;
+    height: 700px;
+    position: absolute;
+    border-width: 2px;
+    border-style: solid;
+    border-color: #41B883;
+  }
+
+  .title {
+    position: absolute;
+    top: 20px;
+    left: 20px;
+    padding-left: 20px;
+    width: 200px;
+    color: #FFFFFF;
+    font-size: 36px;
+    line-height: 60px;
+    background-color: rgba(0, 0, 0, 0.3);
+  }
+
+  .frame {
+    width: 700px;
+    height: 700px;
+  }
+</style>
+<script>
+  export default {
+    data: {
+      imageList: [
+        {title: 'Page 1', src: 'https://gd2.alicdn.com/bao/uploaded/i2/T14H1LFwBcXXXXXXXX_!!0-item_pic.jpg'},
+        {
+          title: 'Page 2',
+          src: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1PXJCJFXXXXciXFXXXXXXXXXX_!!0-item_pic.jpg'
+        },
+        {
+          title: 'Page 3',
+          src: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1x6hYLXXXXXazXVXXXXXXXXXX_!!0-item_pic.jpg'
+        }
+      ],
+      index: 0,
+      progress: 0,
+    },
+    methods: {
+      onchange (event) {
+        console.log('changed:', event.index)
+      },
+      goto (i) {
+        this.index = i;
+        this.progress = i * 233;
+      },
+      onscroll (e) {
+        var ratio = parseFloat(e.offsetXRatio);
+        this.progress = 233 * this.index + (233 * -ratio);
+      },
+      onchange (e) {
+        this.goto(parseInt(e.index));
+      }
+    }
+  }
+</script>
+
diff --git a/examples/include/example-list-item.we b/examples/include/example-list-item.we
index 2bd0a72..3b1f6e2 100644
--- a/examples/include/example-list-item.we
+++ b/examples/include/example-list-item.we
@@ -1,7 +1,7 @@
 <template>
-  <wxc-list-item onclick="{{redirect}}">
+    <div class="item" style="background-color:{{bgColor}};" onclick="{{redirect}}">
     <text class="item-txt">{{ title }}</text>
-  </wxc-list-item>
+    </div>
 </template>
 
 <style>
@@ -9,6 +9,29 @@
     font-size: 48px;
     color: #555;
   }
+  .item {
+    padding-top: 25px;
+    padding-bottom: 25px;
+    padding-left: 35px;
+    padding-right: 35px;
+    height: 160px;
+    justify-content: center;
+    /*margin-bottom: 1px; FUTURE */
+    border-bottom-width: 1px;
+    border-color: #dddddd;
+  }
+  .item:active {
+      padding-top: 25px;
+      padding-bottom: 25px;
+      padding-left: 35px;
+      padding-right: 35px;
+      height: 160px;
+      justify-content: center;
+      /*margin-bottom: 1px; FUTURE */
+      background-color: #00BDFF;
+      border-bottom-width: 1px;
+      border-color: #dddddd;
+  }
 </style>
 
 <script>
@@ -16,7 +39,8 @@
   module.exports = {
     data: {
       title: '',
-      url: ''
+      url: '',
+      bgColor: '#ffffff'
     },
     methods: {
       redirect: function() {
diff --git a/examples/index.we b/examples/index.we
index 54feddc..aa0b842 100644
--- a/examples/index.we
+++ b/examples/index.we
@@ -27,6 +27,7 @@
         {name: 'component/list/list-demo', title: 'List (Advanced)'},
         {name: 'component/slider/index', title: 'Slider'},
         {name: 'component/slider-neighbor/index', title: 'Slider Neighbor'},
+        {name: 'component/slider-tab', title: 'Slider Tab'},
         {name: 'component/a-demo', title: 'A'},
         {name: 'component/video-demo', title: 'Video'},
         {name: 'component/countdown-demo', title: 'Countdown'},
@@ -52,7 +53,11 @@
         {name: 'showcase/minesweeper', title: 'Minesweeper'},
         {name: 'showcase/ui', title: 'UI Gallery'},
         {name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown'},
-        {name: 'showcase/pseudo-class', title: 'PseudoClass'}
+        {name: 'showcase/pseudo-class', title: 'PseudoClass'},
+        {name: 'showcase/boxshadow', title: 'boxshadow'},
+
+        // market
+        {name: 'market/gcanvas', title: 'Gcanvas'},
       ]
     }
   }
diff --git a/examples/linear-gradient.we b/examples/linear-gradient.we
index babe158..1c2ab42 100644
--- a/examples/linear-gradient.we
+++ b/examples/linear-gradient.we
@@ -1,5 +1,8 @@
 <template>
     <scroller style="background-color: #3a3a3a">
+        <div class="container1" style="background-image:linear-gradient(to right,rgba(255,100,100,0),rgba(255,100,100,1));">
+            <text class="direction">Alpha gradient</text>
+        </div>
         <div class="container1" style="background-image:linear-gradient(to right,#43C6AC,#F8FFAE);">
             <text class="direction">to right</text>
         </div>
diff --git a/examples/module/chatroom-demo.we b/examples/module/chatroom-demo.we
new file mode 100644
index 0000000..506e3c3
--- /dev/null
+++ b/examples/module/chatroom-demo.we
@@ -0,0 +1,227 @@
+<template>
+  <div class="container">
+    <list class="list" loadmore="loadmore" loadmoreoffset="500">
+      <cell repeat="{{row in rows}}" append="tree">
+        <div class="item">
+          <text class="item-title" style="text-align:{{row.align}};background-color:{{row.bg}} ">{{row.message}}</text>
+        </div>
+      </cell>
+      <cell>
+        <text id="cellfoot" style="margin-bottom: 40"></text>
+      </cell>
+    </list>
+
+    <div style="flex-direction: row; justify-content: center;">
+      <input
+              type="text"
+              placeholder="请输入聊天信息"
+              class="input"
+              autofocus="false"
+              value=""
+              onchange="onchange"
+              oninput="oninput"
+              id = "input"
+      />
+      <!--<text class="button" onclick="{{connect}}">connect</text>-->
+      <text class="button" onclick="{{send}}">发送</text>
+    </div>
+    <text id="foot" style="color: #000000;height: 40"></text>
+  </div>
+</template>
+
+<style>
+  .input {
+    font-size: 40;
+    height: 80;
+    width: 500;
+    margin-bottom: 40px;
+    border-width: 2;
+    border-style: solid;
+    border-color: rgb(162, 217, 192);
+  }
+  .button {
+    font-size: 36;
+    width: 150;
+    height: 80;
+    text-align: center;
+    padding-top: 15;
+    padding-bottom: 15;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    margin-left: 20;
+    border-color: rgb(162, 217, 192);
+    background-color:#00BFFF;
+    color: white;
+    font-weight: 900;
+    box-shadow: 1 1px 8px rgba(205, 155, 29, 0.85);
+  }
+  .button:active {
+    background-color: #1E90FF;
+    box-shadow: 1 4px 6px rgba(255, 99, 71, 0.85);
+  }
+  .container{
+    flex:1;
+    justify-content: center;
+    align-items: center;
+    /*background-color: #f8f8f8;*/
+    flex-direction: column;
+    border-top-style:solid;
+    border-top-width:2;
+    border-top-color:#DFDFDF;
+  }
+  .list {
+    flex:1;
+    width:750;
+    /*transform:rotate(180deg);*/
+    justify-content: center;
+    align-items: center;
+    /*background-color: #abcdef;*/
+    flex-direction: column;
+    border-top-style:solid;
+    border-top-width:2;
+    border-top-color:#DFDFDF;
+  }
+  .row {
+
+  }
+  .item {
+    justify-content: center;
+    /*border-bottom-width: 2px;*/
+    /*border-bottom-color: #c0c0c0;*/
+    height: 60px;
+    padding:20px;
+    margin-top: 5;
+    /*transform:rotate(180deg);*/
+  }
+  .item-title {
+    font-size:30px;
+    height: 60px;
+    padding-top: 10;
+    padding-right: 20;
+    padding-left: 20;
+  }
+</style>
+
+<script>
+  var dom = require('@weex-module/dom');
+  var websocket = require('@weex-module/webSocket');
+  module.exports = {
+    data: {
+      rows:[],
+      names:['A','B','C','D','E','F','H','G'],
+      connectinfo: '',
+      sendinfo: '',
+      onopeninfo: '',
+      onmessage: '',
+      oncloseinfo: '',
+      onerrorinfo: '',
+      closeinfo: '',
+      txtInput:'',
+      info:'',
+      message:'',
+      align:'left',
+      bg:'white',
+      from_client_id:'',
+      name:'',
+      number:1
+    },
+    methods: {
+      ready:function(){
+        var self = this;
+        self.connect();
+      },
+      connect:function() {
+        websocket.WebSocket('ws://chat.workerman.net:7272/','');
+        var self = this;
+        self.info = 'connecting...'
+        websocket.onopen = function(e)
+        {
+          self.info = 'websocket open';
+          var count = self.names.length;
+          var id=Math.ceil(Math.random()*count);
+          self.name = self.names[id];
+          var loginData='{"type":"login","client_name":"'+self.name+'","room_id":"1"}';
+          self.login(loginData);
+        }
+
+        websocket.onmessage = function(e)
+        {
+          self.onmessage = e.data;
+          var message = JSON.parse(e.data);
+          self.align = 'left';
+          self.bg = 'white';
+          var loginMessage = '';
+          if(message.type == 'login' ){
+            if (self.from_client_id.length == 0)
+            {
+              self.from_client_id = message.client_id;
+//            self.info = 'type is login';
+              self.align = 'right';
+              self.bg = '#00CD00';
+              loginMessage = self.name+' 欢迎您加入了聊天室';
+            }else {
+              self.info = 'type is login';
+              self.align = 'left';
+              self.bg = 'white';
+              loginMessage = message.client_name+'加入了聊天室';
+            }
+          }
+          if(self.from_client_id == message.from_client_id)
+          {
+            self.align = 'right';
+            self.bg = '#00CD00';
+          }
+//          self.info =  message.type;
+          if(message.type == 'ping'){
+//            self.info = 'type is ping';
+          }
+//          self.info =  e.data;
+          if(message.type == 'login')
+          {
+            self.rows.push({message:loginMessage,align:self.align,bg:self.bg});
+          }else if(message.type == 'logout')
+          {
+            self.rows.push({message:message.from_client_name+'离开了聊天室',align:self.align,bg:self.bg});
+          }
+
+          if(message.content ){
+            self.rows.push({message:message.from_client_name+':'+message.content,align:self.align,bg:self.bg});
+            if(self.rows.length>16){
+              dom.scrollToElement(self.$el('cellfoot'), { offset: 0 })
+            }
+          }
+
+
+        }
+        websocket.onerror = function(e)
+        {
+          self.onerrorinfo = e.data;
+        }
+        websocket.onclose = function(e)
+        {
+          self.onopeninfo = '';
+          self.onerrorinfo = e.code;
+        }
+      },
+      login:function (loginInfo) {
+        websocket.send(loginInfo);
+      },
+      send:function(e) {
+
+        var input = this.$el('input');
+        input.blur();
+        var self = this;
+        var sendinfo = '{"type":"say","from_client_id":"'+self.from_client_id+'","from_client_name":"'+'游客'+'","to_client_id":"all","content":"'+this.txtInput+'","time":"2017-03-15 01:04:00"}'
+        websocket.send(sendinfo);
+//        this.info = sendinfo;
+      },
+      oninput: function(event) {
+        this.txtInput = event.value;
+      },
+      close:function(e) {
+        websocket.close();
+      },
+    },
+  }
+</script>
\ No newline at end of file
diff --git a/examples/module/componentRect.we b/examples/module/componentRect.we
index ceedbc1..af0a0c9 100644
--- a/examples/module/componentRect.we
+++ b/examples/module/componentRect.we
@@ -1,4 +1,4 @@
-<we-element name="multi-text">
+<element name="multi-text">
   <template>
     <div style="flex-direction: row;">
       <text class="text-style text-descript">{{descript}}</text>
@@ -20,7 +20,7 @@
       },
     }
   </script>
-</we-element>
+</element>
 
 <template>
   <div style="width:730;margin:10;border-width:3; border-color:#00FF00;">
diff --git a/examples/module/websocket-demo.we b/examples/module/websocket-demo.we
index 74ad8a6..0d0c329 100644
--- a/examples/module/websocket-demo.we
+++ b/examples/module/websocket-demo.we
@@ -1,124 +1,172 @@
 <template>
-    <scroller>
-        <div>
-            <div style="background-color: #286090">
-                <text class="title" style="height: 80px ;padding: 20px;color: white">websocket</text>
-            </div>
-            <input
-                    type="text"
-                    placeholder="please input message to send"
-                    class="input"
-                    autofocus="false"
-                    value=""
-                    onchange="onchange"
-                    oninput="oninput"
-                    id = "input"
-            />
-            <div style="flex-direction: row; justify-content: center;">
-                <text class="button" onclick="{{connect}}">connect</text>
-                <text class="button" onclick="{{send}}">send</text>
-                <text class="button" onclick="{{close}}">close</text>
-            </div>
-            <div style="background-color: lightgray;margin-top: 20px">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = send</text>
-            </div>
-            <text style="color: black;height: 80px">{{sendinfo}}</text>
-            <div style="background-color: lightgray">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = onopen</text>
-            </div>
-            <text style="color: black;height: 80px">{{onopeninfo}}</text>
-            <div style="background-color: lightgray">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = onmessage</text>
-            </div>
-            <text style="color: black;height: 100px">{{onmessage}}</text>
-            <div style="background-color: lightgray">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = onclose</text>
-            </div>
-            <text style="color: black;height: 80px">{{oncloseinfo}}</text>
-            <div style="background-color: lightgray">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = onerror</text>
-            </div>
-            <text style="color: black;height: 80px">{{onerrorinfo}}</text>
-            <div style="background-color: lightgray">
-                <text class="title" style="height: 80px ;padding: 20px;color: black">method = close</text>
-            </div>
-            <text style="color: black;height: 80px">{{closeinfo}}</text>
-        </div>
-        </div>
-    </scroller>
+  <scroller>
+    <div>
+      <div style="background-color: #286090">
+        <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">websocket</text>
+      </div>
+      <input
+              type="text"
+              placeholder="please input message to send"
+              class="input"
+              autofocus="false"
+              value=""
+              onchange="onchange"
+              oninput="oninput"
+              id = "input"
+      />
+      <div style="flex-direction: row; justify-content: center;">
+        <text class="button" onclick="{{connect}}">connect</text>
+        <text class="button" onclick="{{send}}">send</text>
+        <text class="button" onclick="{{close}}">close</text>
+        <text class="button" onclick="{{go}}">chatroom</text>
+      </div>
+      <div style="background-color: #D3D3D3;margin-top: 20">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = send</text>
+      </div>
+      <text style="color: #000000;height: 80">{{sendinfo}}</text>
+      <div style="background-color: #D3D3D3">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = onopen</text>
+      </div>
+      <text style="color: #000000;height: 80">{{onopeninfo}}</text>
+      <div style="background-color: #D3D3D3">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = onmessage</text>
+      </div>
+      <text style="color: #000000;height: 100">{{onmessage}}</text>
+      <div style="background-color: #D3D3D3">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = onclose</text>
+      </div>
+      <text style="color: #000000;height: 80">{{oncloseinfo}}</text>
+      <div style="background-color: #D3D3D3">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = onerror</text>
+      </div>
+      <text style="color: #000000;height: 80">{{onerrorinfo}}</text>
+      <div style="background-color: #D3D3D3">
+        <text class="title" style="height: 80 ;padding: 20;color: #000000">method = close</text>
+      </div>
+      <text style="color: #000000;height: 80">{{closeinfo}}</text>
+    </div>
+    </div>
+  </scroller>
 </template>
 <style>
-    .input {
-        font-size: 40px;
-        height: 80px;
-        width: 600px;
-    }
-    .button {
-        font-size: 36px;
-        width: 150px;
-        color: #41B883;
-        text-align: center;
-        padding-top: 10px;
-        padding-bottom: 10px;
-        border-width: 2px;
-        border-style: solid;
-        margin-right: 20px;
-        border-color: rgb(162, 217, 192);
-        background-color: rgba(162, 217, 192, 0.2);
-    }
+  .input {
+    font-size: 40;
+    height: 80;
+    width: 600;
+  }
+  .button {
+    font-size: 30;
+    width: 150;
+    color: #41B883;
+    text-align: center;
+    padding-top: 10;
+    padding-bottom: 10;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    border-color: rgb(162, 217, 192);
+    background-color: rgba(162, 217, 192, 0.2);
+  }
 </style>
 <script>
-    var websocket = require('@weex-module/webSocket');
-    module.exports = {
-        data: {
-            connectinfo: '',
-            sendinfo: '',
-            onopeninfo: '',
-            onmessage: '',
-            oncloseinfo: '',
-            onerrorinfo: '',
-            closeinfo: '',
-            txtInput:'',
-            navBarHeight: 88,
-            title: 'Navigator',
-            dir: 'examples',
-            baseURL: '',
-        },
-        methods: {
-            connect:function() {
-                websocket.WebSocket('ws://echo.websocket.org','');
-                var self = this;
-                self.onopeninfo = 'connecting...'
-                websocket.onopen = function(e)
-                {
-                    self.onopeninfo = 'websocket open';
-                }
-                websocket.onmessage = function(e)
-                {
-                    self.onmessage = e.data;
-                }
-                websocket.onerror = function(e)
-                {
-                    self.onerrorinfo = e.data;
-                }
-                websocket.onclose = function(e)
-                {
-                    self.onopeninfo = '';
-                    self.onerrorinfo = e.code;
-                }
-            },
-            send:function(e) {
-                var input = this.$el('input');
-                input.blur();
-                websocket.send(this.txtInput);
-                this.sendinfo = this.txtInput;
-            },
-            oninput: function(event) {
-                this.txtInput = event.value;
-            },
-            close:function(e) {
-                websocket.close();
-            },
+  var websocket = require('@weex-module/webSocket');
+  var navigator = require('@weex-module/navigator');
+  module.exports = {
+    data: {
+      connectinfo: '',
+      sendinfo: '',
+      onopeninfo: '',
+      onmessage: '',
+      oncloseinfo: '',
+      onerrorinfo: '',
+      closeinfo: '',
+      txtInput:'',
+      navBarHeight: 88,
+      title: 'Navigator',
+      dir: 'examples',
+      baseURL: '',
+    },
+    created: function() {
+      var bundleUrl = this.$getConfig().bundleUrl;
+      bundleUrl = new String(bundleUrl);
+      console.log('hit', bundleUrl);
+      var nativeBase;
+      var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
+
+      var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+      if (isAndroidAssets) {
+        nativeBase = 'file://assets/';
+      }
+      else if (isiOSAssets) {
+        // file:///var/mobile/Containers/Bundle/Application/{id}/WeexDemo.app/
+        // file:///Users/{user}/Library/Developer/CoreSimulator/Devices/{id}/data/Containers/Bundle/Application/{id}/WeexDemo.app/
+        nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+      }
+      else {
+        var host = 'localhost:12580';
+        var matches = /\/\/([^\/]+?)\//.exec(this.$getConfig().bundleUrl);
+        if (matches && matches.length >= 2) {
+          host = matches[1];
         }
-    };
+        nativeBase = 'http://' + host + '/' + this.dir + '/build/';
+      }
+      var h5Base = bundleUrl;
+      // in Native
+      var base = nativeBase;
+      if (typeof window == 'object') {
+        // in Browser or WebView
+        base = h5Base;
+      }
+      this.baseURL = base;
+    },
+    methods: {
+
+      connect:function() {
+        websocket.WebSocket('ws://echo.websocket.org','');
+        var self = this;
+        self.onopeninfo = 'connecting...'
+        websocket.onopen = function(e)
+        {
+          self.onopeninfo = 'websocket open';
+        }
+        websocket.onmessage = function(e)
+        {
+          self.onmessage = e.data;
+        }
+        websocket.onerror = function(e)
+        {
+          self.onerrorinfo = e.data;    
+        }
+        websocket.onclose = function(e)
+        {
+          self.onopeninfo = '';
+          self.onerrorinfo = e.code;
+        }
+      },
+      send:function(e) {
+        var input = this.$el('input');
+        input.blur();
+        websocket.send(this.txtInput);
+        this.sendinfo = this.txtInput;
+      },
+      oninput: function(event) {
+        this.txtInput = event.value;
+      },
+      close:function(e) {
+        websocket.close();
+      },
+      go:function(e) {
+        var vm = this;
+        if (typeof window !== 'object') {
+          this.baseURL = this.baseURL + 'module/chatroom-demo.js?test=1';
+        }
+        var params = {
+          'url':  this.baseURL,
+          'animated' : 'true',
+        }
+        navigator.push(params,function(){
+        });
+      },
+    }
+  };
 </script>
\ No newline at end of file
diff --git a/examples/showcase/boxshadow.we b/examples/showcase/boxshadow.we
new file mode 100644
index 0000000..16e86cc
--- /dev/null
+++ b/examples/showcase/boxshadow.we
@@ -0,0 +1,46 @@
+
+<template>
+    <div class="wrapper" onclick="update">
+        <div style=" height:60px;background-color: #FFE4C4; box-shadow:{{bs}};width:{{w}};">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow: 20px  10px 5px rgba(255, 69, 0, 0.8);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgba(255, 69, 0, 0.8);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgb(255, 69, 0);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px black;">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px #008B00;">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+    </div>
+</template>
+
+<style>
+    .wrapper {align-items: center; margin-top: 120px;}
+    .title {font-size: 48px;}
+</style>
+
+<script>
+    module.exports = {
+        data: {
+            logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+            target: 'World',
+            w:'400',
+            bs:'20px  10px  5px rgb(255, 69, 0)'
+        },
+        methods: {
+            update: function (e) {
+                this.target = 'Weex';
+                this.w = 600;
+                this.bs='inset 20px  10px 5px rgba(0, 0, 0, 0.5)';
+            }
+        }
+    }
+</script>
diff --git a/examples/vanilla/index.js b/examples/vanilla/index.js
index 82d8d1d..4861a72 100644
--- a/examples/vanilla/index.js
+++ b/examples/vanilla/index.js
@@ -1,4 +1,21 @@
-// { "framework": "Vanilla" }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 var body = document.createElement('div', {
   classStyle: { alignItems: 'center', marginTop: 120 }
diff --git a/examples/vue/animation.vue b/examples/vue/animation.vue
index 2b4b3bf..ef6afcf 100644
--- a/examples/vue/animation.vue
+++ b/examples/vue/animation.vue
@@ -43,7 +43,7 @@
     },
     methods: {
       anim: function(styles, timingFunction, duration, callback) {
-        animation.transition(this.$refs.block.ref, {
+        animation.transition(this.$refs.block, {
           styles: styles,
           timingFunction: timingFunction,
           duration: duration
@@ -130,7 +130,7 @@
   };
 </script>
 
-<style>
+<style scoped>
   .block {
     position: absolute;
     width: 250px;
diff --git a/examples/vue/components/countdown.vue b/examples/vue/components/countdown.vue
index cb29c43..487d1c4 100644
--- a/examples/vue/components/countdown.vue
+++ b/examples/vue/components/countdown.vue
@@ -27,7 +27,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .ctno1 {
     border-radius: 8;
     padding-top: 6;
diff --git a/examples/vue/components/image.vue b/examples/vue/components/image.vue
index c0a43ea..74b7430 100644
--- a/examples/vue/components/image.vue
+++ b/examples/vue/components/image.vue
@@ -36,7 +36,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .img {
     margin-bottom: 20px;
   }
diff --git a/examples/vue/components/input.vue b/examples/vue/components/input.vue
index 5583c25..9cf4c37 100644
--- a/examples/vue/components/input.vue
+++ b/examples/vue/components/input.vue
@@ -1,55 +1,192 @@
 <template>
-  <scroller>
-    <panel title="input" type="primary">
-      <input
-        type="text"
-        placeholder="Text Input"
-        class="input"
-        autofocus="true"
-        value=""
-        @change="onchange"
-        @input="oninput"
-      />
-      <text>oninput: {{txtInput}}</text>
-      <text>onchange: {{txtChange}}</text>
-    </panel>
-  </scroller>
+  <div>
+    <div>
+      <text style="font-size: 40px">oninput: {{txtInput}}</text>
+      <text style="font-size: 40px">onchange: {{txtChange}}</text>
+      <text style="font-size: 40px">onreturntype: {{txtReturnType}}</text>
+    </div>
+    <scroller>
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = text</text>
+        </div>
+        <input type="text" placeholder="Input Text" class="input" :autofocus=true value="" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = password</text>
+        </div>
+        <input type="password" placeholder="Input Password" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = url</text>
+        </div>
+        <input type="url" placeholder="Input URL" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = email</text>
+        </div>
+        <input type="email" placeholder="Input Email" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = tel</text>
+        </div>
+        <input type="tel" placeholder="Input Tel" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = time</text>
+        </div>
+        <input type="time" placeholder="Input Time" class="input" @change="onchange" @input="oninput"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input type = date</text>
+        </div>
+        <input type="date" placeholder="Input Date" class="input" @change="onchange" @input="oninput" max="2017-12-12" min="2015-01-01"/>
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = default</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="default" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = go</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="go" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = next</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="next" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = search</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="search" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = send</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="send" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input return-key-type = done</text>
+        </div>
+        <input type="text" placeholder="please input" return-key-type="done" class="input" @change="onchange" @return = "onreturn" @input="oninput" />
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">function focus() & blur()</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="Focus" type="primary" @click="focus"></text>
+          <text class="button" value="Blur" type="primary" @click="blur"></text>
+        </div>
+
+        <input type="text" placeholder="Input1" class="input" value="" ref="input1"/>
+      </div>
+
+
+      <div>
+        <div style="background-color: #286090">
+          <text class="title" style="height: 80 ;padding: 20;color: #FFFFFF">input selection</text>
+        </div>
+        <div style="flex-direction: row;margin-bottom: 16px;justify-content: space-between">
+          <text class="button" value="setRange" type="primary" @click="setRange"></text>
+        </div>
+        <input type="text"  ref="inputselection" placeholder="please input" value="123456789"  class="input" @change="onchange" @return = "onreturn" @input="oninput"/>
+      </div>
+
+
+
+    </scroller>
+  </div>
 </template>
 
-<style>
+<style scoped>
   .input {
     font-size: 60px;
     height: 80px;
-    width: 400px;
+    width: 750px;
+  }
+  .button {
+    font-size: 36;
+    width: 200;
+    color: #41B883;
+    text-align: center;
+    padding-top: 10;
+    padding-bottom: 10;
+    border-width: 2;
+    border-style: solid;
+    margin-right: 20;
+    border-color: rgb(162, 217, 192);
+    background-color: rgba(162, 217, 192, 0.2);
   }
 </style>
 
 <script>
-  var modal = weex.requireModule('modal')
   module.exports = {
     data: function () {
       return {
         txtInput: '',
-        txtChange: ''
-      }
-    },
-    components: {
-      panel: require('../include/panel.vue')
+        txtChange: '',
+        txtReturnType: '',
+        txtSelection:'',
+        autofocus: false
+      };
     },
     methods: {
-      onchange: function(event) {
-        this.txtChange = event.value;
-        modal.toast({
-          message: 'onchange: ' + event.value,
-          duration: 2
-        })
+      ready: function () {
+        var self = this;
+        setTimeout(function () {
+          self.autofocus = true;
+        }, 1000);
       },
-      oninput: function(event) {
+      onchange: function (event) {
+        this.txtChange = event.value;
+        console.log('onchange', event.value);
+      },
+      onreturn: function (event) {
+        this.txtReturnType = event.returnKeyType;
+        console.log('onreturn', event.type);
+      },
+      oninput: function (event) {
         this.txtInput = event.value;
-        modal.toast({
-          message: 'onitput: ' + event.value,
-          duration: 1
-        })
+        console.log('oninput', event.value);
+      },
+      focus: function () {
+        this.$refs['input1'].focus();
+      },
+      blur: function () {
+        this.$refs['input1'].blur();
+      },
+      setRange: function() {
+        console.log(this.$refs["inputselection"]);
+        this.$refs["inputselection"].setSelectionRange(2, 6);
       }
     }
   };
diff --git a/examples/vue/components/list.vue b/examples/vue/components/list.vue
index 81056c3..c894258 100644
--- a/examples/vue/components/list.vue
+++ b/examples/vue/components/list.vue
@@ -5,9 +5,10 @@
         v-for="(v,i) in rows"
         append="tree"
         :index="i"
+        :key="i"
         class="row"
-        @appear="onappear"
-        @disappear="ondisappear">
+        @appear="onappear(i, $event)"
+        @disappear="ondisappear(i, $event)">
         <div class="item">
           <text class="item-title">row {{v.id}}</text>
         </div>
@@ -17,7 +18,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .list {
     height:850px
   }
@@ -40,6 +41,9 @@
     height: 100px;
     padding:20px;
   }
+  .item:active {
+     background-color: #00BDFF;
+   }
   .item-title {
   }
 </style>
@@ -47,16 +51,16 @@
 <script>
   module.exports = {
     methods: {
-      onappear: function (e) {
-        var appearId = this.rows[e.target.attr.index].id;
-        nativeLog('+++++', appearId);
+      onappear: function (idx, e) {
+        var appearId = this.rows[idx].id;
+        console.log('+++++', appearId);
         var appearIds = this.appearIds;
         appearIds.push(appearId);
         this.getMinAndMaxIds(appearIds);
       },
-      ondisappear:function (e) {
-        var disAppearId = this.rows[e.target.attr.index].id;
-        nativeLog('+++++', disAppearId);
+      ondisappear:function (idx, e) {
+        var disAppearId = this.rows[idx].id;
+        console.log('+++++', disAppearId);
         var appearIds = this.appearIds;
         var index = appearIds.indexOf(disAppearId);
         if (index > -1) {
diff --git a/examples/vue/components/marquee.vue b/examples/vue/components/marquee.vue
index 0736112..e197153 100644
--- a/examples/vue/components/marquee.vue
+++ b/examples/vue/components/marquee.vue
@@ -16,7 +16,8 @@
         }"
         @change="marqueeChange">
         <div
-          v-for="item in marquee.list"
+          v-for="(item,i) in marquee.list"
+          :key="i"
           :style="{
             height: marquee.height * marquee.length,
             paddingTop: marquee.height * 0.5,
diff --git a/examples/vue/components/navigator.vue b/examples/vue/components/navigator.vue
index 0413d29..ab1423f 100644
--- a/examples/vue/components/navigator.vue
+++ b/examples/vue/components/navigator.vue
@@ -28,7 +28,8 @@
         navBarHeight: 88,
         title: 'Navigator',
         dir: 'examples',
-        baseURL: ''
+        baseURL: '',
+        subPath: weex.config.env.platform === 'Web' ? 'vue-web/' : ''
       }
     },
     components: {
@@ -56,14 +57,14 @@
       },
       push: function () {
         var params = {
-          'url':  this.baseURL + 'vue/components/navigator.js?test=1',
+          'url':  this.baseURL + this.subPath + 'vue/components/navigator.js?test=1',
           'animated' : 'true',
         }
         navigator.push(params, function () {});
       },
       pop: function () {
         var params = {
-          'url':  this.baseURL + 'vue/components/navigator.js?test=1',
+          'url':  this.baseURL + this.subPath + 'vue/components/navigator.js?test=1',
           'animated' : 'true',
         }
         navigator.pop(params, function () {});
diff --git a/examples/vue/components/scroller.vue b/examples/vue/components/scroller.vue
index d5d4610..f829120 100644
--- a/examples/vue/components/scroller.vue
+++ b/examples/vue/components/scroller.vue
@@ -1,20 +1,23 @@
 <template>
   <scroller class="list" append="tree">
-    <div v-for="sec in sections" class="section">
+    <refresh class="refresh-view" :display="refresh_display" @refresh="onrefresh" @pullingdown="pullingdown">
+      <img id="roate" ref="roate" src="http://gw.alicdn.com/bao/uploaded/TB1xDrVNFXXXXbEXFXXXXXXXXXX-48-48.png" style="width: 50px;height: 50px;"></img>
+    </refresh>
+    <div v-for="(sec, i) in sections" :key="i" class="section">
       <div class="header">
         <text class="header-title">{{sec.title}}</text>
       </div>
-      <div v-for="item in sec.items" class="item">
+      <div v-for="item in sec.items" class="item" :key="item.index">
         <text class="item-title">row {{item.id}}</text>
       </div>
     </div>
-    <loading class="loading-view" :display="loading_display" onloading="onloading">
-      <loading-indicator style="height: 60; width: 60"></loading-indicator>
+    <loading class="loading-view" :display="loading_display" @loading="onloading">
+      <loading-indicator style="height: 60px; width: 60px;"></loading-indicator>
     </loading>
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .refresh-view {
     height: 120px;
     width: 750px;
@@ -37,6 +40,7 @@
     width: 750px;
     justify-content: center;
     align-items: center;
+    background-color: #c0c0c0;
   }
 
   .indicator {
@@ -77,14 +81,19 @@
         self.refresh_display = 'show';
         setTimeout(function () {
           self.refresh_display = 'hide';
-        }, 1000)
+        }, 3000)
       },
       onloading: function(e) {
         var self = this;
         self.loading_display = 'show';
         setTimeout(function () {
           self.loading_display = 'hide';
-        }, 1000)
+        }, 3000)
+      },
+      pullingdown: function(e){
+        var dy = e.dy;
+        var pullingDistance = e.pullingDistance;
+        var viewHeight = e.viewHeight;
       }
     },
     data: function () {
@@ -112,6 +121,17 @@
               {id: 10},
               {id: 11}
             ]
+          },
+          {
+            title: 'Header 3',
+            items: [
+              {id: 6},
+              {id: 7},
+              {id: 8},
+              {id: 9},
+              {id: 10},
+              {id: 11}
+            ]
           }
         ],
         moreSections: [
diff --git a/examples/vue/components/slider.vue b/examples/vue/components/slider.vue
index 1ee17b9..5985b68 100644
--- a/examples/vue/components/slider.vue
+++ b/examples/vue/components/slider.vue
@@ -6,7 +6,7 @@
           :interval="sliders[1].interval"
           autoPlay="false">
           <indicator class="indicator"></indicator>
-          <slider-page v-for="v in sliders[1].sliderPages" :items="v.items"></slider-page>
+          <slider-page v-for="(v,i) in sliders[1].sliderPages" :items="v.items" :key="i"></slider-page>
         </slider>
       </panel>
       <panel title="auto-play = true" padding-body="0">
@@ -14,7 +14,7 @@
           :interval="sliders[0].interval"
           :autoPlay="sliders[0].autoPlay">
           <indicator class="indicator"></indicator>
-          <slider-page v-for="v in sliders[0].sliderPages" :items="v.items"></slider-page>
+          <slider-page v-for="v in sliders[0].sliderPages" :key="v.index" :items="v.items"></slider-page>
         </slider>
       </panel>
     </panel>
@@ -24,7 +24,7 @@
         :autoPlay="sliders[0].autoPlay"
         @change="handleSliderChange">
         <indicator class="indicator"></indicator>
-        <slider-page v-for="v in sliders[0].sliderPages" :items="v.items"></slider-page>
+        <slider-page v-for="v in sliders[0].sliderPages" :key="v.index" :items="v.items"></slider-page>
       </slider>
     </panel>
     <panel title="Indicator" type="primary">
@@ -34,7 +34,7 @@
           :autoPlay="sliders[0].autoPlay"
           @change="handleSliderChange">
           <indicator class="indicator"></indicator>
-          <slider-page v-for="v in sliders[0].sliderPages" :items="v.items"></slider-page>
+          <slider-page v-for="v in sliders[0].sliderPages" :key="v.index" :items="v.items"></slider-page>
         </slider>
       </panel>
       <panel title="width & height" padding-body="0">
@@ -42,7 +42,7 @@
           :interval="sliders[0].interval"
           :autoPlay="sliders[0].autoPlay">
           <indicator style="itemColor: #dddddd;width:714px;height:460px;"></indicator>
-          <slider-page v-for="v in sliders[0].sliderPages" :items="v.items"></slider-page>
+          <slider-page v-for="v in sliders[0].sliderPages" :key="v.index" :items="v.items"></slider-page>
         </slider>
       </panel>
       <panel title="left & top" padding-body="0">
@@ -50,23 +50,23 @@
           :interval="sliders[1].interval"
           :autoPlay="sliders[1].autoPlay">
           <indicator class="indicator" style="top:-140px;left:-240px"></indicator>
-          <slider-page v-for="v in sliders[1].sliderPages" :items="v.items"></slider-page>
+          <slider-page v-for="(v,i) in sliders[1].sliderPages" :items="v.items" :key="i"></slider-page>
         </slider>
       </panel>
       <panel title="itemColor & itemSelectedColor" padding-body="0">
         <slider class="slider" append="tree"
           :interval="sliders[2].interval"
           :autoPlay="sliders[2].autoPlay">
-          <indicator class="indicator" style="itemSelectedColor:rgb(217, 83, 79);"></indicator>
-          <slider-page v-for="v in sliders[2].sliderPages" :items="v.items"></slider-page>
+          <indicator class="indicator" style="item-selected-color:rgb(217, 83, 79);"></indicator>
+          <slider-page v-for="v in sliders[2].sliderPages" :key="v.index" :items="v.items"></slider-page>
         </slider>
       </panel>
       <panel title="itemSize" padding-body="0">
         <slider class="slider" append="tree"
           :interval="sliders[1].interval"
           :autoPlay="sliders[1].autoPlay">
-          <indicator style="itemColor: #dddddd;itemSize:40px;top:140px;left:180px;width:700px;height:380px;"></indicator>
-          <slider-page v-for="v in sliders[1].sliderPages" :items="v.items"></slider-page>
+          <indicator style="itemColor: #dddddd;item-size:40px;top:140px;left:180px;width:700px;height:380px;"></indicator>
+          <slider-page v-for="(v,i) in sliders[1].sliderPages" :items="v.items" :key="i"></slider-page>
         </slider>
       </panel>
     </panel>
@@ -239,7 +239,7 @@
   };
 </script>
 
-<style>
+<style scoped>
   .body {
     background-color: #ffffff;
   }
diff --git a/examples/vue/components/sliderinfinite.vue b/examples/vue/components/sliderinfinite.vue
new file mode 100644
index 0000000..4a3702e
--- /dev/null
+++ b/examples/vue/components/sliderinfinite.vue
@@ -0,0 +1,46 @@
+<template>
+  <div>
+    <slider class="slider" interval="3000" auto-play="true">
+      <div class="frame" v-for="img in imageList">
+        <image class="image" resize="cover" :src="img.src"></image>
+      </div>
+    </slider>
+  </div>
+</template>
+
+<style scoped>
+  .image {
+    width: 700px;
+    height: 300px;
+  }
+  .slider {
+    margin-top: 25px;
+    margin-left: 25px;
+    width: 700px;
+    height: 300px;
+    border-width: 2px;
+    border-style: solid;
+    border-color: #41B883;
+  }
+  .frame {
+    width: 700px;
+    height: 300px;
+    position: relative;
+  }
+</style>
+
+<script>
+  export default {
+    data () {
+      return {
+        imageList: [
+          { src: 'https://gw.alicdn.com/tfs/TB1SA2wQXXXXXXDapXXXXXXXXXX-1400-600.png'},
+          { src: 'https://gw.alicdn.com/tfs/TB1KS_OQXXXXXcSXVXXXXXXXXXX-1400-600.png'},
+          { src: 'https://gw.alicdn.com/tfs/TB1Ez7XQXXXXXbNXXXXXXXXXXXX-1400-600.png'},
+          { src: 'https://gw.alicdn.com/tfs/TB1XLn6QXXXXXb2XpXXXXXXXXXX-1400-600.png'}
+        ]
+
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/examples/vue/components/text.vue b/examples/vue/components/text.vue
index b2808e8..19f34aa 100644
--- a/examples/vue/components/text.vue
+++ b/examples/vue/components/text.vue
@@ -44,7 +44,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .txt {
     margin-bottom: 12px;
     font-size: 40px;
diff --git a/examples/vue/components/textarea.vue b/examples/vue/components/textarea.vue
new file mode 100644
index 0000000..580e390
--- /dev/null
+++ b/examples/vue/components/textarea.vue
@@ -0,0 +1,57 @@
+<template>
+  <scroller>
+    <panel title="textarea" type="primary">
+      <textarea
+        class="textarea"
+        autofocus="true"
+        return-key-type="done"
+        @return="onreturn"
+        @change="onchange"
+        @input="oninput"
+      />
+      <text>oninput: {{txtInput}}</text>
+      <text>onchange: {{txtChange}}</text>
+      <text>enter key type: {{returnType}}</text>
+      <text>action: {{msg}}</text>
+    </panel>
+  </scroller>
+</template>
+
+<style scoped>
+  .textarea {
+    font-size: 30px;
+    height: 280px;
+    width: 400px;
+    border-width: 2px;
+    border-color: #ccc;
+  }
+</style>
+
+<script>
+  var modal = weex.requireModule('modal')
+  module.exports = {
+    data: function () {
+      return {
+        txtInput: '',
+        txtChange: '',
+        returnType: '',
+        msg: ''
+      }
+    },
+    components: {
+      panel: require('../include/panel.vue')
+    },
+    methods: {
+      onchange: function(event) {
+        this.txtChange = event.value;
+      },
+      oninput: function(event) {
+        this.txtInput = event.value;
+      },
+      onreturn: function(event) {
+        this.returnType = event.returnKeyType;
+        this.msg = 'You are "' + this.returnType + '" ' + event.value;
+      }
+    }
+  };
+</script>
diff --git a/examples/vue/components/video.vue b/examples/vue/components/video.vue
index 0aec474..677cad9 100644
--- a/examples/vue/components/video.vue
+++ b/examples/vue/components/video.vue
@@ -11,7 +11,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .video {
     width: 750px;
     height: 460px;
diff --git a/examples/vue/components/waterfall.vue b/examples/vue/components/waterfall.vue
new file mode 100644
index 0000000..ab39b7f
--- /dev/null
+++ b/examples/vue/components/waterfall.vue
@@ -0,0 +1,468 @@
+<template>
+  <waterfall class="page" ref="waterfall"
+  v-bind:style="{padding:padding}"
+  :column-width="columnWidth" :column-count="columnCount" :column-gap="columnGap"
+  :show-scrollbar="showScrollbar" :scrollable="scrollable"
+  @scroll="recylerScroll" @loadmore="loadmore" loadmoreoffset=3000
+  >
+    <refresh class="refresh" @refresh="onrefresh" @pullingdown="onpullingdown" :display="refreshing ? 'show' : 'hide'">
+      <loading-indicator class="indicator"></loading-indicator>
+      <text class="refreshText">{{refreshText}}</text>
+    </refresh>
+    <header class="header" ref="header" v-if="showHeader">
+      <image class="banner" src="https://gw.alicdn.com/tps/TB1ESN1PFXXXXX1apXXXXXXXXXX-1000-600.jpg" resize="cover">
+        <div class="bannerInfo">
+          <image class="avatar" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg" resize="cover"></image>
+          <text class="name">Adam Cat</text>
+          <div class="titleWrap">
+            <text class="title">Genius</text>
+          </div>
+        </div>
+        <div class="bannerPhotoWrap">
+          <image class="bannerPhoto" v-for="photo in banner.photos" :src="photo.src"></image>
+        </div>
+      </image>
+    </header>
+    <header class="stickyHeader" @click="showOrRemoveHeader">
+      <div v-if="stickyHeaderType === 'none'" class="stickyWrapper">
+        <text class="stickyText">Sticky Header</text>
+      </div>
+      <div v-if="stickyHeaderType === 'appear'" class="stickyWrapper">
+        <div class="stickyTextImageWrapper">
+          <text class="stickyText">Last Appear:</text>
+          <image class="stickyImage" :src="appearImage"></image>
+        </div>
+        <div class="stickyTextImageWrapper">
+          <text class="stickyText">Last Disappear:</text>
+          <image class="stickyImage" :src="disappearImage"></image>
+        </div>
+      </div>
+      <div v-if="stickyHeaderType === 'scroll'" class="stickyWrapper">
+        <text class="stickyText">Content Offset:{{contentOffset}}</text>
+      </div>
+    </header>
+    <cell v-for="(item, index) in items" :key="item.src" class="cell">
+      <div class="item" @click="onItemclick(item.behaviour, index)" @appear="itemAppear(item.src)" @disappear="itemDisappear(item.src)">
+        <text v-if="item.name" class="itemName">{{item.name}}</text>
+        <image class="itemPhoto" :src="item.src"></image>
+        <text v-if="item.desc" class="itemDesc">{{item.desc}}</text>
+        <text v-if="item.behaviourName" class="itemClickBehaviour"> {{item.behaviourName}}</text>
+      </div>
+    </cell>
+    <header class="footer">
+      <text class="stickyText">Footer</text>
+    </header>
+    <div class="fixedItem" @click="scrollToTop">
+      <text class="fixedText">Top</text>
+    </div>
+  </waterfall>
+</template>
+
+<style>
+  .page {
+    background-color: #EFEFEF;
+  }
+  .refresh {
+    height: 128;
+    width: 750;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+  }
+  .refreshText {
+    color: #888888;
+    font-weight: bold;
+  }
+  .indicator {
+    color: #888888;
+    height: 40;
+    width: 40;
+    margin-right: 30;
+  }
+  .header {
+  }
+  .banner {
+    height: 377;
+    flex-direction: row;
+  }
+  .bannerInfo {
+    width:270;
+    align-items: center;
+    justify-content: center;
+  }
+  .avatar {
+    width: 148;
+    height: 108;
+    border-radius: 54;
+    border-width: 4;
+    border-color: #FFFFFF;
+    margin-bottom: 14;
+  }
+  .name {
+    font-weight: bold;
+    font-size:32;
+    color:#ffffff;
+    line-height:32;
+    text-align:center;
+    margin-bottom: 16;
+  }
+  .titleWrap {
+    width: 100;
+    height: 24;
+    margin-bottom: 10;
+    background-color: rgba(255,255,255,0.80);
+    border-radius: 12;
+    justify-content: center;
+    align-items: center;
+  }
+  .title {
+    font-size: 20;
+    color: #000000;
+  }
+  .bannerPhotoWrap {
+    width: 449;
+    height: 305;
+    background-color: #FFFFFF;
+    border-radius: 12;
+    margin-top: 35;
+    padding: 12;
+    flex-direction: row;
+    justify-content: space-between;
+    flex-wrap:wrap;
+  }
+  .bannerPhoto {
+    width: 137;
+    height: 137;
+    margin-bottom: 6;
+  }
+  .stickyHeader {
+    position: sticky;
+    height: 94;
+    flex-direction: row;
+    padding-bottom:6;
+  }
+  .stickyWrapper {
+    flex-direction: row;
+    background-color:#00cc99;
+    justify-content: center;
+    align-items: center;
+    flex:1;
+  }
+  .stickyTextImageWrapper {
+    flex:1;
+    justify-content: center;
+    align-items: center;
+    flex-direction: row;
+  }
+  .stickyText {
+    color: #FFFFFF;
+    font-weight: bold;
+    font-size:32;
+    margin-right: 12;
+  }
+  .stickyImage {
+    width: 64;
+    height: 64;
+    border-radius: 32;
+  }
+
+  .cell {
+    padding-top: 6;
+    padding-bottom: 6;
+  }
+  .item {
+    background-color: #FFFFFF;
+    align-items: center;
+  }
+  .itemName {
+    font-size:28;
+    color:#333333;
+    line-height:42;
+    text-align:left;
+    margin-top: 24;
+  }
+  .itemPhoto {
+    margin-top: 18;
+    width: 220;
+    height: 220;
+    margin-bottom: 18;
+  }
+  .itemDesc {
+    font-size:24;
+    margin:12;
+    color:#999999;
+    line-height:36;
+    text-align:left;
+  }
+  .itemClickBehaviour {
+    font-size:36;
+    color:#00cc99;
+    line-height:36;
+    text-align:center;
+    margin-top: 6;
+    margin-left: 24;
+    margin-right: 24;
+    margin-bottom: 30;
+  }
+  .footer {
+    height: 94;
+    justify-content: center;
+    align-items: center;
+    background-color: #00cc99;
+  }
+
+  .fixedItem {
+    position: fixed;
+    width:78;
+    height:78;
+    background-color:#00cc99;
+    right: 32;
+    bottom: 32;
+    border-radius: 39;
+    align-items: center;
+    justify-content: center;
+  }
+  .fixedText {
+    font-size: 36;
+    color: white;
+    line-height: 36;
+  }
+
+</style>
+
+<script>
+  export default {
+    data: function() {
+      const items = [
+        {
+          src:'https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg',
+          name: 'Thomas Carlyle',
+          desc:'Genius only means hard-working all one\'s life',
+          behaviourName: 'Change count',
+          behaviour: 'changeColumnCount'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
+          desc:'The man who has made up his mind to win will never say "impossible "',
+          behaviourName: 'Change gap',
+          behaviour: 'changeColumnGap'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1eNKuPFXXXXc_XpXXXXXXXXXX-370-370.jpg',
+          desc:'There is no such thing as a great talent without great will - power',
+          behaviourName: 'Show scrollbar',
+          behaviour: 'showScrollbar',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1DCh8PFXXXXX7aXXXXXXXXXXX-370-370.jpg',
+          name:'Addison',
+          desc:'Cease to struggle and you cease to live',
+          behaviourName: 'Change width',
+          behaviour: 'changeColumnWidth',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
+          desc:'A strong man will struggle with the storms of fate',
+          behaviourName: 'Listen appear',
+          behaviour: 'listenAppear',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
+          name:'Ruskin',
+          desc:'Living without an aim is like sailing without a compass',
+          behaviourName: 'Set scrollable',
+          behaviour: 'setScrollable',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'waterfall padding',
+          behaviour: 'setPadding',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
+          name:'Balzac',
+          desc:'There is no such thing as a great talent without great will - power',
+          behaviourName: 'listen scroll',
+          behaviour: 'listenScroll',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'Remove cell',
+          behaviour: 'removeCell',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'Move cell',
+          behaviour: 'moveCell',
+        }
+      ]
+
+      let repeatItems = [];
+      for (let i = 0; i < 3; i++) {
+        repeatItems.push(...items)
+      }
+
+      return {
+        padding: 0,
+        refreshing: false,
+        refreshText: '↓   pull to refresh...',
+        columnCount: 2,
+        columnGap: 12,
+        columnWidth: 'auto',
+        contentOffset: '0',
+        showHeader: true,
+        showScrollbar: false,
+        scrollable: true,
+        showStickyHeader: false,
+        appearImage: null,
+        disappearImage: null,
+        stickyHeaderType: 'none',
+        banner: {
+          photos: [
+            {src:'https://gw.alicdn.com/tps/TB1JyaCPFXXXXc9XXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1MwSFPFXXXXbdXXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1U8avPFXXXXaDXpXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB17Xh8PFXXXXbkaXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1cTmLPFXXXXXRXXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1oCefPFXXXXbVXVXXXXXXXXXX-140-140.jpg'}
+          ]
+        },
+        items: repeatItems
+      }
+    },
+
+    methods: {
+      recylerScroll: function(e) {
+        this.contentOffset = e.contentOffset.y
+      },
+      loadmore: function(e) {
+        console.log('receive loadmore event')
+        // this.$refs.waterfall.resetLoadmore()
+      },
+      showOrRemoveHeader: function() {
+        this.showHeader = !this.showHeader
+      },
+      onItemclick: function (behaviour, index) {
+        console.log(`click...${behaviour} at index ${index}`)
+        switch (behaviour) {
+          case 'changeColumnCount':
+            this.changeColumnCount()
+            break
+          case 'changeColumnGap':
+            this.changeColumnGap()
+            break
+          case 'changeColumnWidth':
+            this.changeColumnWidth()
+            break
+          case 'showScrollbar':
+            this.showOrHideScrollbar()
+            break
+          case 'listenAppear':
+            this.listenAppearAndDisappear()
+            break
+          case 'setScrollable':
+            this.setScrollable()
+            break
+          case 'setPadding':
+            this.setRecyclerPadding()
+            break
+          case 'listenScroll':
+            this.listenScrollEvent()
+            break
+          case 'removeCell':
+            this.removeCell(index)
+            break
+          case 'moveCell':
+            this.moveCell(index)
+            break
+        }
+      },
+
+      itemAppear: function(src) {
+        this.appearImage = src;
+      },
+
+      itemDisappear: function(src) {
+        this.disappearImage = src;
+      },
+
+      changeColumnCount: function() {
+        if (this.columnCount === 2) {
+          this.columnCount = 3
+        } else {
+          this.columnCount = 2
+        }
+      },
+
+      changeColumnGap: function() {
+        if (this.columnGap === 12) {
+          this.columnGap = 'normal'
+        } else {
+          this.columnGap = 12
+        }
+      },
+
+      changeColumnWidth: function() {
+        if (this.columnWidth === 'auto') {
+          this.columnWidth = 600
+        } else {
+          this.columnWidth = 'auto'
+        }
+      },
+
+      showOrHideScrollbar: function() {
+        this.showScrollbar = !this.showScrollbar
+      },
+
+      setScrollable: function() {
+        this.scrollable = !this.scrollable
+      },
+
+      listenAppearAndDisappear: function() {
+        this.stickyHeaderType = (this.stickyHeaderType === 'appear' ? 'none' : 'appear')
+      },
+
+      listenScrollEvent: function() {
+        this.stickyHeaderType = (this.stickyHeaderType === 'scroll' ? 'none' : 'scroll')
+      },
+
+      scrollToTop: function() {
+        weex.requireModule('dom').scrollToElement(this.$refs.header)
+      },
+
+      setRecyclerPadding: function() {
+        this.padding = (this.padding == 0 ? 12 : 0);
+      },
+
+      removeCell: function(index) {
+        this.items.splice(index, 1)
+      },
+
+      moveCell: function(index) {
+        if (index == 0) {
+          this.items.splice(this.items.length - 1, 0, this.items.splice(index, 1)[0]);
+        } else {
+          this.items.splice(0, 0, this.items.splice(index, 1)[0]);
+        }
+      },
+
+      onrefresh (event) {
+        this.refreshing = true
+        this.refreshText = "loading..."
+        setTimeout(() => {
+          this.refreshing = false
+          this.refreshText = '↓   pull to refresh...'
+        }, 2000)
+      },
+
+      onpullingdown (event) {
+        // console.log(`${event.pullingDistance}`)
+        if (event.pullingDistance < -64) {
+          this.refreshText = '↑   release to refresh...'
+        } else {
+          this.refreshText = '↓   pull to refresh...'
+        }
+      }
+    }
+  }
+</script>
diff --git a/examples/vue/components/web.vue b/examples/vue/components/web.vue
index ce1d623..47282cb 100644
--- a/examples/vue/components/web.vue
+++ b/examples/vue/components/web.vue
@@ -16,7 +16,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {
     width: 750;
     position: absolute;
diff --git a/examples/vue/iconfont.vue b/examples/vue/iconfont.vue
index 216fc93..7aae28a 100644
--- a/examples/vue/iconfont.vue
+++ b/examples/vue/iconfont.vue
@@ -7,7 +7,7 @@
   </div>
 
 </template>
-<style>
+<style scoped>
   .title1 {
     color: red;
     font-size: 36;
diff --git a/examples/vue/include/base-url.js b/examples/vue/include/base-url.js
index b6becf7..4f7ff74 100644
--- a/examples/vue/include/base-url.js
+++ b/examples/vue/include/base-url.js
@@ -1,5 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 exports.getBaseURL = function (vm) {
-  var bundleUrl = vm.$getConfig().bundleUrl;
+  var bundleUrl = weex.config.bundleUrl;
   var nativeBase;
   var isAndroidAssets = bundleUrl.indexOf('your_current_IP') >= 0 || bundleUrl.indexOf('file://assets/')>=0;
   var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
@@ -13,7 +31,7 @@
   }
   else {
     var host = 'localhost:12580';
-    var matches = /\/\/([^\/]+?)\//.exec(vm.$getConfig().bundleUrl);
+    var matches = /\/\/([^\/]+?)\//.exec(weex.config.bundleUrl);
     if (matches && matches.length >= 2) {
       host = matches[1];
     }
diff --git a/examples/vue/include/button.vue b/examples/vue/include/button.vue
index 63612df..7c9565a 100644
--- a/examples/vue/include/button.vue
+++ b/examples/vue/include/button.vue
@@ -15,7 +15,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .btn {
     margin-bottom: 0;
     align-items: center;
diff --git a/examples/vue/include/countdown.vue b/examples/vue/include/countdown.vue
index 4058ed2..b9b6002 100644
--- a/examples/vue/include/countdown.vue
+++ b/examples/vue/include/countdown.vue
@@ -6,7 +6,7 @@
 </div>
 </template>
 
-<style>
+<style scoped>
 .wrap {
   overflow: hidden;
 }
diff --git a/examples/vue/include/example-list-item.vue b/examples/vue/include/example-list-item.vue
index d746aa4..9c16204 100644
--- a/examples/vue/include/example-list-item.vue
+++ b/examples/vue/include/example-list-item.vue
@@ -4,7 +4,7 @@
   </list-item>
 </template>
 
-<style>
+<style scoped>
   .item-txt {
     font-size: 48px;
     color: #555;
diff --git a/examples/vue/include/example-list.vue b/examples/vue/include/example-list.vue
index baa61ea..d9a2a7e 100644
--- a/examples/vue/include/example-list.vue
+++ b/examples/vue/include/example-list.vue
@@ -1,6 +1,6 @@
 <template>
   <list>
-    <cell v-for="item in items" append="tree">
+    <cell v-for="(item, i) in items" :key="i" append="tree">
       <example-list-item :title="item.title" :url="item.url"></example-list-item>
     </cell>
   </list>
diff --git a/examples/vue/include/h1.vue b/examples/vue/include/h1.vue
index f061784..78c0191 100644
--- a/examples/vue/include/h1.vue
+++ b/examples/vue/include/h1.vue
@@ -2,7 +2,7 @@
   <text class="h1">{{value}}</text>
 </template>
 
-<style>
+<style scoped>
   .h1 {font-size: 64px; font-weight: bold;
     padding: 20px; margin-top: 20px; margin-bottom: 20px;
     background-color: #eee;}
diff --git a/examples/vue/include/h2.vue b/examples/vue/include/h2.vue
index 669a3f8..6362093 100644
--- a/examples/vue/include/h2.vue
+++ b/examples/vue/include/h2.vue
@@ -2,7 +2,7 @@
   <text class="h2">{{value}}</text>
 </template>
 
-<style>
+<style scoped>
   .h2 {font-size: 48px; font-weight: bold;
     padding: 20px; margin-top: 20px; margin-bottom: 20px;
     background-color: #eee;}
diff --git a/examples/vue/include/h3.vue b/examples/vue/include/h3.vue
index 108e311..338b340 100644
--- a/examples/vue/include/h3.vue
+++ b/examples/vue/include/h3.vue
@@ -2,7 +2,7 @@
   <text class="h3">{{value}}</text>
 </template>
 
-<style>
+<style scoped>
   .h3 {font-size: 36px; font-weight: bold;
     padding: 20px; margin-top: 20px; margin-bottom: 20px;
     background-color: #eee;}
diff --git a/examples/vue/include/hn.vue b/examples/vue/include/hn.vue
index 52c5742..39e18b6 100644
--- a/examples/vue/include/hn.vue
+++ b/examples/vue/include/hn.vue
@@ -13,7 +13,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .h1 {
     height: 110px;
     padding-top: 20px;
diff --git a/examples/vue/include/list-item.vue b/examples/vue/include/list-item.vue
index 9e62712..88a835e 100644
--- a/examples/vue/include/list-item.vue
+++ b/examples/vue/include/list-item.vue
@@ -31,7 +31,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .item {
     padding-top: 25px;
     padding-bottom: 25px;
diff --git a/examples/vue/include/marquee.vue b/examples/vue/include/marquee.vue
index db93cb0..eeb59de 100644
--- a/examples/vue/include/marquee.vue
+++ b/examples/vue/include/marquee.vue
@@ -11,7 +11,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrap {
     overflow: hidden;
     position: relative;
@@ -52,7 +52,7 @@
       },
       animation: function (cb) {
         var offset = -this.step * this.index;
-        animation.transition(this.$refs.anim.ref, {
+        animation.transition(this.$refs.anim, {
           styles: {
             transform: 'translateY(' + offset + 'px) translateZ(0)'
           },
diff --git a/examples/vue/include/navbar.vue b/examples/vue/include/navbar.vue
index 9e755f2..69bbe0b 100644
--- a/examples/vue/include/navbar.vue
+++ b/examples/vue/include/navbar.vue
@@ -34,7 +34,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .container {
     flex-direction: row; 
     position: fixed; 
diff --git a/examples/vue/include/navpage.vue b/examples/vue/include/navpage.vue
index 2fd6e49..c9ea887 100644
--- a/examples/vue/include/navpage.vue
+++ b/examples/vue/include/navpage.vue
@@ -21,7 +21,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {
     position: absolute; 
     top: 0; 
diff --git a/examples/vue/include/panel.vue b/examples/vue/include/panel.vue
index 13bbbe1..b0c151f 100644
--- a/examples/vue/include/panel.vue
+++ b/examples/vue/include/panel.vue
@@ -37,7 +37,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .panel {
     margin-bottom: 20px;
     background-color: #fff;
@@ -115,10 +115,10 @@
   }
 
   .panel-body {
-    /*padding-left: 12px;*/
-    /*padding-right: 12px;*/
-    /*padding-top: 20px;*/
-    /*padding-bottom: 20px;*/
+    padding-left: 12px;
+    padding-right: 12px;
+    padding-top: 20px;
+    padding-bottom: 20px;
   }
 
   .panel-body-default {
diff --git a/examples/vue/include/slider-item.vue b/examples/vue/include/slider-item.vue
index d312850..94b6828 100644
--- a/examples/vue/include/slider-item.vue
+++ b/examples/vue/include/slider-item.vue
@@ -11,7 +11,7 @@
   };
 </script>
 
-<style>
+<style scoped>
   .slider-item {
     width: 348px;
     height: 400px;
diff --git a/examples/vue/include/slider-page.vue b/examples/vue/include/slider-page.vue
index fd98aa0..7df0289 100644
--- a/examples/vue/include/slider-page.vue
+++ b/examples/vue/include/slider-page.vue
@@ -1,10 +1,10 @@
 <template>
   <div class="slider-page">
-    <slider-item v-for="v in items" :image="v.image" :link="v.link"></slider-item>
+    <slider-item v-for="(v , i) in items" :image="v.image" :key="i" :link="v.link"></slider-item>
   </div>
 </template>
 
-<style>
+<style scoped>
   .slider-page {
     flex-direction: row;
     justify-content: space-between;
@@ -24,4 +24,3 @@
     }
   }
 </script>
-
diff --git a/examples/vue/include/tabbar.vue b/examples/vue/include/tabbar.vue
index fbaa29f..b5087dd 100644
--- a/examples/vue/include/tabbar.vue
+++ b/examples/vue/include/tabbar.vue
@@ -1,8 +1,9 @@
 <template>
   <div class="wrapper">
     <embed
-      v-for="item in tabItems"
+      v-for="(item , i) in tabItems"
       :src="item.src"
+      :key="i"
       type="weex"
       :style="{ visibility: item.visibility }"
       class="content"
@@ -10,6 +11,7 @@
     <div class="tabbar" append="tree">
       <tabitem
         v-for="item in tabItems"
+        :key="item.index"
         :index="item.index"
         :icon="item.icon"
         :title="item.title"
@@ -20,7 +22,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {
     width: 750;
     position: absolute;
diff --git a/examples/vue/include/tabitem.vue b/examples/vue/include/tabitem.vue
index ee41ced..801ca0b 100644
--- a/examples/vue/include/tabitem.vue
+++ b/examples/vue/include/tabitem.vue
@@ -15,7 +15,7 @@
   </div>  
 </template>
 
-<style>
+<style scoped>
   .container {
     flex: 1; 
     flex-direction: column; 
diff --git a/examples/vue/include/tip.vue b/examples/vue/include/tip.vue
index 11f74b4..9e47bf3 100644
--- a/examples/vue/include/tip.vue
+++ b/examples/vue/include/tip.vue
@@ -14,7 +14,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .tip {
     padding-left: 36px;
     padding-right: 36px;
diff --git a/examples/vue/include/wxc-list-item.vue b/examples/vue/include/wxc-list-item.vue
index 7bf068e..fd988b4 100644
--- a/examples/vue/include/wxc-list-item.vue
+++ b/examples/vue/include/wxc-list-item.vue
@@ -32,7 +32,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .item {
     padding-top: 25px;
     padding-bottom: 25px;
diff --git a/examples/vue/index.vue b/examples/vue/index.vue
index 80af3b8..4d263cd 100644
--- a/examples/vue/index.vue
+++ b/examples/vue/index.vue
@@ -6,8 +6,9 @@
   module.exports = {
     data: function () {
       var root = typeof window === 'object' ? 'vue-web/vue' : 'vue'
+
       return {
-        items: [
+        items: [ 
           // common
           {name: root + '/syntax/hello-world', title: 'Hello World'},
           {name: root + '/style/index', title: 'Common Style'},
@@ -19,6 +20,7 @@
           {name: root + '/components/input', title: 'Input'},
           {name: root + '/components/scroller', title: 'Scroller'},
           {name: root + '/components/list', title: 'List'},
+          {name: root + '/components/waterfall', title: 'Waterfall'},
           {name: root + '/components/slider', title: 'Slider'},
           {name: root + '/components/a', title: 'A'},
           {name: root + '/components/video', title: 'Video'},
@@ -36,17 +38,28 @@
           // {name: 'module/clipboard', title: 'Clipboard'}, // 0.8 , developing
 
           // showcase
+          {name: root + '/showcase/boxshadow', title: 'boxshadow'},
           {name: root + '/showcase/progress', title: 'Progress Bar'},
           {name: root + '/showcase/itemlist', title: 'List (Advanced)'},
           {name: root + '/showcase/calculator', title: 'Calculator'},
           // {name: root + '/showcase/minesweeper', title: 'Minesweeper'},
           // {name: root + '/showcase/ui', title: 'UI Gallery'},
           // {name: root + '/showcase/dropdown/dropdown-demo', title: 'Dropdown'}
+
+          // market
+          {name: root + '/market/gcanvas', title: 'Gcanvas'}
         ]
       }
     },
     components: {
       exampleList: require('./include/example-list.vue')
+    },
+    created: function() {
+      let root = typeof window === 'object' ? 'vue-web/vue' : 'vue'
+      let platform = this.$getConfig().env.platform.toLowerCase()
+      if (platform === 'ios') {
+        this.items.push({name: root + '/showcase/compositing', title: 'Compositing'})
+      }
     }
   }
 </script>
diff --git a/examples/vue/market/gcanvas.vue b/examples/vue/market/gcanvas.vue
new file mode 100644
index 0000000..626ece1
--- /dev/null
+++ b/examples/vue/market/gcanvas.vue
@@ -0,0 +1,40 @@
+<template>
+  <div ref="test">
+    <gcanvas ref="canvas_holder" style="width:750;height:750;"></gcanvas>
+  </div>
+</template>
+<script>
+  //	var gcanvas = weex.requireModule('weex-gcanvas');
+
+  var gcanvas=require('weex-gcanvas');
+
+
+  module.exports = {
+
+    created: function () {
+      console.log('created gcanvas');
+      gcanvas.disable();
+    },
+    mounted: function () {
+      var ref = this.$refs.canvas_holder.ref;
+      gcanvas.start(ref, function () {
+        var ctx = gcanvas.getContext('2d');
+
+        ctx.fillStyle = 'red';
+        ctx.fillRect(0, 0, 100, 100);
+
+        ctx.fillStyle = 'black';
+        ctx.fillRect(100, 100, 100, 100);
+        ctx.fillRect(25, 210, 700, 5);
+
+        ctx.arc(450, 200, 100, 0, Math.PI * 2, true);
+        ctx.fill();
+
+        var img = 'https://img.alicdn.com/tps/TB1TFNdKVXXXXbeaXXXXXXXXXXX-210-330.png';
+        ctx.drawImage(img, 100, 200, 210, 330);
+        //ctx.drawImage(img, 0,0,105,165, 100, 200, 210, 330);
+        ctx.render();
+      });
+    }
+  };
+</script>
\ No newline at end of file
diff --git a/examples/vue/modules/stream.vue b/examples/vue/modules/stream.vue
index 9038844..0578ce7 100644
--- a/examples/vue/modules/stream.vue
+++ b/examples/vue/modules/stream.vue
@@ -22,7 +22,7 @@
       <panel title="method = PATCH">
         <text>{{patchResult}}</text>
       </panel>
-    </wxc-panel>
+    </panel>
   </scroller>
 </template>
 
diff --git a/examples/vue/showcase/boxshadow.vue b/examples/vue/showcase/boxshadow.vue
new file mode 100644
index 0000000..d656b23
--- /dev/null
+++ b/examples/vue/showcase/boxshadow.vue
@@ -0,0 +1,39 @@
+
+<template>
+    <div class="wrapper">
+        <div style="width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px rgb(255, 69, 0);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow: 20px  10px 5px rgba(255, 69, 0, 0.8);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgba(255, 69, 0, 0.8);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:inset 20px  10px 5px rgb(255, 69, 0);">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px black;">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+        <div style="margin-top: 80px;width:400px; height:60px;background-color: #FFE4C4; box-shadow:20px  10px 5px #008B00;">
+            <text class="title" style="text-align: center">Hello {{target}}</text>
+        </div>
+    </div>
+</template>
+
+<style scoped>
+    .wrapper {align-items: center; margin-top: 120px;}
+    .title {font-size: 48px;}
+</style>
+
+<script>
+    module.exports = {
+        data: function () {
+            return {
+                logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+                target: 'World'
+            };
+        }
+    };
+</script>
diff --git a/examples/vue/showcase/calculator.vue b/examples/vue/showcase/calculator.vue
index d85062e..d945077 100644
--- a/examples/vue/showcase/calculator.vue
+++ b/examples/vue/showcase/calculator.vue
@@ -28,7 +28,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .row {
     flex-direction: row;
   }
diff --git a/examples/vue/showcase/compositing.vue b/examples/vue/showcase/compositing.vue
new file mode 100644
index 0000000..58e238f
--- /dev/null
+++ b/examples/vue/showcase/compositing.vue
@@ -0,0 +1,89 @@
+
+<template>
+  <div class="wrapper" @click="update" >
+    <div class="item" compositing=true>
+      <div class="itemWrapper">
+        <div class="nameWrapper">
+          <text class="itemName">Thomas Carlyle</text>
+        </div>
+        <image class="itemPhoto" src="https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg"></image>
+        <div class="descWrapper">
+          <text class="itemDesc">Genius only means hard-working all one\'s life</text>
+        </div>
+      </div>
+    </div>
+
+    <div class="item" compositing=false>
+      <div class="itemWrapper">
+        <div class="nameWrapper">
+          <text class="itemName">Thomas Carlyle</text>
+        </div>
+        <image class="itemPhoto" src="https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg"></image>
+        <div class="descWrapper">
+          <text class="itemDesc">Genius only means hard-working all one\'s life</text>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style>
+  .wrapper {
+    align-items: center; 
+    opacity: 0.8;
+  }
+  .itemWrapper {
+    flex:1;
+    border-top-right-radius: 80;
+    border-bottom-right-radius: 80;
+    border-top-width: 10;
+    border-top-color: red;
+    border-style: dashed;
+    align-items: center;
+    background-color: white;
+  }
+  .nameWrapper {
+    background-color:rgba(255,0,0,0.5);
+    border-radius: 30;
+    overflow: visible;
+    border-color: black;
+    border-width: 10;
+  }
+  .item {
+    margin-top: 120px; 
+    background-color: #CCCCCC;
+    align-items: center;
+  }
+  .itemName {
+    font-size:28;
+    color:#333333;
+    line-height:42;
+    text-align:left;
+    margin-top: 24;
+  }
+  .itemPhoto {
+    margin-top: 18;
+    width: 220;
+    height: 220;
+    margin-bottom: 18;
+    border-radius: 30;
+    overflow: hidden;
+    background-color: blue;
+  }
+  .itemDesc {
+    font-size:24;
+    margin:12;
+    color:#999999;
+    line-height:36;
+    text-align:left;
+  }
+</style>
+
+<script>
+  module.exports = {
+    data: {
+    },
+    methods: {
+    }
+  }
+</script>
diff --git a/examples/vue/showcase/gesture.vue b/examples/vue/showcase/gesture.vue
new file mode 100644
index 0000000..75759f3
--- /dev/null
+++ b/examples/vue/showcase/gesture.vue
@@ -0,0 +1,57 @@
+<template>
+  <div>
+    <div class="ct"
+      @longpress="handlePress"
+      @swipe="handleSwipe"
+      @panstart="handlePanStart"
+      @panmove="handlePanMove"
+      @panend="handlePanEnd"
+      :style="{ top: top, left: left }">
+        <text>{{text}}</text>
+    </div>
+  </div>
+</template>
+
+<style scoped>
+.ct {
+  position: absolute;
+  width: 750px;
+  height: 1000px;
+  background-color: #f7f7f7;
+}
+</style>
+
+<script>
+  module.exports = {
+    data: function () {
+      return {
+        text: 'no press.',
+        top: '0px',
+        left: '0px',
+        flag: false,
+      }
+    },
+    methods: {
+      handlePress: function(e) {
+        this.text = '->longpress(' + e.touch.pageX + ',' + e.touch.pageY + ')id:'+ e.touch.identifier
+      },
+      handleSwipe: function(e) {
+        this.text += '->swipe(' + e.touch.pageX + ',' + e.touch.pageY + ')id:'+ e.touch.identifier
+      },
+      handlePanStart: function(e) {
+        this.flag = false
+        this.text = '->panstart(' + e.touch.pageX + ',' + e.touch.pageY + ')id:'+ e.touch.identifier
+      },
+      handlePanMove: function(e) {
+        if (this.flag) {
+          return
+        }
+        this.flag = true
+        this.text += '->panmove(' + e.touch.pageX + ',' + e.touch.pageY + ')id:'+ e.touch.identifier
+      },
+      handlePanEnd: function(e) {
+        this.text += '->panend(' + e.touch.pageX + ',' + e.touch.pageY + ')id:'+ e.touch.identifier
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/examples/vue/showcase/include/banners.vue b/examples/vue/showcase/include/banners.vue
index 9be9a6b..911c54c 100644
--- a/examples/vue/showcase/include/banners.vue
+++ b/examples/vue/showcase/include/banners.vue
@@ -1,12 +1,12 @@
 <template>
   <div>
     <div v-if="direction==='row'" style="flex-direction:row">
-      <div v-for="(i,item) in ds" :style="{ width: width, height: height, marginLeft: (i % ds.length ? space : 0) }">
+      <div v-for="(item,i) in ds" :key="i" :style="{ width: width, height: height, marginLeft: (i % ds.length ? space : 0) }">
         <banner :width="width" :height="height" :src="item.img" :href="item.url"></banner>
       </div>
     </div>
     <div v-if="direction==='column'">
-      <div v-for="(i,item) in ds" :style="{ width: width, height: height, marginTop: (i % ds.length ? space : 0) }">
+      <div v-for="(item,i) in ds" :key="i" :style="{ width: width, height: height, marginTop: (i % ds.length ? space : 0) }">
         <banner :width="width" :height="height" :src="item.img" :href="item.url"></banner>
       </div>
     </div>
diff --git a/examples/vue/showcase/include/brand.vue b/examples/vue/showcase/include/brand.vue
index 0f843d5..f884e48 100644
--- a/examples/vue/showcase/include/brand.vue
+++ b/examples/vue/showcase/include/brand.vue
@@ -6,7 +6,7 @@
     </div>
   </div>
 </template>
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/category.vue b/examples/vue/showcase/include/category.vue
index a4c61ba..4f16772 100644
--- a/examples/vue/showcase/include/category.vue
+++ b/examples/vue/showcase/include/category.vue
@@ -2,21 +2,21 @@
   <div>
     <image v-if="ds.floorTitle" class="title" :src="ds.floorTitle"></image>
     <div class="item-container">
-      <div v-for="(i,item) in items" :style="{ width: 750, paddingBottom: 14, backgroundColor: item.colour }">
+      <div v-for="(item,i) in items" :key="i" :style="{ width: 750, paddingBottom: 14, backgroundColor: item.colour }">
         <div>
           <banner :width="NUMBER_750" :height="NUMBER_237"
             :src="i % 2 === 0 ? item.leftBannerImg : item.rightBannerImg"
             :href="item.bannerUrl"></banner>
         </div>
         <div class="shop-list">
-          <div v-for="shop in item.shopList" class="shop-img-container">
+          <div v-for="(i, shop) in item.shopList" :key="i" class="shop-img-container">
             <banner :width="NUMBER_186" :height="NUMBER_208" :src="shop.picUrl" :href="shop.shopUrl"></banner>
           </div>
         </div>
       </div>
     </div>
     <div class="sub-item-container" :style="{ height: Math.round(subItems.length / 3) * (241 + 3) }">
-      <div v-for="(i,item) in subItems" class="sub-item" :style="{top: getSubItemTop(i), left: getSubItemLeft(i) }">
+      <div v-for="(item,i) in subItems" :key="i" class="sub-item" :style="{top: getSubItemTop(i), left: getSubItemLeft(i) }">
         <image class="sub-item-bg" :src="subItemBg"></image>
         <div class="sub-item-img">
           <banner :width="NUMBER_248" :height="NUMBER_155"
@@ -32,7 +32,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/coupon.vue b/examples/vue/showcase/include/coupon.vue
index 50c9571..268f36c 100644
--- a/examples/vue/showcase/include/coupon.vue
+++ b/examples/vue/showcase/include/coupon.vue
@@ -10,7 +10,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title{
     width:750;
     height:100;
diff --git a/examples/vue/showcase/include/goods.vue b/examples/vue/showcase/include/goods.vue
index 2881997..861d5ae 100644
--- a/examples/vue/showcase/include/goods.vue
+++ b/examples/vue/showcase/include/goods.vue
@@ -2,7 +2,7 @@
   <div v-if="!ds.isHide">
     <image v-if="ds.floorTitle" class="title" :src="ds.floorTitle"></image>
     <slider class="slider" show-indicators="true" auto-play="true" interval="3000">
-      <div class="pannel" v-for="item in ds.bannerItems">
+      <div class="pannel" v-for="(item,i) in ds.bannerItems" :key="i" >
         <div>
           <banner style="margin-bottom:4" :width="NUMBER_251" :height="NUMBER_292" :src="item.img1" :href="item.url1"></banner>
           <banner :width="NUMBER_251" :height="NUMBER_292" :src="item.img2" :href="item.url2"></banner>
@@ -21,7 +21,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/headlines.vue b/examples/vue/showcase/include/headlines.vue
index 8a0a724..d76b1fd 100644
--- a/examples/vue/showcase/include/headlines.vue
+++ b/examples/vue/showcase/include/headlines.vue
@@ -15,7 +15,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .banner {
     width: 750;
     height: 782;
diff --git a/examples/vue/showcase/include/match.vue b/examples/vue/showcase/include/match.vue
index cacc695..ab851fe 100644
--- a/examples/vue/showcase/include/match.vue
+++ b/examples/vue/showcase/include/match.vue
@@ -4,7 +4,7 @@
     <div class="tm-banner" v-if="ds.isShowTmSpecBanner && ds.tmSpecBanner">
       <banner :width="NUMBER_750" :height="NUMBER_200" :src="ds.tmSpecBanner.img" :href="ds.tmSpecBanner.url"></banner>
     </div>
-    <div v-for="item in ds.bannerItems" :style="{ flexDirection: 'row', marginBottom: NUMBER_4 }">
+    <div v-for="(item,i) in ds.bannerItems" :key="i" :style="{ flexDirection: 'row', marginBottom: NUMBER_4 }">
       <div :style="{ marginRight: NUMBER_4 }">
         <banner :width="NUMBER_373" :height="NUMBER_240" :src="item.leftImg" :href="item.leftUrl"></banner>
       </div>
@@ -15,7 +15,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/resource.vue b/examples/vue/showcase/include/resource.vue
index b1d1905..7c935c6 100644
--- a/examples/vue/showcase/include/resource.vue
+++ b/examples/vue/showcase/include/resource.vue
@@ -7,7 +7,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/scene.vue b/examples/vue/showcase/include/scene.vue
index cd2848d..7c7db25 100644
--- a/examples/vue/showcase/include/scene.vue
+++ b/examples/vue/showcase/include/scene.vue
@@ -2,7 +2,7 @@
   <div>
     <image v-if="ds.floorTitle" class="title" :src="ds.floorTitle"></image>
     <div class="small-item-container" :style="{ height: Math.round(smallItems.length/2)*234 }">
-      <div v-for="(i,item) in smallItems" class="small-item" :style="{ top: getItemTop(i), left: getItemLeft(i) }">
+      <div v-for="(item,i) in smallItems" :key="i" class="small-item" :style="{ top: getItemTop(i), left: getItemLeft(i) }">
         <div>
           <image class="small-item-bg" :src="smallItemBg"></image>
         </div>
@@ -17,7 +17,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {
     width: 750;
     height: 100;
diff --git a/examples/vue/showcase/include/util.js b/examples/vue/showcase/include/util.js
index 36ef13a..c56d0a8 100644
--- a/examples/vue/showcase/include/util.js
+++ b/examples/vue/showcase/include/util.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 function randomInt (min, max) {
     return Math.round(Math.random() * (max - min)) + min;
 },
diff --git a/examples/vue/showcase/itemlist.vue b/examples/vue/showcase/itemlist.vue
index dd239d1..02fb33a 100644
--- a/examples/vue/showcase/itemlist.vue
+++ b/examples/vue/showcase/itemlist.vue
@@ -5,130 +5,130 @@
         <div class="shopHeader" style="flex-direction:row;">
           <div style="flex:2;flex-direction:row;">
             <div>
-              <image style="width:60;height:60;" :src="item.PersonPhoto"></image>
+              <image class="test" :src="item.PersonPhoto"></image>
             </div>
-            <div style="flex-direction:column;margin-left:5;">
-              <div style="margin-top:5;">
-                <text style="font-size:20;">{{item.PersonName}}</text>
+            <div style="flex-direction:column;margin-left:5px;">
+              <div style="margin-top:5px;">
+                <text style="font-size:20px;">{{item.PersonName}}</text>
               </div>
-              <div style="margin-top:5;">
+              <div style="margin-top:5px;">
                 <text style="font-size:20;color:#cccccc;">{{item.PersonVisitTime}}</text>
               </div>
             </div>
           </div>
           <div style="flex:5;flex-direction:row;">
-            <div style="flex-direction:row;margin-left:10;margin-top:10;">
+            <div style="flex-direction:row;margin-left:10px;margin-top:10px;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://img.alicdn.com/tps/i4/TB1zkDeIFXXXXXrXVXX07tlTXXX-200-200.png_88x88xz.jpg"></image>
               </div>
               <div>
-                <text style="font-size:20;">Hope</text>
+                <text style="font-size:20px;">Hope</text>
               </div>
             </div>
-            <div style="position:absolute;left:90;top:10;flex-direction:row;">
+            <div style="position:absolute;left:90px;top:10px;flex-direction:row;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://img.alicdn.com/tps/i2/TB1hRb1IXXXXXX3XVXXXQaP.pXX-87-87.jpeg"></image>
               </div>
               <div>
-                <text style="font-size:20;">Mem</text>
+                <text style="font-size:20px;">Mem</text>
               </div>
             </div>
-            <div style="position:absolute;left:170;top:10;flex-direction:row;">
+            <div style="position:absolute;left:170px;top:10px;flex-direction:row;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://img.alicdn.com/tps/i3/TB1DGkJJFXXXXaZXFXX07tlTXXX-200-200.png"></image>
               </div>
               <div>
-                <text style="font-size:20;">auth</text>
+                <text style="font-size:20px;">auth</text>
               </div>
             </div>
-            <div style="position:absolute;left:250;top:10;flex-direction:row;">
+            <div style="position:absolute;left:250px;top:10px;flex-direction:row;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"></image>
               </div>
               <div>
-                <text style="font-size:20;">Friend</text>
+                <text style="font-size:20px;">Friend</text>
               </div>
             </div>
-            <div style="position:absolute;left:330;top:10;flex-direction:row;">
+            <div style="position:absolute;left:330px;top:10px;flex-direction:row;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"></image>
               </div>
               <div>
-                <text style="font-size:20;">issue</text>
+                <text style="font-size:20px;">issue</text>
               </div>
             </div>
-            <div style="position:absolute;left:410;top:10;flex-direction:row;">
+            <div style="position:absolute;left:410px;top:10px;flex-direction:row;">
               <div>
-                <image style="width:20;height:20;"
+                <image style="width:20px;height:20px;"
                   src="https://gtms02.alicdn.com/tps/i2/TB11ZZfIVXXXXbMXFXXEDhGGXXX-32-32.png"></image>
               </div>
               <div>
-                <text style="font-size:20;">super</text>
+                <text style="font-size:20px;">super</text>
               </div>
             </div>
           </div>
         </div>
         <div class="shopBody" style="flex-direction:column;">
-          <div class="descDiv" style="margin-top:10;margin-left:10;">
-            <text class="shopDesc" style="font-size:25;">{{item.shopDesc}}</text>
+          <div class="descDiv" style="margin-top:10px;margin-left:10px;">
+            <text class="shopDesc" style="font-size:25px;">{{item.shopDesc}}</text>
           </div>
           <div style="flex-direction:row;">
-            <div class="imgDiv" style="flex:1;flex-direction:column;margin:10;" v-for="img in item.shopImgList">
+            <div class="imgDiv" style="flex:1;height:300px;flex-direction:column;margin:10px;" v-for="img in item.shopImgList">
               <div>
                 <image class="shopImg" :style="{ width: img.shopImgWidth, height: img.shopImgHeight }" :src="img.shopImg"></image>
               </div>
-              <div style="flex:1;margin-top:10;flex-direction:row;">
+              <div style="flex:1;margin-top:10px;flex-direction:row;">
                 <div style="flex:1;justify-content:center;flex-direction:row;">
                   <div>
-                    <image style="width:20;height:20;"
+                    <image style="width:20px;height:20px;"
                            src="https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"></image>
                   </div>
-                  <div style="margin-left:5;">
-                    <text style="font-size:20;text-align:center;">Up</text>
+                  <div style="margin-left:5px;">
+                    <text style="font-size:20px;text-align:center;">Up</text>
                   </div>
                 </div>
                 <div style="flex:1;justify-content:center;flex-direction:row;">
                   <div>
-                    <image style="width:20;height:20;"
+                    <image style="width:20px;height:20px;"
                            src="https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"></image>
                   </div>
-                  <div style="margin-left:5;">
-                    <text style="font-size:20;text-align:center;">down</text>
+                  <div style="margin-left:5px;">
+                    <text style="font-size:20px;text-align:center;">down</text>
                   </div>
                 </div>
               </div>
             </div>
           </div>
         </div>
-        <div class="shopFooter" style="flex-direction:row;margin-top:10;margin-left:10;justify-content:flex-end;">
-          <div style="margin-right:5;">
+        <div class="shopFooter" style="flex-direction:row;margin-top:10px;margin-left:10px;justify-content:flex-end;">
+          <div style="margin-right:5px;">
             <image class="shopLikeImg smallImg" :src="item.shopLikeImg"></image>
           </div>
-          <div style="margin-right:15;">
-            <text class="shopLikeText" style="font-size:20;">{{item.shopLikeText}}</text>
+          <div style="margin-right:15px;">
+            <text class="shopLikeText" style="font-size:20px;">{{item.shopLikeText}}</text>
           </div>
-          <div style="margin-right:5;">
+          <div style="margin-right:5px;">
             <image class="shopCommentImg smallImg" :src="item.shopCommentImg"></image>
           </div>
-          <div style="margin-right:15;">
-            <text class="shopCommentText" style="font-size:20;">{{item.shopCommentText}}</text>
+          <div style="margin-right:15px;">
+            <text class="shopCommentText" style="font-size:20px;">{{item.shopCommentText}}</text>
           </div>
-          <div style="margin-right:5;">
+          <div style="margin-right:5px;">
             <image class="shopLookImg smallImg" :src="item.shopLookImg"></image>
           </div>
-          <div style="margin-right:15;">
-            <text class="shopLookText" style="font-size:20;">{{item.shopLookText}}</text>
+          <div style="margin-right:15px;">
+            <text class="shopLookText" style="font-size:20px;">{{item.shopLookText}}</text>
           </div>
-          <div style="margin-right:5;">
+          <div style="margin-right:5px;">
             <image class="shareImg smallImg" :src="item.shareImg"></image>
           </div>
-          <div style="margin-right:20;">
-            <text class="shareText" style="font-size:20;">{{item.shareText}}</text>
+          <div style="margin-right:20px;">
+            <text class="shareText" style="font-size:20px;">{{item.shareText}}</text>
           </div>
         </div>
       </div>
@@ -136,7 +136,7 @@
   </list>
 </template>
 
-<style>
+<style scoped>
   .flexRow {
     flex-direction: row;
   }
@@ -162,57 +162,62 @@
   }
 
   .shopImg {
-    width: 220;
-    height: 220;
+    width: 220px;
+    height: 220px;
   }
 
   .list {
     flex-direction: column;
     overflow: hidden;
-    width: 750;
-    height: 1200;
+    width: 750px;
+    height: 1200px;
     background-color: #dddddd;
   }
 
   .cell {
     background-color: #dddddd;
     flex-direction: column;
-    width: 750;
+    width: 750px;
+  }
+
+  .test {
+    width:60px;
+    height:60px;
   }
 
   .shopDiv {
     flex-direction: column;
     background-color: #ffffff;
-    margin: 5;
-    padding: 10;
-    border-width: 1;
+    margin: 5px;
+    padding: 10px;
+    border-width: 1px;
     border-color: #cccccc;
     overflow: visible;
   }
 
   .shopRowList {
     flex-direction: column;
-    border-width: 1;
+    border-width: 1px;
     border-color: #cccccc;
     overflow: visible;
-    margin: 5;
-    padding: 10;
+    margin: 5px;
+    padding: 10px;
     background-color: #ffffff;
   }
 
   .shopHeader {
     flex-direction: row;
-    width: 720;
+    width: 720px;
   }
 
   .shopFooter {
     flex-direction: row;
-    width: 720;
+    width: 720px;
   }
 
   .smallImg {
-    width: 20;
-    height: 20;
+    width: 20px;
+    height: 20px;
   }
 </style>
 
@@ -230,16 +235,16 @@
             PersonVisitTime: 'today',
             shopDesc: 'Genius only means hard-working all one\'s life',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1rtOnHpXXXXXLaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB15KrfFVXXXXXJXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1t5YBGVXXXXXcaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -260,16 +265,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'The man who has made up his mind to win will never say "impossible "',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/imgextra/i1/2655929383/TB2.qITjpXXXXcIXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd3.alicdn.com/imgextra/i3/2655929383/TB2eWwZjpXXXXbHXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/2655929383/TB2tgQWjpXXXXbZXXXXXXXXXXXX_!!2655929383.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -290,16 +295,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'There is no such thing as a great talent without great will - power',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/imgextra/i1/TB1AFz9LXXXXXbrXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2is2njXXXXXatXpXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/2557954751/TB2PNYGjXXXXXbXXXXXXXXXXXXX_!!2557954751.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -320,16 +325,16 @@
             PersonVisitTime: '3 day ago',
             shopDesc: 'Cease to struggle and you cease to live',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2zbwdfXXXXXa4XpXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2L7ZAfXXXXXXOXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/69426324/TB2p9wufXXXXXbiXXXXXXXXXXXX_!!69426324.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -350,16 +355,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'A strong man will struggle with the storms of fate',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1MQ8_KVXXXXaLXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/53218032/TB2bGSqiXXXXXXyXpXXXXXXXXXX_!!53218032.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB1kP2zKFXXXXbIXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -380,16 +385,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'Living without an aim is like sailing without a compass',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB11yFnHXXXXXakaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/32720628/TB2CRJUcXXXXXXwXpXXXXXXXXXX_!!32720628.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/bao/uploaded/i2/TB17LUzHXXXXXcEaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -410,16 +415,16 @@
             PersonVisitTime: 'today',
             shopDesc: 'Live a noble and honest life. Reviving past times in your old age will help you to enjoy your life again',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/bao/uploaded/i4/TB1hvNoJXXXXXaMaXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/2058567235/TB2V8iygFXXXXaRXpXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/2058567235/TB2im1QgFXXXXX8XXXXXXXXXXXX_!!2058567235.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -440,16 +445,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'Behind every successful man there\'s a lot u unsuccessful years',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB18BZ2KFXXXXb8XFXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/imgextra/i1/2775383848/TB2r012jVXXXXXHXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd3.alicdn.com/imgextra/i3/2775383848/TB2iI9VjVXXXXaoXpXXXXXXXXXX_!!2775383848.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -470,16 +475,16 @@
             PersonVisitTime: 'today',
             shopDesc: 'Enrich your life today,. yesterday is history.tomorrow is mystery',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1JB.rLpXXXXXLXXXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd4.alicdn.com/imgextra/i4/2702739128/TB2JdvmjVXXXXXjXXXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd2.alicdn.com/imgextra/i2/2702739128/TB2A.e6jVXXXXXGXpXXXXXXXXXX_!!2702739128.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
@@ -500,16 +505,16 @@
             PersonVisitTime: 'yesterday',
             shopDesc: 'The secret of success is constancy to purpose',
             shopImgList: [{
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd3.alicdn.com/bao/uploaded/i3/TB17zXOGXXXXXbEXVXXXXXXXXXX_!!0-item_pic.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd1.alicdn.com/imgextra/i1/2265445951/TB22ACTbFXXXXXBXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
             }, {
-              shopImgWidth: 220,
-              shopImgHeight: 220,
+              shopImgWidth: '220px',
+              shopImgHeight: '220px',
               shopImg: 'https://gd3.alicdn.com/imgextra/i3/2265445951/TB2oXqUbFXXXXXIXXXXXXXXXXXX_!!2265445951.jpg_220x220.jpg'
             }],
             shopLikeImg: 'https://img.alicdn.com/tps/i1/TB1jTxXIVXXXXb8XXXX07tlTXXX-200-200.png_88x88xz.jpg',
diff --git a/examples/vue/showcase/new-fashion.vue b/examples/vue/showcase/new-fashion.vue
index 503a40c..03b83df 100644
--- a/examples/vue/showcase/new-fashion.vue
+++ b/examples/vue/showcase/new-fashion.vue
@@ -19,7 +19,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .content {
     color: #353535;
     background-color: #666;
diff --git a/examples/vue/style/index.vue b/examples/vue/style/index.vue
index dafa348..abee8e7 100644
--- a/examples/vue/style/index.vue
+++ b/examples/vue/style/index.vue
@@ -1,5 +1,5 @@
 <template>
-  <scroller>
+  <scroller style="overflow-x:hidden;">
     <style-box></style-box>
     <style-flex></style-flex>
     <panel title="opacity" type="primary">
@@ -22,7 +22,7 @@
   </scroller>
 </template>
 
-<style>
+<style scoped>
   .bg-item {
     width: 690px;
     margin-bottom: 10px;
diff --git a/examples/vue/style/style-box.vue b/examples/vue/style/style-box.vue
index ac2e290..76d7195 100644
--- a/examples/vue/style/style-box.vue
+++ b/examples/vue/style/style-box.vue
@@ -40,7 +40,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .box {
     background-color: #f5f5f5;
     width: 260px;
diff --git a/examples/vue/style/style-flex.vue b/examples/vue/style/style-flex.vue
index fc8b7b1..246014d 100644
--- a/examples/vue/style/style-flex.vue
+++ b/examples/vue/style/style-flex.vue
@@ -101,7 +101,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .row {
     flex-direction: row;
     margin-bottom: 10px;
diff --git a/examples/vue/style/style-item.vue b/examples/vue/style/style-item.vue
index 6029ad4..d53e243 100644
--- a/examples/vue/style/style-item.vue
+++ b/examples/vue/style/style-item.vue
@@ -19,7 +19,7 @@
   }
 </script>
 
-<style>
+<style scoped>
   .item {
     margin-right: 10px;
     /*margin-bottom: 10px;*/
diff --git a/examples/vue/syntax/hello-world-3.vue b/examples/vue/syntax/hello-world-3.vue
index 1a7e16e..78b05ce 100644
--- a/examples/vue/syntax/hello-world-3.vue
+++ b/examples/vue/syntax/hello-world-3.vue
@@ -1,7 +1,7 @@
 <!--
   * <template>: html-like syntax
   * CSS-like inline style
-  * <style>: only support single-class selector
+  * <style scoped>: only support single-class selector
 -->
 
 <template>
@@ -14,7 +14,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {align-items: center; margin-top: 120px;}
   .title {font-size: 48px;}
   .logo {width: 360px; height: 82px;}
diff --git a/examples/vue/syntax/hello-world-4.vue b/examples/vue/syntax/hello-world-4.vue
index 17f7a04..f5898a1 100644
--- a/examples/vue/syntax/hello-world-4.vue
+++ b/examples/vue/syntax/hello-world-4.vue
@@ -1,7 +1,7 @@
 <!--
   * <template>: html-like syntax
   * CSS-like inline style
-  * <style>: only support single-class selector
+  * <style scoped>: only support single-class selector
   * <script>: define the behavior of component
   * :attr data-binding support
 -->
@@ -16,7 +16,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {align-items: center; margin-top: 120px;}
   .title {font-size: 48px;}
   .logo {width: 360px; height: 82px;}
diff --git a/examples/vue/syntax/hello-world-5.vue b/examples/vue/syntax/hello-world-5.vue
index 1dfa9c3..32e0e89 100644
--- a/examples/vue/syntax/hello-world-5.vue
+++ b/examples/vue/syntax/hello-world-5.vue
@@ -1,7 +1,7 @@
 <!--
   * <template>: html-like syntax
   * CSS-like inline style
-  * <style>: only support single-class selector
+  * <style scoped>: only support single-class selector
   * <script>: define the behavior of component
   * :attr data-binding support
   * @xxx syntax to bind event with a component method
@@ -14,7 +14,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {align-items: center; margin-top: 120px;}
   .title {font-size: 48px;}
   .logo {width: 360px; height: 82px;}
diff --git a/examples/vue/syntax/hello-world.vue b/examples/vue/syntax/hello-world.vue
index e4f4826..073a966 100644
--- a/examples/vue/syntax/hello-world.vue
+++ b/examples/vue/syntax/hello-world.vue
@@ -1,7 +1,7 @@
 <!--
   * <template>: html-like syntax
   * CSS-like inline style
-  * <style>: only support single-class selector
+  * <style scoped>: only support single-class selector
   * <script>: define the behavior of component
   * :attr data-binding support
   * @xxx syntax to bind event with a component method
@@ -23,7 +23,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .wrapper {align-items: center; margin-top: 120px;}
   .title {font-size: 48px;}
   .logo {width: 360px; height: 82px;}
diff --git a/examples/vue/syntax/include/btn.vue b/examples/vue/syntax/include/btn.vue
index 8b323a2..6fed870 100644
--- a/examples/vue/syntax/include/btn.vue
+++ b/examples/vue/syntax/include/btn.vue
@@ -4,6 +4,6 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .btn {font-size: 36px; text-align: center; color: white; background-color: gray; padding: 20px; border-radius: 5px;}
 </style>
diff --git a/examples/vue/syntax/include/sub.vue b/examples/vue/syntax/include/sub.vue
index 6028a0a..c34ccec 100644
--- a/examples/vue/syntax/include/sub.vue
+++ b/examples/vue/syntax/include/sub.vue
@@ -2,7 +2,7 @@
   <text class="item-txt">{{title}}</text>
 </template>
 
-<style>
+<style scoped>
   .item-txt {
     font-size: 48px;
     color: #555;
diff --git a/examples/vue/syntax/script-component.vue b/examples/vue/syntax/script-component.vue
index 1a29561..5208fd4 100644
--- a/examples/vue/syntax/script-component.vue
+++ b/examples/vue/syntax/script-component.vue
@@ -6,7 +6,7 @@
 
 <template>
   <list>
-    <cell v-for="item in items">
+    <cell v-for="(item,i) in items" :key="i" >
       <text>{{item.title}}</text>
       <item :title="'a'"></item>
     </cell>
diff --git a/examples/vue/syntax/script-data.vue b/examples/vue/syntax/script-data.vue
index be65fa5..355fb14 100644
--- a/examples/vue/syntax/script-data.vue
+++ b/examples/vue/syntax/script-data.vue
@@ -18,7 +18,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
 </style>
 
diff --git a/examples/vue/syntax/script-events.vue b/examples/vue/syntax/script-events.vue
index a4e437d..13487f9 100644
--- a/examples/vue/syntax/script-events.vue
+++ b/examples/vue/syntax/script-events.vue
@@ -6,11 +6,11 @@
 
 <template>
   <div>
-    <text class="title" v-for="value in list">{{value}}</text>
+    <text class="title" v-for="(value, i) in list" :key="i" >{{value}}</text>
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
 </style>
 
diff --git a/examples/vue/syntax/script-instance.vue b/examples/vue/syntax/script-instance.vue
index d9fc64f..fb31d5d 100644
--- a/examples/vue/syntax/script-instance.vue
+++ b/examples/vue/syntax/script-instance.vue
@@ -15,7 +15,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
 </style>
 
diff --git a/examples/vue/syntax/script-lifecycle.vue b/examples/vue/syntax/script-lifecycle.vue
index 3c5c731..63b2e32 100644
--- a/examples/vue/syntax/script-lifecycle.vue
+++ b/examples/vue/syntax/script-lifecycle.vue
@@ -1,10 +1,10 @@
 <template>
   <div>
-    <text class="title" v-for="value in list">{{value}}</text>
+    <text class="title" v-for="(value, i) in list" :key="i" >{{value}}</text>
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
 </style>
 
diff --git a/examples/vue/syntax/script-module.vue b/examples/vue/syntax/script-module.vue
index 5bd49f8..be63313 100644
--- a/examples/vue/syntax/script-module.vue
+++ b/examples/vue/syntax/script-module.vue
@@ -9,7 +9,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .btn {font-size: 36px; text-align: center; color: white; background-color: gray; padding: 20px; border-radius: 5px;}
 </style>
 
diff --git a/examples/vue/syntax/script-options.vue b/examples/vue/syntax/script-options.vue
index 2f96c46..1b997cb 100644
--- a/examples/vue/syntax/script-options.vue
+++ b/examples/vue/syntax/script-options.vue
@@ -14,7 +14,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
 </style>
 
diff --git a/examples/vue/syntax/template-class.vue b/examples/vue/syntax/template-class.vue
index 55d50e1..5a194db 100644
--- a/examples/vue/syntax/template-class.vue
+++ b/examples/vue/syntax/template-class.vue
@@ -10,7 +10,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .a {font-size: 48px;}
   .b {color: #ff0000;}
 </style>
diff --git a/examples/vue/syntax/template-event.vue b/examples/vue/syntax/template-event.vue
index 034cf02..4e813bd 100644
--- a/examples/vue/syntax/template-event.vue
+++ b/examples/vue/syntax/template-event.vue
@@ -12,7 +12,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
   .subtitle {font-size: 36px;}
   .btn {font-size: 36px; text-align: center; color: white; background-color: gray; padding: 20px; border-radius: 5px;}
diff --git a/examples/vue/syntax/template-if.vue b/examples/vue/syntax/template-if.vue
index c0951b7..0bfdcd9 100644
--- a/examples/vue/syntax/template-if.vue
+++ b/examples/vue/syntax/template-if.vue
@@ -10,7 +10,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
   .btn {font-size: 36px; text-align: center; color: white; background-color: gray; padding: 20px; border-radius: 5px;}
 </style>
diff --git a/examples/vue/syntax/template-repeat-update.vue b/examples/vue/syntax/template-repeat-update.vue
index c320dc9..5f69849 100644
--- a/examples/vue/syntax/template-repeat-update.vue
+++ b/examples/vue/syntax/template-repeat-update.vue
@@ -13,7 +13,7 @@
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
   .subtitle {font-size: 36px;}
   .btn {font-size: 36px; text-align: center; color: white; background-color: gray; padding: 20px; border-radius: 5px;}
diff --git a/examples/vue/syntax/template-repeat.vue b/examples/vue/syntax/template-repeat.vue
index e52f3c4..3a7facd 100644
--- a/examples/vue/syntax/template-repeat.vue
+++ b/examples/vue/syntax/template-repeat.vue
@@ -6,15 +6,15 @@
 <template>
   <div>
     <text class="title">Custom item</text>
-    <text class="subtitle" v-for="item in list">{{item}}</text>
+    <text class="subtitle" v-for="item in list" :key="item.index" >{{item}}</text>
     <text class="title">Custom key and item</text>
-    <text class="subtitle" v-for="(i,v) in list">{{i}}-{{v}}</text>
+    <text class="subtitle" v-for="(v,i) in list" :key="i" >{{i}}-{{v}}</text>
     <text class="title">Array of Object</text>
-    <text class="subtitle" v-for="(item, k, index) in list2">> {{index}}-{{item.text}}</text>
+    <text class="subtitle" v-for="(item, k, index) in list2" :key="index" >> {{index}}-{{item.text}}</text>
   </div>
 </template>
 
-<style>
+<style scoped>
   .title {font-size: 48px;}
   .subtitle {font-size: 36px;}
 </style>
diff --git a/flow-typed/npm/animationjs_vx.x.x.js b/flow-typed/npm/animationjs_vx.x.x.js
new file mode 100644
index 0000000..ab6b267
--- /dev/null
+++ b/flow-typed/npm/animationjs_vx.x.x.js
@@ -0,0 +1,60 @@
+// flow-typed signature: f234bb9aa083eadba8d747200fa5a8ca
+// flow-typed version: <<STUB>>/animationjs_v^0.1.5/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'animationjs'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'animationjs' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'animationjs/build/animation.common' {
+  declare module.exports: any;
+}
+
+declare module 'animationjs/build/animation.debug' {
+  declare module.exports: any;
+}
+
+declare module 'animationjs/build/animation' {
+  declare module.exports: any;
+}
+
+declare module 'animationjs/Gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'animationjs/src/animation' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'animationjs/build/animation.common.js' {
+  declare module.exports: $Exports<'animationjs/build/animation.common'>;
+}
+declare module 'animationjs/build/animation.debug.js' {
+  declare module.exports: $Exports<'animationjs/build/animation.debug'>;
+}
+declare module 'animationjs/build/animation.js' {
+  declare module.exports: $Exports<'animationjs/build/animation'>;
+}
+declare module 'animationjs/Gruntfile.js' {
+  declare module.exports: $Exports<'animationjs/Gruntfile'>;
+}
+declare module 'animationjs/src/animation.js' {
+  declare module.exports: $Exports<'animationjs/src/animation'>;
+}
diff --git a/flow-typed/npm/babel-core_vx.x.x.js b/flow-typed/npm/babel-core_vx.x.x.js
new file mode 100644
index 0000000..92933a7
--- /dev/null
+++ b/flow-typed/npm/babel-core_vx.x.x.js
@@ -0,0 +1,227 @@
+// flow-typed signature: 1e1a03a4a04bb3b5bad25d8dfc01182d
+// flow-typed version: <<STUB>>/babel-core_v^6.17.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-core'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-core' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-core/lib/api/browser' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/api/node' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/get-possible-plugin-names' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/get-possible-preset-names' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/merge' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/normalize-ast' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/resolve-from-possible-names' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/resolve-plugin' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/resolve-preset' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/helpers/resolve' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/store' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/tools/build-external-helpers' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/logger' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/build-config-chain' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/config' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/option-manager' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/parsers' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/file/options/removed' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/internal-plugins/block-hoist' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/internal-plugins/shadow-functions' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/pipeline' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/plugin-pass' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/transformation/plugin' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/lib/util' {
+  declare module.exports: any;
+}
+
+declare module 'babel-core/register' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-core/index' {
+  declare module.exports: $Exports<'babel-core'>;
+}
+declare module 'babel-core/index.js' {
+  declare module.exports: $Exports<'babel-core'>;
+}
+declare module 'babel-core/lib/api/browser.js' {
+  declare module.exports: $Exports<'babel-core/lib/api/browser'>;
+}
+declare module 'babel-core/lib/api/node.js' {
+  declare module.exports: $Exports<'babel-core/lib/api/node'>;
+}
+declare module 'babel-core/lib/helpers/get-possible-plugin-names.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/get-possible-plugin-names'>;
+}
+declare module 'babel-core/lib/helpers/get-possible-preset-names.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/get-possible-preset-names'>;
+}
+declare module 'babel-core/lib/helpers/merge.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/merge'>;
+}
+declare module 'babel-core/lib/helpers/normalize-ast.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/normalize-ast'>;
+}
+declare module 'babel-core/lib/helpers/resolve-from-possible-names.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/resolve-from-possible-names'>;
+}
+declare module 'babel-core/lib/helpers/resolve-plugin.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/resolve-plugin'>;
+}
+declare module 'babel-core/lib/helpers/resolve-preset.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/resolve-preset'>;
+}
+declare module 'babel-core/lib/helpers/resolve.js' {
+  declare module.exports: $Exports<'babel-core/lib/helpers/resolve'>;
+}
+declare module 'babel-core/lib/store.js' {
+  declare module.exports: $Exports<'babel-core/lib/store'>;
+}
+declare module 'babel-core/lib/tools/build-external-helpers.js' {
+  declare module.exports: $Exports<'babel-core/lib/tools/build-external-helpers'>;
+}
+declare module 'babel-core/lib/transformation/file/index.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/index'>;
+}
+declare module 'babel-core/lib/transformation/file/logger.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/logger'>;
+}
+declare module 'babel-core/lib/transformation/file/metadata.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/metadata'>;
+}
+declare module 'babel-core/lib/transformation/file/options/build-config-chain.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/build-config-chain'>;
+}
+declare module 'babel-core/lib/transformation/file/options/config.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/config'>;
+}
+declare module 'babel-core/lib/transformation/file/options/index.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/index'>;
+}
+declare module 'babel-core/lib/transformation/file/options/option-manager.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/option-manager'>;
+}
+declare module 'babel-core/lib/transformation/file/options/parsers.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/parsers'>;
+}
+declare module 'babel-core/lib/transformation/file/options/removed.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/file/options/removed'>;
+}
+declare module 'babel-core/lib/transformation/internal-plugins/block-hoist.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/internal-plugins/block-hoist'>;
+}
+declare module 'babel-core/lib/transformation/internal-plugins/shadow-functions.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/internal-plugins/shadow-functions'>;
+}
+declare module 'babel-core/lib/transformation/pipeline.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/pipeline'>;
+}
+declare module 'babel-core/lib/transformation/plugin-pass.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/plugin-pass'>;
+}
+declare module 'babel-core/lib/transformation/plugin.js' {
+  declare module.exports: $Exports<'babel-core/lib/transformation/plugin'>;
+}
+declare module 'babel-core/lib/util.js' {
+  declare module.exports: $Exports<'babel-core/lib/util'>;
+}
+declare module 'babel-core/register.js' {
+  declare module.exports: $Exports<'babel-core/register'>;
+}
diff --git a/flow-typed/npm/babel-eslint_vx.x.x.js b/flow-typed/npm/babel-eslint_vx.x.x.js
new file mode 100644
index 0000000..23a3be0
--- /dev/null
+++ b/flow-typed/npm/babel-eslint_vx.x.x.js
@@ -0,0 +1,73 @@
+// flow-typed signature: 8572281a1e762e212615d34f9d8b0638
+// flow-typed version: <<STUB>>/babel-eslint_v^7.2.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-eslint'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-eslint' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-eslint/babylon-to-espree/attachComments' {
+  declare module.exports: any;
+}
+
+declare module 'babel-eslint/babylon-to-espree/convertTemplateType' {
+  declare module.exports: any;
+}
+
+declare module 'babel-eslint/babylon-to-espree/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-eslint/babylon-to-espree/toAST' {
+  declare module.exports: any;
+}
+
+declare module 'babel-eslint/babylon-to-espree/toToken' {
+  declare module.exports: any;
+}
+
+declare module 'babel-eslint/babylon-to-espree/toTokens' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-eslint/babylon-to-espree/attachComments.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/attachComments'>;
+}
+declare module 'babel-eslint/babylon-to-espree/convertTemplateType.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/convertTemplateType'>;
+}
+declare module 'babel-eslint/babylon-to-espree/index.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/index'>;
+}
+declare module 'babel-eslint/babylon-to-espree/toAST.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toAST'>;
+}
+declare module 'babel-eslint/babylon-to-espree/toToken.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toToken'>;
+}
+declare module 'babel-eslint/babylon-to-espree/toTokens.js' {
+  declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toTokens'>;
+}
+declare module 'babel-eslint/index' {
+  declare module.exports: $Exports<'babel-eslint'>;
+}
+declare module 'babel-eslint/index.js' {
+  declare module.exports: $Exports<'babel-eslint'>;
+}
diff --git a/flow-typed/npm/babel-istanbul_vx.x.x.js b/flow-typed/npm/babel-istanbul_vx.x.x.js
new file mode 100644
index 0000000..7ac0aea
--- /dev/null
+++ b/flow-typed/npm/babel-istanbul_vx.x.x.js
@@ -0,0 +1,353 @@
+// flow-typed signature: 04fd876bc09bc933b92fda3b0d1904a9
+// flow-typed version: <<STUB>>/babel-istanbul_v^0.11.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-istanbul'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-istanbul' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-istanbul/lib/assets/sorter' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/assets/vendor/prettify' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/cli' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/collector' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/check-coverage' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/common/run-with-cover' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/cover' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/help' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/instrument' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/report' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/command/test' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/config' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/hook' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/instrumenter' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/object-utils' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/register-plugins' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/clover' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/cobertura' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/common/defaults' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/html' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/json-summary' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/json' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/lcov' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/lcovonly' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/none' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/teamcity' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/text-lcov' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/text-summary' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/report/text' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/reporter' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/store/fslookup' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/store/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/store/memory' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/store/tmp' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/factory' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/file-matcher' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/file-writer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/help-formatter' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/input-error' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/insertion-text' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/meta' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/tree-summarizer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/writer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-istanbul/lib/util/yui-load-hook' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-istanbul/index' {
+  declare module.exports: $Exports<'babel-istanbul'>;
+}
+declare module 'babel-istanbul/index.js' {
+  declare module.exports: $Exports<'babel-istanbul'>;
+}
+declare module 'babel-istanbul/lib/assets/sorter.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/assets/sorter'>;
+}
+declare module 'babel-istanbul/lib/assets/vendor/prettify.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/assets/vendor/prettify'>;
+}
+declare module 'babel-istanbul/lib/cli.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/cli'>;
+}
+declare module 'babel-istanbul/lib/collector.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/collector'>;
+}
+declare module 'babel-istanbul/lib/command/check-coverage.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/check-coverage'>;
+}
+declare module 'babel-istanbul/lib/command/common/run-with-cover.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/common/run-with-cover'>;
+}
+declare module 'babel-istanbul/lib/command/cover.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/cover'>;
+}
+declare module 'babel-istanbul/lib/command/help.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/help'>;
+}
+declare module 'babel-istanbul/lib/command/index.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/index'>;
+}
+declare module 'babel-istanbul/lib/command/instrument.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/instrument'>;
+}
+declare module 'babel-istanbul/lib/command/report.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/report'>;
+}
+declare module 'babel-istanbul/lib/command/test.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/command/test'>;
+}
+declare module 'babel-istanbul/lib/config.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/config'>;
+}
+declare module 'babel-istanbul/lib/hook.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/hook'>;
+}
+declare module 'babel-istanbul/lib/instrumenter.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/instrumenter'>;
+}
+declare module 'babel-istanbul/lib/object-utils.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/object-utils'>;
+}
+declare module 'babel-istanbul/lib/register-plugins.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/register-plugins'>;
+}
+declare module 'babel-istanbul/lib/report/clover.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/clover'>;
+}
+declare module 'babel-istanbul/lib/report/cobertura.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/cobertura'>;
+}
+declare module 'babel-istanbul/lib/report/common/defaults.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/common/defaults'>;
+}
+declare module 'babel-istanbul/lib/report/html.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/html'>;
+}
+declare module 'babel-istanbul/lib/report/index.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/index'>;
+}
+declare module 'babel-istanbul/lib/report/json-summary.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/json-summary'>;
+}
+declare module 'babel-istanbul/lib/report/json.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/json'>;
+}
+declare module 'babel-istanbul/lib/report/lcov.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/lcov'>;
+}
+declare module 'babel-istanbul/lib/report/lcovonly.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/lcovonly'>;
+}
+declare module 'babel-istanbul/lib/report/none.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/none'>;
+}
+declare module 'babel-istanbul/lib/report/teamcity.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/teamcity'>;
+}
+declare module 'babel-istanbul/lib/report/text-lcov.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/text-lcov'>;
+}
+declare module 'babel-istanbul/lib/report/text-summary.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/text-summary'>;
+}
+declare module 'babel-istanbul/lib/report/text.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/report/text'>;
+}
+declare module 'babel-istanbul/lib/reporter.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/reporter'>;
+}
+declare module 'babel-istanbul/lib/store/fslookup.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/store/fslookup'>;
+}
+declare module 'babel-istanbul/lib/store/index.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/store/index'>;
+}
+declare module 'babel-istanbul/lib/store/memory.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/store/memory'>;
+}
+declare module 'babel-istanbul/lib/store/tmp.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/store/tmp'>;
+}
+declare module 'babel-istanbul/lib/util/factory.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/factory'>;
+}
+declare module 'babel-istanbul/lib/util/file-matcher.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/file-matcher'>;
+}
+declare module 'babel-istanbul/lib/util/file-writer.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/file-writer'>;
+}
+declare module 'babel-istanbul/lib/util/help-formatter.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/help-formatter'>;
+}
+declare module 'babel-istanbul/lib/util/input-error.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/input-error'>;
+}
+declare module 'babel-istanbul/lib/util/insertion-text.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/insertion-text'>;
+}
+declare module 'babel-istanbul/lib/util/meta.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/meta'>;
+}
+declare module 'babel-istanbul/lib/util/tree-summarizer.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/tree-summarizer'>;
+}
+declare module 'babel-istanbul/lib/util/writer.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/writer'>;
+}
+declare module 'babel-istanbul/lib/util/yui-load-hook.js' {
+  declare module.exports: $Exports<'babel-istanbul/lib/util/yui-load-hook'>;
+}
diff --git a/flow-typed/npm/babel-loader_vx.x.x.js b/flow-typed/npm/babel-loader_vx.x.x.js
new file mode 100644
index 0000000..70adb6f
--- /dev/null
+++ b/flow-typed/npm/babel-loader_vx.x.x.js
@@ -0,0 +1,67 @@
+// flow-typed signature: 1b57d376bdc4ba6bb7a366303287a1d9
+// flow-typed version: <<STUB>>/babel-loader_v^6.2.5/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-loader/lib/fs-cache' {
+  declare module.exports: any;
+}
+
+declare module 'babel-loader/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-loader/lib/resolve-rc' {
+  declare module.exports: any;
+}
+
+declare module 'babel-loader/lib/utils/exists' {
+  declare module.exports: any;
+}
+
+declare module 'babel-loader/lib/utils/read' {
+  declare module.exports: any;
+}
+
+declare module 'babel-loader/lib/utils/relative' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-loader/lib/fs-cache.js' {
+  declare module.exports: $Exports<'babel-loader/lib/fs-cache'>;
+}
+declare module 'babel-loader/lib/index.js' {
+  declare module.exports: $Exports<'babel-loader/lib/index'>;
+}
+declare module 'babel-loader/lib/resolve-rc.js' {
+  declare module.exports: $Exports<'babel-loader/lib/resolve-rc'>;
+}
+declare module 'babel-loader/lib/utils/exists.js' {
+  declare module.exports: $Exports<'babel-loader/lib/utils/exists'>;
+}
+declare module 'babel-loader/lib/utils/read.js' {
+  declare module.exports: $Exports<'babel-loader/lib/utils/read'>;
+}
+declare module 'babel-loader/lib/utils/relative.js' {
+  declare module.exports: $Exports<'babel-loader/lib/utils/relative'>;
+}
diff --git a/flow-typed/npm/babel-plugin-coverage_vx.x.x.js b/flow-typed/npm/babel-plugin-coverage_vx.x.x.js
new file mode 100644
index 0000000..33af0db
--- /dev/null
+++ b/flow-typed/npm/babel-plugin-coverage_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: bdc0f5f39e66fa17a1159fa66bdf2ee1
+// flow-typed version: <<STUB>>/babel-plugin-coverage_v^1.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-plugin-coverage'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-plugin-coverage' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-plugin-coverage/lib/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-plugin-coverage/lib/index.js' {
+  declare module.exports: $Exports<'babel-plugin-coverage/lib/index'>;
+}
diff --git a/flow-typed/npm/babel-preset-es2015_vx.x.x.js b/flow-typed/npm/babel-preset-es2015_vx.x.x.js
new file mode 100644
index 0000000..e823d2c
--- /dev/null
+++ b/flow-typed/npm/babel-preset-es2015_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 6d2c89198e3c335974110e2c9c364aef
+// flow-typed version: <<STUB>>/babel-preset-es2015_v^6.16.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-preset-es2015'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-preset-es2015' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-preset-es2015/lib/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-preset-es2015/lib/index.js' {
+  declare module.exports: $Exports<'babel-preset-es2015/lib/index'>;
+}
diff --git a/flow-typed/npm/babel-runtime_vx.x.x.js b/flow-typed/npm/babel-runtime_vx.x.x.js
new file mode 100644
index 0000000..f2a20cd
--- /dev/null
+++ b/flow-typed/npm/babel-runtime_vx.x.x.js
@@ -0,0 +1,1691 @@
+// flow-typed signature: 6ad8552d1995b82ccd1c953fef0ba503
+// flow-typed version: <<STUB>>/babel-runtime_v^6.11.6/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'babel-runtime'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'babel-runtime' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'babel-runtime/core-js' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/concat' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/entries' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/every' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/fill' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/filter' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/find-index' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/find' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/for-each' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/from' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/includes' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/index-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/join' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/keys' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/map' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/pop' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/push' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/reduce' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/reverse' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/shift' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/slice' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/some' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/sort' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/splice' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/unshift' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/array/values' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/asap' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/clear-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/error/is-error' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/get-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/is-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/json/stringify' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/map' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/acosh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/asinh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/atanh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/cbrt' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/clz32' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/cosh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/expm1' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/fround' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/hypot' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/iaddh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/imul' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/imulh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/isubh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/log10' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/log1p' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/log2' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/sign' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/sinh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/tanh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/trunc' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/math/umulh' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/epsilon' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/is-finite' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/is-nan' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/is-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/max-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/min-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/number/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/assign' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/create' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/define-properties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/entries' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/freeze' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/get-own-property-descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/get-own-property-names' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/get-own-property-symbols' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/is-frozen' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/is-sealed' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/is' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/keys' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/seal' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/object/values' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/observable' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/promise' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/apply' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/construct' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/define-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/delete-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/delete-property' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/enumerate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-own-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/get' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/has-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/has-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/has' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/metadata' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/reflect/set' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/regexp/escape' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/set-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/set' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/at' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/from-code-point' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/includes' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/match-all' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/pad-left' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/pad-right' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/raw' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/repeat' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/trim-end' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/trim-start' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/string/trim' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/for' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/is-concat-spreadable' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/key-for' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/match' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/observable' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/replace' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/search' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/species' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/split' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/to-string-tag' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/symbol/unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/system/global' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/core-js/weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_async-generator-delegate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_async-generator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_async-to-generator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_class-call-check' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_create-class' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_defaults' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_define-enumerable-properties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_define-property' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_extends' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_get' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_inherits' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_instanceof' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_interop-require-default' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_interop-require-wildcard' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_jsx' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_new-arrow-check' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_object-destructuring-empty' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_object-without-properties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_possible-constructor-return' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_self-global' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_set' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_sliced-to-array-loose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_sliced-to-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_tagged-template-literal-loose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_tagged-template-literal' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_temporal-ref' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_temporal-undefined' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_to-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_to-consumable-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/_typeof' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/async-generator-delegate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/async-generator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/async-to-generator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/asyncGenerator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/asyncGeneratorDelegate' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/asyncIterator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/asyncToGenerator' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/class-call-check' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/classCallCheck' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/create-class' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/createClass' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/defaults' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/define-enumerable-properties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/defineEnumerableProperties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/defineProperty' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/extends' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/get' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/inherits' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/instanceof' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/interop-require-default' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/interop-require-wildcard' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/interopRequireDefault' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/interopRequireWildcard' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/jsx' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/new-arrow-check' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/newArrowCheck' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/object-destructuring-empty' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/object-without-properties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/objectDestructuringEmpty' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/objectWithoutProperties' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/possible-constructor-return' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/possibleConstructorReturn' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/self-global' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/selfGlobal' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/set' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/sliced-to-array-loose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/sliced-to-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/slicedToArray' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/slicedToArrayLoose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/tagged-template-literal-loose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/tagged-template-literal' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/taggedTemplateLiteral' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/taggedTemplateLiteralLoose' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/temporal-ref' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/temporal-undefined' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/temporalRef' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/temporalUndefined' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/to-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/to-consumable-array' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/toArray' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/toConsumableArray' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/helpers/typeof' {
+  declare module.exports: any;
+}
+
+declare module 'babel-runtime/regenerator/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'babel-runtime/core-js.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js'>;
+}
+declare module 'babel-runtime/core-js/array/concat.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/concat'>;
+}
+declare module 'babel-runtime/core-js/array/copy-within.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/copy-within'>;
+}
+declare module 'babel-runtime/core-js/array/entries.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/entries'>;
+}
+declare module 'babel-runtime/core-js/array/every.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/every'>;
+}
+declare module 'babel-runtime/core-js/array/fill.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/fill'>;
+}
+declare module 'babel-runtime/core-js/array/filter.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/filter'>;
+}
+declare module 'babel-runtime/core-js/array/find-index.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/find-index'>;
+}
+declare module 'babel-runtime/core-js/array/find.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/find'>;
+}
+declare module 'babel-runtime/core-js/array/for-each.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/for-each'>;
+}
+declare module 'babel-runtime/core-js/array/from.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/from'>;
+}
+declare module 'babel-runtime/core-js/array/includes.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/includes'>;
+}
+declare module 'babel-runtime/core-js/array/index-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/index-of'>;
+}
+declare module 'babel-runtime/core-js/array/join.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/join'>;
+}
+declare module 'babel-runtime/core-js/array/keys.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/keys'>;
+}
+declare module 'babel-runtime/core-js/array/last-index-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/last-index-of'>;
+}
+declare module 'babel-runtime/core-js/array/map.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/map'>;
+}
+declare module 'babel-runtime/core-js/array/of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/of'>;
+}
+declare module 'babel-runtime/core-js/array/pop.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/pop'>;
+}
+declare module 'babel-runtime/core-js/array/push.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/push'>;
+}
+declare module 'babel-runtime/core-js/array/reduce-right.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/reduce-right'>;
+}
+declare module 'babel-runtime/core-js/array/reduce.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/reduce'>;
+}
+declare module 'babel-runtime/core-js/array/reverse.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/reverse'>;
+}
+declare module 'babel-runtime/core-js/array/shift.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/shift'>;
+}
+declare module 'babel-runtime/core-js/array/slice.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/slice'>;
+}
+declare module 'babel-runtime/core-js/array/some.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/some'>;
+}
+declare module 'babel-runtime/core-js/array/sort.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/sort'>;
+}
+declare module 'babel-runtime/core-js/array/splice.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/splice'>;
+}
+declare module 'babel-runtime/core-js/array/unshift.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/unshift'>;
+}
+declare module 'babel-runtime/core-js/array/values.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/array/values'>;
+}
+declare module 'babel-runtime/core-js/asap.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/asap'>;
+}
+declare module 'babel-runtime/core-js/clear-immediate.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/clear-immediate'>;
+}
+declare module 'babel-runtime/core-js/error/is-error.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/error/is-error'>;
+}
+declare module 'babel-runtime/core-js/get-iterator.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/get-iterator'>;
+}
+declare module 'babel-runtime/core-js/is-iterable.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/is-iterable'>;
+}
+declare module 'babel-runtime/core-js/json/stringify.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/json/stringify'>;
+}
+declare module 'babel-runtime/core-js/map.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/map'>;
+}
+declare module 'babel-runtime/core-js/math/acosh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/acosh'>;
+}
+declare module 'babel-runtime/core-js/math/asinh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/asinh'>;
+}
+declare module 'babel-runtime/core-js/math/atanh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/atanh'>;
+}
+declare module 'babel-runtime/core-js/math/cbrt.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/cbrt'>;
+}
+declare module 'babel-runtime/core-js/math/clz32.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/clz32'>;
+}
+declare module 'babel-runtime/core-js/math/cosh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/cosh'>;
+}
+declare module 'babel-runtime/core-js/math/expm1.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/expm1'>;
+}
+declare module 'babel-runtime/core-js/math/fround.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/fround'>;
+}
+declare module 'babel-runtime/core-js/math/hypot.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/hypot'>;
+}
+declare module 'babel-runtime/core-js/math/iaddh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/iaddh'>;
+}
+declare module 'babel-runtime/core-js/math/imul.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/imul'>;
+}
+declare module 'babel-runtime/core-js/math/imulh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/imulh'>;
+}
+declare module 'babel-runtime/core-js/math/isubh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/isubh'>;
+}
+declare module 'babel-runtime/core-js/math/log10.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/log10'>;
+}
+declare module 'babel-runtime/core-js/math/log1p.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/log1p'>;
+}
+declare module 'babel-runtime/core-js/math/log2.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/log2'>;
+}
+declare module 'babel-runtime/core-js/math/sign.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/sign'>;
+}
+declare module 'babel-runtime/core-js/math/sinh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/sinh'>;
+}
+declare module 'babel-runtime/core-js/math/tanh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/tanh'>;
+}
+declare module 'babel-runtime/core-js/math/trunc.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/trunc'>;
+}
+declare module 'babel-runtime/core-js/math/umulh.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/math/umulh'>;
+}
+declare module 'babel-runtime/core-js/number/epsilon.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/epsilon'>;
+}
+declare module 'babel-runtime/core-js/number/is-finite.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/is-finite'>;
+}
+declare module 'babel-runtime/core-js/number/is-integer.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/is-integer'>;
+}
+declare module 'babel-runtime/core-js/number/is-nan.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/is-nan'>;
+}
+declare module 'babel-runtime/core-js/number/is-safe-integer.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/is-safe-integer'>;
+}
+declare module 'babel-runtime/core-js/number/max-safe-integer.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/max-safe-integer'>;
+}
+declare module 'babel-runtime/core-js/number/min-safe-integer.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/min-safe-integer'>;
+}
+declare module 'babel-runtime/core-js/number/parse-float.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/parse-float'>;
+}
+declare module 'babel-runtime/core-js/number/parse-int.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/number/parse-int'>;
+}
+declare module 'babel-runtime/core-js/object/assign.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/assign'>;
+}
+declare module 'babel-runtime/core-js/object/create.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/create'>;
+}
+declare module 'babel-runtime/core-js/object/define-properties.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/define-properties'>;
+}
+declare module 'babel-runtime/core-js/object/define-property.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/define-property'>;
+}
+declare module 'babel-runtime/core-js/object/entries.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/entries'>;
+}
+declare module 'babel-runtime/core-js/object/freeze.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/freeze'>;
+}
+declare module 'babel-runtime/core-js/object/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/get-own-property-descriptor'>;
+}
+declare module 'babel-runtime/core-js/object/get-own-property-descriptors.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/get-own-property-descriptors'>;
+}
+declare module 'babel-runtime/core-js/object/get-own-property-names.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/get-own-property-names'>;
+}
+declare module 'babel-runtime/core-js/object/get-own-property-symbols.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/get-own-property-symbols'>;
+}
+declare module 'babel-runtime/core-js/object/get-prototype-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/get-prototype-of'>;
+}
+declare module 'babel-runtime/core-js/object/is-extensible.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/is-extensible'>;
+}
+declare module 'babel-runtime/core-js/object/is-frozen.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/is-frozen'>;
+}
+declare module 'babel-runtime/core-js/object/is-sealed.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/is-sealed'>;
+}
+declare module 'babel-runtime/core-js/object/is.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/is'>;
+}
+declare module 'babel-runtime/core-js/object/keys.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/keys'>;
+}
+declare module 'babel-runtime/core-js/object/prevent-extensions.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/prevent-extensions'>;
+}
+declare module 'babel-runtime/core-js/object/seal.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/seal'>;
+}
+declare module 'babel-runtime/core-js/object/set-prototype-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/set-prototype-of'>;
+}
+declare module 'babel-runtime/core-js/object/values.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/object/values'>;
+}
+declare module 'babel-runtime/core-js/observable.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/observable'>;
+}
+declare module 'babel-runtime/core-js/promise.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/promise'>;
+}
+declare module 'babel-runtime/core-js/reflect/apply.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/apply'>;
+}
+declare module 'babel-runtime/core-js/reflect/construct.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/construct'>;
+}
+declare module 'babel-runtime/core-js/reflect/define-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/define-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/define-property.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/define-property'>;
+}
+declare module 'babel-runtime/core-js/reflect/delete-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/delete-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/delete-property.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/delete-property'>;
+}
+declare module 'babel-runtime/core-js/reflect/enumerate.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/enumerate'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-metadata-keys.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-metadata-keys'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-own-metadata-keys.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-own-metadata-keys'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-own-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-own-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-own-property-descriptor'>;
+}
+declare module 'babel-runtime/core-js/reflect/get-prototype-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get-prototype-of'>;
+}
+declare module 'babel-runtime/core-js/reflect/get.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/get'>;
+}
+declare module 'babel-runtime/core-js/reflect/has-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/has-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/has-own-metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/has-own-metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/has.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/has'>;
+}
+declare module 'babel-runtime/core-js/reflect/is-extensible.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/is-extensible'>;
+}
+declare module 'babel-runtime/core-js/reflect/metadata.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/metadata'>;
+}
+declare module 'babel-runtime/core-js/reflect/own-keys.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/own-keys'>;
+}
+declare module 'babel-runtime/core-js/reflect/prevent-extensions.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/prevent-extensions'>;
+}
+declare module 'babel-runtime/core-js/reflect/set-prototype-of.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/set-prototype-of'>;
+}
+declare module 'babel-runtime/core-js/reflect/set.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/reflect/set'>;
+}
+declare module 'babel-runtime/core-js/regexp/escape.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/regexp/escape'>;
+}
+declare module 'babel-runtime/core-js/set-immediate.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/set-immediate'>;
+}
+declare module 'babel-runtime/core-js/set.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/set'>;
+}
+declare module 'babel-runtime/core-js/string/at.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/at'>;
+}
+declare module 'babel-runtime/core-js/string/code-point-at.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/code-point-at'>;
+}
+declare module 'babel-runtime/core-js/string/ends-with.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/ends-with'>;
+}
+declare module 'babel-runtime/core-js/string/from-code-point.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/from-code-point'>;
+}
+declare module 'babel-runtime/core-js/string/includes.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/includes'>;
+}
+declare module 'babel-runtime/core-js/string/match-all.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/match-all'>;
+}
+declare module 'babel-runtime/core-js/string/pad-end.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/pad-end'>;
+}
+declare module 'babel-runtime/core-js/string/pad-left.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/pad-left'>;
+}
+declare module 'babel-runtime/core-js/string/pad-right.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/pad-right'>;
+}
+declare module 'babel-runtime/core-js/string/pad-start.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/pad-start'>;
+}
+declare module 'babel-runtime/core-js/string/raw.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/raw'>;
+}
+declare module 'babel-runtime/core-js/string/repeat.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/repeat'>;
+}
+declare module 'babel-runtime/core-js/string/starts-with.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/starts-with'>;
+}
+declare module 'babel-runtime/core-js/string/trim-end.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/trim-end'>;
+}
+declare module 'babel-runtime/core-js/string/trim-left.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/trim-left'>;
+}
+declare module 'babel-runtime/core-js/string/trim-right.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/trim-right'>;
+}
+declare module 'babel-runtime/core-js/string/trim-start.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/trim-start'>;
+}
+declare module 'babel-runtime/core-js/string/trim.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/string/trim'>;
+}
+declare module 'babel-runtime/core-js/symbol.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol'>;
+}
+declare module 'babel-runtime/core-js/symbol/async-iterator.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/async-iterator'>;
+}
+declare module 'babel-runtime/core-js/symbol/for.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/for'>;
+}
+declare module 'babel-runtime/core-js/symbol/has-instance.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/has-instance'>;
+}
+declare module 'babel-runtime/core-js/symbol/is-concat-spreadable.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/is-concat-spreadable'>;
+}
+declare module 'babel-runtime/core-js/symbol/iterator.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/iterator'>;
+}
+declare module 'babel-runtime/core-js/symbol/key-for.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/key-for'>;
+}
+declare module 'babel-runtime/core-js/symbol/match.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/match'>;
+}
+declare module 'babel-runtime/core-js/symbol/observable.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/observable'>;
+}
+declare module 'babel-runtime/core-js/symbol/replace.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/replace'>;
+}
+declare module 'babel-runtime/core-js/symbol/search.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/search'>;
+}
+declare module 'babel-runtime/core-js/symbol/species.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/species'>;
+}
+declare module 'babel-runtime/core-js/symbol/split.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/split'>;
+}
+declare module 'babel-runtime/core-js/symbol/to-primitive.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/to-primitive'>;
+}
+declare module 'babel-runtime/core-js/symbol/to-string-tag.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/to-string-tag'>;
+}
+declare module 'babel-runtime/core-js/symbol/unscopables.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/symbol/unscopables'>;
+}
+declare module 'babel-runtime/core-js/system/global.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/system/global'>;
+}
+declare module 'babel-runtime/core-js/weak-map.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/weak-map'>;
+}
+declare module 'babel-runtime/core-js/weak-set.js' {
+  declare module.exports: $Exports<'babel-runtime/core-js/weak-set'>;
+}
+declare module 'babel-runtime/helpers/_async-generator-delegate.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_async-generator-delegate'>;
+}
+declare module 'babel-runtime/helpers/_async-generator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_async-generator'>;
+}
+declare module 'babel-runtime/helpers/_async-iterator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_async-iterator'>;
+}
+declare module 'babel-runtime/helpers/_async-to-generator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_async-to-generator'>;
+}
+declare module 'babel-runtime/helpers/_class-call-check.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_class-call-check'>;
+}
+declare module 'babel-runtime/helpers/_create-class.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_create-class'>;
+}
+declare module 'babel-runtime/helpers/_defaults.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_defaults'>;
+}
+declare module 'babel-runtime/helpers/_define-enumerable-properties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_define-enumerable-properties'>;
+}
+declare module 'babel-runtime/helpers/_define-property.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_define-property'>;
+}
+declare module 'babel-runtime/helpers/_extends.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_extends'>;
+}
+declare module 'babel-runtime/helpers/_get.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_get'>;
+}
+declare module 'babel-runtime/helpers/_inherits.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_inherits'>;
+}
+declare module 'babel-runtime/helpers/_instanceof.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_instanceof'>;
+}
+declare module 'babel-runtime/helpers/_interop-require-default.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_interop-require-default'>;
+}
+declare module 'babel-runtime/helpers/_interop-require-wildcard.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_interop-require-wildcard'>;
+}
+declare module 'babel-runtime/helpers/_jsx.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_jsx'>;
+}
+declare module 'babel-runtime/helpers/_new-arrow-check.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_new-arrow-check'>;
+}
+declare module 'babel-runtime/helpers/_object-destructuring-empty.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_object-destructuring-empty'>;
+}
+declare module 'babel-runtime/helpers/_object-without-properties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_object-without-properties'>;
+}
+declare module 'babel-runtime/helpers/_possible-constructor-return.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_possible-constructor-return'>;
+}
+declare module 'babel-runtime/helpers/_self-global.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_self-global'>;
+}
+declare module 'babel-runtime/helpers/_set.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_set'>;
+}
+declare module 'babel-runtime/helpers/_sliced-to-array-loose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_sliced-to-array-loose'>;
+}
+declare module 'babel-runtime/helpers/_sliced-to-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_sliced-to-array'>;
+}
+declare module 'babel-runtime/helpers/_tagged-template-literal-loose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_tagged-template-literal-loose'>;
+}
+declare module 'babel-runtime/helpers/_tagged-template-literal.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_tagged-template-literal'>;
+}
+declare module 'babel-runtime/helpers/_temporal-ref.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_temporal-ref'>;
+}
+declare module 'babel-runtime/helpers/_temporal-undefined.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_temporal-undefined'>;
+}
+declare module 'babel-runtime/helpers/_to-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_to-array'>;
+}
+declare module 'babel-runtime/helpers/_to-consumable-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_to-consumable-array'>;
+}
+declare module 'babel-runtime/helpers/_typeof.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/_typeof'>;
+}
+declare module 'babel-runtime/helpers/async-generator-delegate.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/async-generator-delegate'>;
+}
+declare module 'babel-runtime/helpers/async-generator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/async-generator'>;
+}
+declare module 'babel-runtime/helpers/async-iterator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/async-iterator'>;
+}
+declare module 'babel-runtime/helpers/async-to-generator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/async-to-generator'>;
+}
+declare module 'babel-runtime/helpers/asyncGenerator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/asyncGenerator'>;
+}
+declare module 'babel-runtime/helpers/asyncGeneratorDelegate.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/asyncGeneratorDelegate'>;
+}
+declare module 'babel-runtime/helpers/asyncIterator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/asyncIterator'>;
+}
+declare module 'babel-runtime/helpers/asyncToGenerator.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/asyncToGenerator'>;
+}
+declare module 'babel-runtime/helpers/class-call-check.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/class-call-check'>;
+}
+declare module 'babel-runtime/helpers/classCallCheck.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/classCallCheck'>;
+}
+declare module 'babel-runtime/helpers/create-class.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/create-class'>;
+}
+declare module 'babel-runtime/helpers/createClass.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/createClass'>;
+}
+declare module 'babel-runtime/helpers/defaults.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/defaults'>;
+}
+declare module 'babel-runtime/helpers/define-enumerable-properties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/define-enumerable-properties'>;
+}
+declare module 'babel-runtime/helpers/define-property.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/define-property'>;
+}
+declare module 'babel-runtime/helpers/defineEnumerableProperties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/defineEnumerableProperties'>;
+}
+declare module 'babel-runtime/helpers/defineProperty.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/defineProperty'>;
+}
+declare module 'babel-runtime/helpers/extends.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/extends'>;
+}
+declare module 'babel-runtime/helpers/get.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/get'>;
+}
+declare module 'babel-runtime/helpers/inherits.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/inherits'>;
+}
+declare module 'babel-runtime/helpers/instanceof.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/instanceof'>;
+}
+declare module 'babel-runtime/helpers/interop-require-default.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/interop-require-default'>;
+}
+declare module 'babel-runtime/helpers/interop-require-wildcard.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/interop-require-wildcard'>;
+}
+declare module 'babel-runtime/helpers/interopRequireDefault.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/interopRequireDefault'>;
+}
+declare module 'babel-runtime/helpers/interopRequireWildcard.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/interopRequireWildcard'>;
+}
+declare module 'babel-runtime/helpers/jsx.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/jsx'>;
+}
+declare module 'babel-runtime/helpers/new-arrow-check.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/new-arrow-check'>;
+}
+declare module 'babel-runtime/helpers/newArrowCheck.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/newArrowCheck'>;
+}
+declare module 'babel-runtime/helpers/object-destructuring-empty.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/object-destructuring-empty'>;
+}
+declare module 'babel-runtime/helpers/object-without-properties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/object-without-properties'>;
+}
+declare module 'babel-runtime/helpers/objectDestructuringEmpty.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/objectDestructuringEmpty'>;
+}
+declare module 'babel-runtime/helpers/objectWithoutProperties.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/objectWithoutProperties'>;
+}
+declare module 'babel-runtime/helpers/possible-constructor-return.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/possible-constructor-return'>;
+}
+declare module 'babel-runtime/helpers/possibleConstructorReturn.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/possibleConstructorReturn'>;
+}
+declare module 'babel-runtime/helpers/self-global.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/self-global'>;
+}
+declare module 'babel-runtime/helpers/selfGlobal.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/selfGlobal'>;
+}
+declare module 'babel-runtime/helpers/set.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/set'>;
+}
+declare module 'babel-runtime/helpers/sliced-to-array-loose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/sliced-to-array-loose'>;
+}
+declare module 'babel-runtime/helpers/sliced-to-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/sliced-to-array'>;
+}
+declare module 'babel-runtime/helpers/slicedToArray.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/slicedToArray'>;
+}
+declare module 'babel-runtime/helpers/slicedToArrayLoose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/slicedToArrayLoose'>;
+}
+declare module 'babel-runtime/helpers/tagged-template-literal-loose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/tagged-template-literal-loose'>;
+}
+declare module 'babel-runtime/helpers/tagged-template-literal.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/tagged-template-literal'>;
+}
+declare module 'babel-runtime/helpers/taggedTemplateLiteral.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/taggedTemplateLiteral'>;
+}
+declare module 'babel-runtime/helpers/taggedTemplateLiteralLoose.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/taggedTemplateLiteralLoose'>;
+}
+declare module 'babel-runtime/helpers/temporal-ref.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/temporal-ref'>;
+}
+declare module 'babel-runtime/helpers/temporal-undefined.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/temporal-undefined'>;
+}
+declare module 'babel-runtime/helpers/temporalRef.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/temporalRef'>;
+}
+declare module 'babel-runtime/helpers/temporalUndefined.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/temporalUndefined'>;
+}
+declare module 'babel-runtime/helpers/to-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/to-array'>;
+}
+declare module 'babel-runtime/helpers/to-consumable-array.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/to-consumable-array'>;
+}
+declare module 'babel-runtime/helpers/toArray.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/toArray'>;
+}
+declare module 'babel-runtime/helpers/toConsumableArray.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/toConsumableArray'>;
+}
+declare module 'babel-runtime/helpers/typeof.js' {
+  declare module.exports: $Exports<'babel-runtime/helpers/typeof'>;
+}
+declare module 'babel-runtime/regenerator/index.js' {
+  declare module.exports: $Exports<'babel-runtime/regenerator/index'>;
+}
diff --git a/flow-typed/npm/chai_v3.5.x.js b/flow-typed/npm/chai_v3.5.x.js
new file mode 100644
index 0000000..50f3814
--- /dev/null
+++ b/flow-typed/npm/chai_v3.5.x.js
@@ -0,0 +1,212 @@
+// flow-typed signature: 777eee7cfcb8f77109f8148b4251bf2d
+// flow-typed version: 85e99047c5/chai_v3.5.x/flow_>=v0.24.0
+
+declare module "chai" {
+
+    declare type ExpectChain<T> = {
+        and: ExpectChain<T>,
+        at: ExpectChain<T>,
+        be: ExpectChain<T>,
+        been: ExpectChain<T>,
+        have: ExpectChain<T>,
+        has: ExpectChain<T>,
+        is: ExpectChain<T>,
+        of: ExpectChain<T>,
+        same: ExpectChain<T>,
+        that: ExpectChain<T>,
+        to: ExpectChain<T>,
+        which: ExpectChain<T>,
+        with: ExpectChain<T>,
+
+        not: ExpectChain<T>,
+        deep: ExpectChain<T>,
+        any: ExpectChain<T>,
+        all: ExpectChain<T>,
+
+        a: ExpectChain<T> & (type: string) => ExpectChain<T>,
+        an: ExpectChain<T> & (type: string) => ExpectChain<T>,
+
+        include: ExpectChain<T> & (value: mixed) => ExpectChain<T>,
+        includes: ExpectChain<T> & (value: mixed) => ExpectChain<T>,
+        contain: ExpectChain<T> & (value: mixed) => ExpectChain<T>,
+        contains: ExpectChain<T> & (value: mixed) => ExpectChain<T>,
+
+        eql: (value: T) => ExpectChain<T>,
+        equal: (value: T) => ExpectChain<T>,
+        equals: (value: T) => ExpectChain<T>,
+
+        above: (value: T & number) => ExpectChain<T>,
+        least: (value: T & number) => ExpectChain<T>,
+        below: (value: T & number) => ExpectChain<T>,
+        most: (value: T & number) => ExpectChain<T>,
+        within: (start: T & number, finish: T & number) => ExpectChain<T>,
+
+        instanceof: (constructor: mixed) => ExpectChain<T>,
+        property: (
+          <P>(name: string, value?: P) => ExpectChain<P>
+          & (name: string) => ExpectChain<mixed>
+        ),
+
+        length: (value: number) => ExpectChain<T> | ExpectChain<number>,
+        lengthOf: (value: number) => ExpectChain<T>,
+
+        match: (regex: RegExp) => ExpectChain<T>,
+        string: (string: string) => ExpectChain<T>,
+
+        key: (key: string) => ExpectChain<T>,
+        keys: (key: string | Array<string>, ...keys: Array<string>) => ExpectChain<T>,
+
+        throw: <E>(
+            err: Class<E> | Error | RegExp | string,                                                                                   
+            errMsgMatcher?: RegExp | string,                                                                                           
+            msg?: string) => ExpectChain<T>,
+
+        respondTo: (method: string) => ExpectChain<T>,
+        itself: ExpectChain<T>,
+
+        satisfy: (method: (value: T) => bool) => ExpectChain<T>,
+
+        closeTo: (expected: T & number, delta: number) => ExpectChain<T>,
+
+        members: (set: mixed) => ExpectChain<T>,
+        oneOf: (list: Array<T>) => ExpectChain<T>,
+
+        change: (obj: mixed, key: string) => ExpectChain<T>,
+        increase: (obj: mixed, key: string) => ExpectChain<T>,
+        decrease: (obj: mixed, key: string) => ExpectChain<T>,
+
+        // dirty-chai
+        ok: () => ExpectChain<T>,
+        true: () => ExpectChain<T>,
+        false: () => ExpectChain<T>,
+        null: () => ExpectChain<T>,
+        undefined: () => ExpectChain<T>,
+        exist: () => ExpectChain<T>,
+        empty: () => ExpectChain<T>,
+
+        // chai-immutable
+        size: (n: number) => ExpectChain<T>,
+
+        // sinon-chai
+        called: () => ExpectChain<T>,
+        callCount: (n: number) => ExpectChain<T>,
+        calledOnce: () => ExpectChain<T>,
+        calledBefore: (spy: mixed) => ExpectChain<T>,
+        calledAfter: (spy: mixed) => ExpectChain<T>,
+        calledWith: (...args: Array<mixed>) => ExpectChain<T>,
+        calledWithMatch: (...args: Array<mixed>) => ExpectChain<T>,
+        calledWithExactly: (...args: Array<mixed>) => ExpectChain<T>,
+
+        // chai-as-promised
+        eventually: ExpectChain<T>,
+        resolvedWith: (value: mixed) => Promise<mixed> & ExpectChain<T>,
+        resolved: () => Promise<mixed> & ExpectChain<T>,
+        rejectedWith: (value: mixed) => Promise<mixed> & ExpectChain<T>,
+        rejected: () => Promise<mixed> & ExpectChain<T>,
+        notify: (callback: () => mixed) => ExpectChain<T>,
+    };
+
+    declare function expect<T>(actual: T): ExpectChain<T>;
+
+    declare function use(plugin: (chai: Object, utils: Object) => void): void;
+
+    declare class assert {
+      static(expression: mixed, message?: string): void;
+      static fail(actual: mixed, expected: mixed, message?: string, operator?: string): void;
+
+      static isOk(object: mixed, message?: string): void;
+      static isNotOk(object: mixed, message?: string): void;
+
+      static equal(actual: mixed, expected: mixed, message?: string): void;
+      static notEqual(actual: mixed, expected: mixed, message?: string): void;
+
+      static strictEqual(act: mixed, exp: mixed, msg?: string): void;
+      static notStrictEqual(act: mixed, exp: mixed, msg?: string): void;
+
+      static deepEqual(act: mixed, exp: mixed, msg?: string): void;
+      static notDeepEqual(act: mixed, exp: mixed, msg?: string): void;
+
+      static isTrue(val: mixed, msg?: string): void;
+      static isNotTrue(val: mixed, msg?: string): void;
+      static isFalse(val: mixed, msg?: string): void;
+      static isNotFalse(val: mixed, msg?: string): void;
+
+      static isNull(val: mixed, msg?: string): void;
+      static isNotNull(val: mixed, msg?: string): void;
+
+      static isUndefined(val: mixed, msg?: string): void;
+      static isDefined(val: mixed, msg?: string): void;
+
+      static isNaN(val: mixed, msg?: string): void;
+      static isNotNaN(val: mixed, msg?: string): void;
+
+      static isAbove(val: number, abv: number, msg?: string): void;
+      static isBelow(val: number, blw: number, msg?: string): void;
+
+      static isAtMost(val: number, atmst: number, msg?: string): void;
+      static isAtLeast(val: number, atlst: number, msg?: string): void;
+
+      static isFunction(val: mixed, msg?: string): void;
+      static isNotFunction(val: mixed, msg?: string): void;
+
+      static isObject(val: mixed, msg?: string): void;
+      static isNotObject(val: mixed, msg?: string): void;
+
+      static isArray(val: mixed, msg?: string): void;
+      static isNotArray(val: mixed, msg?: string): void;
+
+      static isString(val: mixed, msg?: string): void;
+      static isNotString(val: mixed, msg?: string): void;
+
+      static isNumber(val: mixed, msg?: string): void;
+      static isNotNumber(val: mixed, msg?: string): void;
+
+      static isBoolean(val: mixed, msg?: string): void;
+      static isNotBoolean(val: mixed, msg?: string): void;
+
+      static typeOf(val: mixed, type: string, msg?: string): void;
+      static notTypeOf(val: mixed, type: string, msg?: string): void;
+
+      static instanceOf(val: mixed, constructor: Function, msg?: string): void;
+      static notInstanceOf(val: mixed, constructor: Function, msg?: string): void;
+
+      static include(exp: string, inc: mixed, msg?: string): void;
+      static include<T>(exp: Array<T>, inc: T, msg?: string): void;
+
+      static notInclude(exp: string, inc: mixed, msg?: string): void;
+      static notInclude<T>(exp: Array<T>, inc: T, msg?: string): void;
+
+      static match(exp: mixed, re: RegExp, msg?: string): void;
+      static notMatch(exp: mixed, re: RegExp, msg?: string): void;
+
+      static property(obj: Object, prop: string, msg?: string): void;
+      static notProperty(obj: Object, prop: string, msg?: string): void;
+      static deepProperty(obj: Object, prop: string, msg?: string): void;
+      static notDeepProperty(obj: Object, prop: string, msg?: string): void;
+
+      static propertyVal(obj: Object, prop: string, val: mixed, msg?: string): void;
+      static propertyNotVal(obj: Object, prop: string, val: mixed, msg?: string): void;
+
+      static deepPropertyVal(obj: Object, prop: string, val: mixed, msg?: string): void;
+      static deepPropertyNotVal(obj: Object, prop: string, val: mixed, msg?: string): void;
+
+      static lengthOf(exp: mixed, len: number, msg?: string): void;
+      
+      static throws<E>(
+          func: () => any,
+          err?: Class<E> | Error | RegExp | string,
+          errorMsgMatcher?: string | RegExp,
+          msg?: string): void;
+      static doesNotThrow<E>(
+          func: () => any,
+          err?: Class<E> | Error | RegExp | string,
+          errorMsgMatcher?: string | RegExp,
+          msg?: string): void;
+    }
+
+    declare var config: {
+        includeStack: boolean,
+        showDiff: boolean,
+        truncateThreshold: number
+    };
+}
diff --git a/flow-typed/npm/chromedriver_vx.x.x.js b/flow-typed/npm/chromedriver_vx.x.x.js
new file mode 100644
index 0000000..f418a7f
--- /dev/null
+++ b/flow-typed/npm/chromedriver_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: 6f322a662fbecc89a3c82bde63934210
+// flow-typed version: <<STUB>>/chromedriver_v^2.21.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'chromedriver'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'chromedriver' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'chromedriver/install' {
+  declare module.exports: any;
+}
+
+declare module 'chromedriver/lib/chromedriver' {
+  declare module.exports: any;
+}
+
+declare module 'chromedriver/testInstall' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'chromedriver/install.js' {
+  declare module.exports: $Exports<'chromedriver/install'>;
+}
+declare module 'chromedriver/lib/chromedriver.js' {
+  declare module.exports: $Exports<'chromedriver/lib/chromedriver'>;
+}
+declare module 'chromedriver/testInstall.js' {
+  declare module.exports: $Exports<'chromedriver/testInstall'>;
+}
diff --git a/flow-typed/npm/core-js_vx.x.x.js b/flow-typed/npm/core-js_vx.x.x.js
new file mode 100644
index 0000000..150c10b
--- /dev/null
+++ b/flow-typed/npm/core-js_vx.x.x.js
@@ -0,0 +1,9390 @@
+// flow-typed signature: daa8424f2304f99318c18d60d49ff641
+// flow-typed version: <<STUB>>/core-js_v^2.4.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'core-js'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'core-js' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'core-js/build/config' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/build/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/core' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/core.min' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/library' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/library.min' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/shim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/client/shim.min' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/_' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/number' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/core/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es5/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/date' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/math' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/number' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/reflect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/typed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es6/weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/math' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/reflect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/es7/system' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/_' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/concat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/from' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/pop' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/push' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/reverse' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/shift' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/splice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/unshift' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/array/virtual/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/clear-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/now' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/to-iso-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/date/to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/dom-collections/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/dom-collections/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/error/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/error/is-error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/name' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/virtual/bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/function/virtual/part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/get-iterator-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/get-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/is-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/json/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/json/stringify' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/acosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/asinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/atanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/cbrt' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/clz32' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/cosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/fround' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/hypot' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/iaddh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/imul' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/imulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/isubh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/log10' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/log2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/sinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/tanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/trunc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/math/umulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/epsilon' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/is-finite' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/is-nan' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/is-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/max-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/min-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/virtual/to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/number/virtual/to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/define-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/define-properties' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/define-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/freeze' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/get-own-property-descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/get-own-property-names' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/get-own-property-symbols' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/is-frozen' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/is-sealed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/is' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/lookup-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/lookup-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/make' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/seal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/object/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/apply' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/construct' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/define-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/delete-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/delete-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/enumerate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-own-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/get' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/has-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/has-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/reflect/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/escape' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/regexp/to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/set-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/set-interval' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/set-timeout' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/from-code-point' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/raw' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/trim-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/trim-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/trim-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/trim-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/string/virtual/unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/for' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/is-concat-spreadable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/key-for' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/to-string-tag' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/symbol/unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/system/global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/system/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/array-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/data-view' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/float32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/float64-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/int16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/int32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/int8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/uint16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/uint32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/uint8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/typed/uint8-clamped-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/fn/weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/Gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/_' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/number' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/core/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es5/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/date' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/math' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/number' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/reflect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/typed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es6/weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/math' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/reflect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/es7/system' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/_' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/concat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/from' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/pop' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/push' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/reverse' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/shift' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/splice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/unshift' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/array/virtual/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/clear-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/now' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/to-iso-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/date/to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/dom-collections/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/dom-collections/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/error/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/error/is-error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/name' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/virtual/bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/function/virtual/part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/get-iterator-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/get-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/is-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/json/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/json/stringify' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/acosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/asinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/atanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/cbrt' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/clz32' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/cosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/fround' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/hypot' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/iaddh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/imul' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/imulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/isubh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/log10' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/log2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/sinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/tanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/trunc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/math/umulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/epsilon' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/is-finite' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/is-nan' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/is-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/max-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/min-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/virtual/to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/number/virtual/to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/define-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/define-properties' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/define-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/freeze' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/get-own-property-descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/get-own-property-names' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/get-own-property-symbols' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/is-frozen' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/is-sealed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/is' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/lookup-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/lookup-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/make' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/seal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/object/values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/apply' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/construct' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/define-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/delete-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/delete-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/enumerate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-own-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/get' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/has-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/has-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/reflect/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/escape' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/regexp/to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/set-immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/set-interval' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/set-timeout' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/from-code-point' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/raw' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/trim-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/trim-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/trim-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/trim-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/string/virtual/unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/for' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/is-concat-spreadable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/key-for' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/to-string-tag' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/symbol/unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/system/global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/system/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/array-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/data-view' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/float32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/float64-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/int16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/int32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/int8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/uint16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/uint32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/uint8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/typed/uint8-clamped-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/fn/weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_a-function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_a-number-value' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_add-to-unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_an-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_an-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-from-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-methods' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-species-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_array-species-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_cof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_collection-strong' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_collection-to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_collection-weak' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_collection' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_core' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_create-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_ctx' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_date-to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_defined' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_dom-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_entry-virtual' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_enum-bug-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_enum-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_export' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_fails-is-regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_fails' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_fix-re-wks' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_for-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_hide' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_ie8-dom-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_inherit-if-required' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_invoke' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iobject' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_is-array-iter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_is-regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iter-call' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iter-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iter-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iter-detect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iter-step' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_iterators' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_keyof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_library' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_math-expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_math-log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_math-sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_meta' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_microtask' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-dp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-dps' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-forced-pam' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-gopd' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-gopn-ext' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-gopn' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-gops' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-gpo' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-keys-internal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-pie' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-sap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_object-to-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_partial' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_path' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_property-desc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_redefine-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_redefine' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_replacer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_same-value' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_set-proto' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_set-species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_set-to-string-tag' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_shared-key' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_shared' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_species-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_strict-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-context' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-pad' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_string-ws' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_task' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-iobject' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-length' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_typed-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_typed-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_typed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_uid' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_wks-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_wks-ext' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/_wks' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.function.part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.get-iterator-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.get-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.is-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.number.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.object.classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.object.define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.object.is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.object.make' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.regexp.escape' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.string.escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/core.string.unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es5' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.from' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.array.species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.date.now' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.date.to-iso-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.date.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.date.to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.date.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.function.bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.function.has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.function.name' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.acosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.asinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.atanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.cbrt' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.clz32' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.cosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.fround' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.hypot' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.imul' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.log10' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.log2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.sinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.tanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.math.trunc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.epsilon' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.is-finite' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.is-nan' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.is-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.max-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.min-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.number.to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.define-properties' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.freeze' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.get-own-property-names' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.is-frozen' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.is-sealed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.is' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.seal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.object.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.apply' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.construct' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.delete-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.enumerate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.get' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.reflect.set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.regexp.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.from-code-point' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.raw' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.string.trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.array-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.data-view' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.float32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.float64-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.int16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.int32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.int8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.uint16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.uint32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.uint8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.typed.uint8-clamped-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es6.weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.array.includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.error.is-error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.map.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.math.iaddh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.math.imulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.math.isubh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.math.umulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.define-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.define-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.enumerable-entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.enumerable-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.enumerable-values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.get-own-property-descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.lookup-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.lookup-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.object.values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.define-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.delete-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.get-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.get-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.get-own-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.get-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.has-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.has-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.reflect.metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.set.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.string.trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.symbol.async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.symbol.observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/es7.system.global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/web.dom.iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/web.immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/modules/web.timers' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/shim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/0' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/3' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/4' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/stage/pre' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/web/dom-collections' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/web/immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/web/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/library/web/timers' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_a-function' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_a-number-value' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_add-to-unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_an-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_an-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-from-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-methods' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-species-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_array-species-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_cof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_collection-strong' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_collection-to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_collection-weak' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_collection' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_core' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_create-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_ctx' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_date-to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_defined' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_dom-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_entry-virtual' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_enum-bug-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_enum-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_export' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_fails-is-regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_fails' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_fix-re-wks' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_for-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_hide' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_ie8-dom-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_inherit-if-required' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_invoke' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iobject' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_is-array-iter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_is-regexp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iter-call' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iter-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iter-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iter-detect' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iter-step' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_iterators' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_keyof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_library' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_math-expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_math-log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_math-sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_meta' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_microtask' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-dp' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-dps' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-forced-pam' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-gopd' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-gopn-ext' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-gopn' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-gops' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-gpo' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-keys-internal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-pie' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-sap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_object-to-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_partial' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_path' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_property-desc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_redefine-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_redefine' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_replacer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_same-value' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_set-proto' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_set-species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_set-to-string-tag' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_shared-key' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_shared' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_species-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_strict-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-context' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-pad' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_string-ws' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_task' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-iobject' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-length' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_typed-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_typed-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_typed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_uid' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_wks-define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_wks-ext' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/_wks' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.delay' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.dict' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.function.part' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.get-iterator-method' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.get-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.is-iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.number.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.object.classof' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.object.define' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.object.is-object' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.object.make' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.regexp.escape' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.string.escape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/core.string.unescape-html' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es5' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.copy-within' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.every' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.fill' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.filter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.find-index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.find' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.for-each' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.from' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.is-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.join' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.last-index-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.reduce-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.reduce' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.slice' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.some' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.sort' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.array.species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.date.now' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.date.to-iso-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.date.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.date.to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.date.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.function.bind' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.function.has-instance' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.function.name' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.acosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.asinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.atanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.cbrt' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.clz32' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.cosh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.expm1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.fround' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.hypot' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.imul' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.log10' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.log1p' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.log2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.sign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.sinh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.tanh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.math.trunc' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.epsilon' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.is-finite' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.is-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.is-nan' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.is-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.max-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.min-safe-integer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.to-fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.number.to-precision' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.assign' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.create' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.define-properties' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.freeze' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.get-own-property-names' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.is-frozen' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.is-sealed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.is' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.seal' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.object.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.parse-float' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.parse-int' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.promise' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.apply' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.construct' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.define-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.delete-property' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.enumerate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.get-own-property-descriptor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.get-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.get' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.has' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.is-extensible' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.own-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.prevent-extensions' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.set-prototype-of' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.reflect.set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.regexp.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.anchor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.big' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.blink' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.bold' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.code-point-at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.ends-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.fixed' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.fontcolor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.fontsize' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.from-code-point' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.italics' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.link' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.raw' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.repeat' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.small' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.starts-with' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.strike' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.sub' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.sup' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.string.trim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.symbol' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.array-buffer' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.data-view' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.float32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.float64-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.int16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.int32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.int8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.uint16-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.uint32-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.uint8-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.typed.uint8-clamped-array' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.weak-map' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es6.weak-set' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.array.includes' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.asap' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.error.is-error' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.map.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.math.iaddh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.math.imulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.math.isubh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.math.umulh' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.define-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.define-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.enumerable-entries' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.enumerable-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.enumerable-values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.get-own-property-descriptors' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.lookup-getter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.lookup-setter' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.object.values' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.define-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.delete-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.get-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.get-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.get-own-metadata-keys' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.get-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.has-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.has-own-metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.reflect.metadata' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.set.to-json' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.at' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.match-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.pad-end' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.pad-start' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.trim-left' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.string.trim-right' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.symbol.async-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.symbol.observable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/es7.system.global' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_add-to-unscopables' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_collection' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_export' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_library' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_path' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_redefine-all' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_redefine' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/_set-species' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.date.to-primitive' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.date.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.function.name' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.number.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.object.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.constructor' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.flags' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.match' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.replace' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.search' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.split' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/es6.regexp.to-string' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/library/web.dom.iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/web.dom.iterable' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/web.immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/modules/web.timers' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/shim' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/0' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/1' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/2' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/3' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/4' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/stage/pre' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/web/dom-collections' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/web/immediate' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/web/index' {
+  declare module.exports: any;
+}
+
+declare module 'core-js/web/timers' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'core-js/build/config.js' {
+  declare module.exports: $Exports<'core-js/build/config'>;
+}
+declare module 'core-js/build/index.js' {
+  declare module.exports: $Exports<'core-js/build/index'>;
+}
+declare module 'core-js/client/core.js' {
+  declare module.exports: $Exports<'core-js/client/core'>;
+}
+declare module 'core-js/client/core.min.js' {
+  declare module.exports: $Exports<'core-js/client/core.min'>;
+}
+declare module 'core-js/client/library.js' {
+  declare module.exports: $Exports<'core-js/client/library'>;
+}
+declare module 'core-js/client/library.min.js' {
+  declare module.exports: $Exports<'core-js/client/library.min'>;
+}
+declare module 'core-js/client/shim.js' {
+  declare module.exports: $Exports<'core-js/client/shim'>;
+}
+declare module 'core-js/client/shim.min.js' {
+  declare module.exports: $Exports<'core-js/client/shim.min'>;
+}
+declare module 'core-js/core/_.js' {
+  declare module.exports: $Exports<'core-js/core/_'>;
+}
+declare module 'core-js/core/delay.js' {
+  declare module.exports: $Exports<'core-js/core/delay'>;
+}
+declare module 'core-js/core/dict.js' {
+  declare module.exports: $Exports<'core-js/core/dict'>;
+}
+declare module 'core-js/core/function.js' {
+  declare module.exports: $Exports<'core-js/core/function'>;
+}
+declare module 'core-js/core/index.js' {
+  declare module.exports: $Exports<'core-js/core/index'>;
+}
+declare module 'core-js/core/number.js' {
+  declare module.exports: $Exports<'core-js/core/number'>;
+}
+declare module 'core-js/core/object.js' {
+  declare module.exports: $Exports<'core-js/core/object'>;
+}
+declare module 'core-js/core/regexp.js' {
+  declare module.exports: $Exports<'core-js/core/regexp'>;
+}
+declare module 'core-js/core/string.js' {
+  declare module.exports: $Exports<'core-js/core/string'>;
+}
+declare module 'core-js/es5/index.js' {
+  declare module.exports: $Exports<'core-js/es5/index'>;
+}
+declare module 'core-js/es6/array.js' {
+  declare module.exports: $Exports<'core-js/es6/array'>;
+}
+declare module 'core-js/es6/date.js' {
+  declare module.exports: $Exports<'core-js/es6/date'>;
+}
+declare module 'core-js/es6/function.js' {
+  declare module.exports: $Exports<'core-js/es6/function'>;
+}
+declare module 'core-js/es6/index.js' {
+  declare module.exports: $Exports<'core-js/es6/index'>;
+}
+declare module 'core-js/es6/map.js' {
+  declare module.exports: $Exports<'core-js/es6/map'>;
+}
+declare module 'core-js/es6/math.js' {
+  declare module.exports: $Exports<'core-js/es6/math'>;
+}
+declare module 'core-js/es6/number.js' {
+  declare module.exports: $Exports<'core-js/es6/number'>;
+}
+declare module 'core-js/es6/object.js' {
+  declare module.exports: $Exports<'core-js/es6/object'>;
+}
+declare module 'core-js/es6/parse-float.js' {
+  declare module.exports: $Exports<'core-js/es6/parse-float'>;
+}
+declare module 'core-js/es6/parse-int.js' {
+  declare module.exports: $Exports<'core-js/es6/parse-int'>;
+}
+declare module 'core-js/es6/promise.js' {
+  declare module.exports: $Exports<'core-js/es6/promise'>;
+}
+declare module 'core-js/es6/reflect.js' {
+  declare module.exports: $Exports<'core-js/es6/reflect'>;
+}
+declare module 'core-js/es6/regexp.js' {
+  declare module.exports: $Exports<'core-js/es6/regexp'>;
+}
+declare module 'core-js/es6/set.js' {
+  declare module.exports: $Exports<'core-js/es6/set'>;
+}
+declare module 'core-js/es6/string.js' {
+  declare module.exports: $Exports<'core-js/es6/string'>;
+}
+declare module 'core-js/es6/symbol.js' {
+  declare module.exports: $Exports<'core-js/es6/symbol'>;
+}
+declare module 'core-js/es6/typed.js' {
+  declare module.exports: $Exports<'core-js/es6/typed'>;
+}
+declare module 'core-js/es6/weak-map.js' {
+  declare module.exports: $Exports<'core-js/es6/weak-map'>;
+}
+declare module 'core-js/es6/weak-set.js' {
+  declare module.exports: $Exports<'core-js/es6/weak-set'>;
+}
+declare module 'core-js/es7/array.js' {
+  declare module.exports: $Exports<'core-js/es7/array'>;
+}
+declare module 'core-js/es7/asap.js' {
+  declare module.exports: $Exports<'core-js/es7/asap'>;
+}
+declare module 'core-js/es7/error.js' {
+  declare module.exports: $Exports<'core-js/es7/error'>;
+}
+declare module 'core-js/es7/index.js' {
+  declare module.exports: $Exports<'core-js/es7/index'>;
+}
+declare module 'core-js/es7/map.js' {
+  declare module.exports: $Exports<'core-js/es7/map'>;
+}
+declare module 'core-js/es7/math.js' {
+  declare module.exports: $Exports<'core-js/es7/math'>;
+}
+declare module 'core-js/es7/object.js' {
+  declare module.exports: $Exports<'core-js/es7/object'>;
+}
+declare module 'core-js/es7/observable.js' {
+  declare module.exports: $Exports<'core-js/es7/observable'>;
+}
+declare module 'core-js/es7/reflect.js' {
+  declare module.exports: $Exports<'core-js/es7/reflect'>;
+}
+declare module 'core-js/es7/set.js' {
+  declare module.exports: $Exports<'core-js/es7/set'>;
+}
+declare module 'core-js/es7/string.js' {
+  declare module.exports: $Exports<'core-js/es7/string'>;
+}
+declare module 'core-js/es7/symbol.js' {
+  declare module.exports: $Exports<'core-js/es7/symbol'>;
+}
+declare module 'core-js/es7/system.js' {
+  declare module.exports: $Exports<'core-js/es7/system'>;
+}
+declare module 'core-js/fn/_.js' {
+  declare module.exports: $Exports<'core-js/fn/_'>;
+}
+declare module 'core-js/fn/array/concat.js' {
+  declare module.exports: $Exports<'core-js/fn/array/concat'>;
+}
+declare module 'core-js/fn/array/copy-within.js' {
+  declare module.exports: $Exports<'core-js/fn/array/copy-within'>;
+}
+declare module 'core-js/fn/array/entries.js' {
+  declare module.exports: $Exports<'core-js/fn/array/entries'>;
+}
+declare module 'core-js/fn/array/every.js' {
+  declare module.exports: $Exports<'core-js/fn/array/every'>;
+}
+declare module 'core-js/fn/array/fill.js' {
+  declare module.exports: $Exports<'core-js/fn/array/fill'>;
+}
+declare module 'core-js/fn/array/filter.js' {
+  declare module.exports: $Exports<'core-js/fn/array/filter'>;
+}
+declare module 'core-js/fn/array/find-index.js' {
+  declare module.exports: $Exports<'core-js/fn/array/find-index'>;
+}
+declare module 'core-js/fn/array/find.js' {
+  declare module.exports: $Exports<'core-js/fn/array/find'>;
+}
+declare module 'core-js/fn/array/for-each.js' {
+  declare module.exports: $Exports<'core-js/fn/array/for-each'>;
+}
+declare module 'core-js/fn/array/from.js' {
+  declare module.exports: $Exports<'core-js/fn/array/from'>;
+}
+declare module 'core-js/fn/array/includes.js' {
+  declare module.exports: $Exports<'core-js/fn/array/includes'>;
+}
+declare module 'core-js/fn/array/index-of.js' {
+  declare module.exports: $Exports<'core-js/fn/array/index-of'>;
+}
+declare module 'core-js/fn/array/index.js' {
+  declare module.exports: $Exports<'core-js/fn/array/index'>;
+}
+declare module 'core-js/fn/array/is-array.js' {
+  declare module.exports: $Exports<'core-js/fn/array/is-array'>;
+}
+declare module 'core-js/fn/array/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/array/iterator'>;
+}
+declare module 'core-js/fn/array/join.js' {
+  declare module.exports: $Exports<'core-js/fn/array/join'>;
+}
+declare module 'core-js/fn/array/keys.js' {
+  declare module.exports: $Exports<'core-js/fn/array/keys'>;
+}
+declare module 'core-js/fn/array/last-index-of.js' {
+  declare module.exports: $Exports<'core-js/fn/array/last-index-of'>;
+}
+declare module 'core-js/fn/array/map.js' {
+  declare module.exports: $Exports<'core-js/fn/array/map'>;
+}
+declare module 'core-js/fn/array/of.js' {
+  declare module.exports: $Exports<'core-js/fn/array/of'>;
+}
+declare module 'core-js/fn/array/pop.js' {
+  declare module.exports: $Exports<'core-js/fn/array/pop'>;
+}
+declare module 'core-js/fn/array/push.js' {
+  declare module.exports: $Exports<'core-js/fn/array/push'>;
+}
+declare module 'core-js/fn/array/reduce-right.js' {
+  declare module.exports: $Exports<'core-js/fn/array/reduce-right'>;
+}
+declare module 'core-js/fn/array/reduce.js' {
+  declare module.exports: $Exports<'core-js/fn/array/reduce'>;
+}
+declare module 'core-js/fn/array/reverse.js' {
+  declare module.exports: $Exports<'core-js/fn/array/reverse'>;
+}
+declare module 'core-js/fn/array/shift.js' {
+  declare module.exports: $Exports<'core-js/fn/array/shift'>;
+}
+declare module 'core-js/fn/array/slice.js' {
+  declare module.exports: $Exports<'core-js/fn/array/slice'>;
+}
+declare module 'core-js/fn/array/some.js' {
+  declare module.exports: $Exports<'core-js/fn/array/some'>;
+}
+declare module 'core-js/fn/array/sort.js' {
+  declare module.exports: $Exports<'core-js/fn/array/sort'>;
+}
+declare module 'core-js/fn/array/splice.js' {
+  declare module.exports: $Exports<'core-js/fn/array/splice'>;
+}
+declare module 'core-js/fn/array/unshift.js' {
+  declare module.exports: $Exports<'core-js/fn/array/unshift'>;
+}
+declare module 'core-js/fn/array/values.js' {
+  declare module.exports: $Exports<'core-js/fn/array/values'>;
+}
+declare module 'core-js/fn/array/virtual/copy-within.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/copy-within'>;
+}
+declare module 'core-js/fn/array/virtual/entries.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/entries'>;
+}
+declare module 'core-js/fn/array/virtual/every.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/every'>;
+}
+declare module 'core-js/fn/array/virtual/fill.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/fill'>;
+}
+declare module 'core-js/fn/array/virtual/filter.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/filter'>;
+}
+declare module 'core-js/fn/array/virtual/find-index.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/find-index'>;
+}
+declare module 'core-js/fn/array/virtual/find.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/find'>;
+}
+declare module 'core-js/fn/array/virtual/for-each.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/for-each'>;
+}
+declare module 'core-js/fn/array/virtual/includes.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/includes'>;
+}
+declare module 'core-js/fn/array/virtual/index-of.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/index-of'>;
+}
+declare module 'core-js/fn/array/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/index'>;
+}
+declare module 'core-js/fn/array/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/iterator'>;
+}
+declare module 'core-js/fn/array/virtual/join.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/join'>;
+}
+declare module 'core-js/fn/array/virtual/keys.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/keys'>;
+}
+declare module 'core-js/fn/array/virtual/last-index-of.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/last-index-of'>;
+}
+declare module 'core-js/fn/array/virtual/map.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/map'>;
+}
+declare module 'core-js/fn/array/virtual/reduce-right.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/reduce-right'>;
+}
+declare module 'core-js/fn/array/virtual/reduce.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/reduce'>;
+}
+declare module 'core-js/fn/array/virtual/slice.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/slice'>;
+}
+declare module 'core-js/fn/array/virtual/some.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/some'>;
+}
+declare module 'core-js/fn/array/virtual/sort.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/sort'>;
+}
+declare module 'core-js/fn/array/virtual/values.js' {
+  declare module.exports: $Exports<'core-js/fn/array/virtual/values'>;
+}
+declare module 'core-js/fn/asap.js' {
+  declare module.exports: $Exports<'core-js/fn/asap'>;
+}
+declare module 'core-js/fn/clear-immediate.js' {
+  declare module.exports: $Exports<'core-js/fn/clear-immediate'>;
+}
+declare module 'core-js/fn/date/index.js' {
+  declare module.exports: $Exports<'core-js/fn/date/index'>;
+}
+declare module 'core-js/fn/date/now.js' {
+  declare module.exports: $Exports<'core-js/fn/date/now'>;
+}
+declare module 'core-js/fn/date/to-iso-string.js' {
+  declare module.exports: $Exports<'core-js/fn/date/to-iso-string'>;
+}
+declare module 'core-js/fn/date/to-json.js' {
+  declare module.exports: $Exports<'core-js/fn/date/to-json'>;
+}
+declare module 'core-js/fn/date/to-primitive.js' {
+  declare module.exports: $Exports<'core-js/fn/date/to-primitive'>;
+}
+declare module 'core-js/fn/date/to-string.js' {
+  declare module.exports: $Exports<'core-js/fn/date/to-string'>;
+}
+declare module 'core-js/fn/delay.js' {
+  declare module.exports: $Exports<'core-js/fn/delay'>;
+}
+declare module 'core-js/fn/dict.js' {
+  declare module.exports: $Exports<'core-js/fn/dict'>;
+}
+declare module 'core-js/fn/dom-collections/index.js' {
+  declare module.exports: $Exports<'core-js/fn/dom-collections/index'>;
+}
+declare module 'core-js/fn/dom-collections/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/dom-collections/iterator'>;
+}
+declare module 'core-js/fn/error/index.js' {
+  declare module.exports: $Exports<'core-js/fn/error/index'>;
+}
+declare module 'core-js/fn/error/is-error.js' {
+  declare module.exports: $Exports<'core-js/fn/error/is-error'>;
+}
+declare module 'core-js/fn/function/bind.js' {
+  declare module.exports: $Exports<'core-js/fn/function/bind'>;
+}
+declare module 'core-js/fn/function/has-instance.js' {
+  declare module.exports: $Exports<'core-js/fn/function/has-instance'>;
+}
+declare module 'core-js/fn/function/index.js' {
+  declare module.exports: $Exports<'core-js/fn/function/index'>;
+}
+declare module 'core-js/fn/function/name.js' {
+  declare module.exports: $Exports<'core-js/fn/function/name'>;
+}
+declare module 'core-js/fn/function/part.js' {
+  declare module.exports: $Exports<'core-js/fn/function/part'>;
+}
+declare module 'core-js/fn/function/virtual/bind.js' {
+  declare module.exports: $Exports<'core-js/fn/function/virtual/bind'>;
+}
+declare module 'core-js/fn/function/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/fn/function/virtual/index'>;
+}
+declare module 'core-js/fn/function/virtual/part.js' {
+  declare module.exports: $Exports<'core-js/fn/function/virtual/part'>;
+}
+declare module 'core-js/fn/get-iterator-method.js' {
+  declare module.exports: $Exports<'core-js/fn/get-iterator-method'>;
+}
+declare module 'core-js/fn/get-iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/get-iterator'>;
+}
+declare module 'core-js/fn/is-iterable.js' {
+  declare module.exports: $Exports<'core-js/fn/is-iterable'>;
+}
+declare module 'core-js/fn/json/index.js' {
+  declare module.exports: $Exports<'core-js/fn/json/index'>;
+}
+declare module 'core-js/fn/json/stringify.js' {
+  declare module.exports: $Exports<'core-js/fn/json/stringify'>;
+}
+declare module 'core-js/fn/map.js' {
+  declare module.exports: $Exports<'core-js/fn/map'>;
+}
+declare module 'core-js/fn/math/acosh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/acosh'>;
+}
+declare module 'core-js/fn/math/asinh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/asinh'>;
+}
+declare module 'core-js/fn/math/atanh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/atanh'>;
+}
+declare module 'core-js/fn/math/cbrt.js' {
+  declare module.exports: $Exports<'core-js/fn/math/cbrt'>;
+}
+declare module 'core-js/fn/math/clz32.js' {
+  declare module.exports: $Exports<'core-js/fn/math/clz32'>;
+}
+declare module 'core-js/fn/math/cosh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/cosh'>;
+}
+declare module 'core-js/fn/math/expm1.js' {
+  declare module.exports: $Exports<'core-js/fn/math/expm1'>;
+}
+declare module 'core-js/fn/math/fround.js' {
+  declare module.exports: $Exports<'core-js/fn/math/fround'>;
+}
+declare module 'core-js/fn/math/hypot.js' {
+  declare module.exports: $Exports<'core-js/fn/math/hypot'>;
+}
+declare module 'core-js/fn/math/iaddh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/iaddh'>;
+}
+declare module 'core-js/fn/math/imul.js' {
+  declare module.exports: $Exports<'core-js/fn/math/imul'>;
+}
+declare module 'core-js/fn/math/imulh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/imulh'>;
+}
+declare module 'core-js/fn/math/index.js' {
+  declare module.exports: $Exports<'core-js/fn/math/index'>;
+}
+declare module 'core-js/fn/math/isubh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/isubh'>;
+}
+declare module 'core-js/fn/math/log10.js' {
+  declare module.exports: $Exports<'core-js/fn/math/log10'>;
+}
+declare module 'core-js/fn/math/log1p.js' {
+  declare module.exports: $Exports<'core-js/fn/math/log1p'>;
+}
+declare module 'core-js/fn/math/log2.js' {
+  declare module.exports: $Exports<'core-js/fn/math/log2'>;
+}
+declare module 'core-js/fn/math/sign.js' {
+  declare module.exports: $Exports<'core-js/fn/math/sign'>;
+}
+declare module 'core-js/fn/math/sinh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/sinh'>;
+}
+declare module 'core-js/fn/math/tanh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/tanh'>;
+}
+declare module 'core-js/fn/math/trunc.js' {
+  declare module.exports: $Exports<'core-js/fn/math/trunc'>;
+}
+declare module 'core-js/fn/math/umulh.js' {
+  declare module.exports: $Exports<'core-js/fn/math/umulh'>;
+}
+declare module 'core-js/fn/number/constructor.js' {
+  declare module.exports: $Exports<'core-js/fn/number/constructor'>;
+}
+declare module 'core-js/fn/number/epsilon.js' {
+  declare module.exports: $Exports<'core-js/fn/number/epsilon'>;
+}
+declare module 'core-js/fn/number/index.js' {
+  declare module.exports: $Exports<'core-js/fn/number/index'>;
+}
+declare module 'core-js/fn/number/is-finite.js' {
+  declare module.exports: $Exports<'core-js/fn/number/is-finite'>;
+}
+declare module 'core-js/fn/number/is-integer.js' {
+  declare module.exports: $Exports<'core-js/fn/number/is-integer'>;
+}
+declare module 'core-js/fn/number/is-nan.js' {
+  declare module.exports: $Exports<'core-js/fn/number/is-nan'>;
+}
+declare module 'core-js/fn/number/is-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/fn/number/is-safe-integer'>;
+}
+declare module 'core-js/fn/number/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/number/iterator'>;
+}
+declare module 'core-js/fn/number/max-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/fn/number/max-safe-integer'>;
+}
+declare module 'core-js/fn/number/min-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/fn/number/min-safe-integer'>;
+}
+declare module 'core-js/fn/number/parse-float.js' {
+  declare module.exports: $Exports<'core-js/fn/number/parse-float'>;
+}
+declare module 'core-js/fn/number/parse-int.js' {
+  declare module.exports: $Exports<'core-js/fn/number/parse-int'>;
+}
+declare module 'core-js/fn/number/to-fixed.js' {
+  declare module.exports: $Exports<'core-js/fn/number/to-fixed'>;
+}
+declare module 'core-js/fn/number/to-precision.js' {
+  declare module.exports: $Exports<'core-js/fn/number/to-precision'>;
+}
+declare module 'core-js/fn/number/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/fn/number/virtual/index'>;
+}
+declare module 'core-js/fn/number/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/number/virtual/iterator'>;
+}
+declare module 'core-js/fn/number/virtual/to-fixed.js' {
+  declare module.exports: $Exports<'core-js/fn/number/virtual/to-fixed'>;
+}
+declare module 'core-js/fn/number/virtual/to-precision.js' {
+  declare module.exports: $Exports<'core-js/fn/number/virtual/to-precision'>;
+}
+declare module 'core-js/fn/object/assign.js' {
+  declare module.exports: $Exports<'core-js/fn/object/assign'>;
+}
+declare module 'core-js/fn/object/classof.js' {
+  declare module.exports: $Exports<'core-js/fn/object/classof'>;
+}
+declare module 'core-js/fn/object/create.js' {
+  declare module.exports: $Exports<'core-js/fn/object/create'>;
+}
+declare module 'core-js/fn/object/define-getter.js' {
+  declare module.exports: $Exports<'core-js/fn/object/define-getter'>;
+}
+declare module 'core-js/fn/object/define-properties.js' {
+  declare module.exports: $Exports<'core-js/fn/object/define-properties'>;
+}
+declare module 'core-js/fn/object/define-property.js' {
+  declare module.exports: $Exports<'core-js/fn/object/define-property'>;
+}
+declare module 'core-js/fn/object/define-setter.js' {
+  declare module.exports: $Exports<'core-js/fn/object/define-setter'>;
+}
+declare module 'core-js/fn/object/define.js' {
+  declare module.exports: $Exports<'core-js/fn/object/define'>;
+}
+declare module 'core-js/fn/object/entries.js' {
+  declare module.exports: $Exports<'core-js/fn/object/entries'>;
+}
+declare module 'core-js/fn/object/freeze.js' {
+  declare module.exports: $Exports<'core-js/fn/object/freeze'>;
+}
+declare module 'core-js/fn/object/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/fn/object/get-own-property-descriptor'>;
+}
+declare module 'core-js/fn/object/get-own-property-descriptors.js' {
+  declare module.exports: $Exports<'core-js/fn/object/get-own-property-descriptors'>;
+}
+declare module 'core-js/fn/object/get-own-property-names.js' {
+  declare module.exports: $Exports<'core-js/fn/object/get-own-property-names'>;
+}
+declare module 'core-js/fn/object/get-own-property-symbols.js' {
+  declare module.exports: $Exports<'core-js/fn/object/get-own-property-symbols'>;
+}
+declare module 'core-js/fn/object/get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/fn/object/get-prototype-of'>;
+}
+declare module 'core-js/fn/object/index.js' {
+  declare module.exports: $Exports<'core-js/fn/object/index'>;
+}
+declare module 'core-js/fn/object/is-extensible.js' {
+  declare module.exports: $Exports<'core-js/fn/object/is-extensible'>;
+}
+declare module 'core-js/fn/object/is-frozen.js' {
+  declare module.exports: $Exports<'core-js/fn/object/is-frozen'>;
+}
+declare module 'core-js/fn/object/is-object.js' {
+  declare module.exports: $Exports<'core-js/fn/object/is-object'>;
+}
+declare module 'core-js/fn/object/is-sealed.js' {
+  declare module.exports: $Exports<'core-js/fn/object/is-sealed'>;
+}
+declare module 'core-js/fn/object/is.js' {
+  declare module.exports: $Exports<'core-js/fn/object/is'>;
+}
+declare module 'core-js/fn/object/keys.js' {
+  declare module.exports: $Exports<'core-js/fn/object/keys'>;
+}
+declare module 'core-js/fn/object/lookup-getter.js' {
+  declare module.exports: $Exports<'core-js/fn/object/lookup-getter'>;
+}
+declare module 'core-js/fn/object/lookup-setter.js' {
+  declare module.exports: $Exports<'core-js/fn/object/lookup-setter'>;
+}
+declare module 'core-js/fn/object/make.js' {
+  declare module.exports: $Exports<'core-js/fn/object/make'>;
+}
+declare module 'core-js/fn/object/prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/fn/object/prevent-extensions'>;
+}
+declare module 'core-js/fn/object/seal.js' {
+  declare module.exports: $Exports<'core-js/fn/object/seal'>;
+}
+declare module 'core-js/fn/object/set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/fn/object/set-prototype-of'>;
+}
+declare module 'core-js/fn/object/values.js' {
+  declare module.exports: $Exports<'core-js/fn/object/values'>;
+}
+declare module 'core-js/fn/observable.js' {
+  declare module.exports: $Exports<'core-js/fn/observable'>;
+}
+declare module 'core-js/fn/parse-float.js' {
+  declare module.exports: $Exports<'core-js/fn/parse-float'>;
+}
+declare module 'core-js/fn/parse-int.js' {
+  declare module.exports: $Exports<'core-js/fn/parse-int'>;
+}
+declare module 'core-js/fn/promise.js' {
+  declare module.exports: $Exports<'core-js/fn/promise'>;
+}
+declare module 'core-js/fn/reflect/apply.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/apply'>;
+}
+declare module 'core-js/fn/reflect/construct.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/construct'>;
+}
+declare module 'core-js/fn/reflect/define-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/define-metadata'>;
+}
+declare module 'core-js/fn/reflect/define-property.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/define-property'>;
+}
+declare module 'core-js/fn/reflect/delete-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/delete-metadata'>;
+}
+declare module 'core-js/fn/reflect/delete-property.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/delete-property'>;
+}
+declare module 'core-js/fn/reflect/enumerate.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/enumerate'>;
+}
+declare module 'core-js/fn/reflect/get-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-metadata-keys'>;
+}
+declare module 'core-js/fn/reflect/get-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-metadata'>;
+}
+declare module 'core-js/fn/reflect/get-own-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-own-metadata-keys'>;
+}
+declare module 'core-js/fn/reflect/get-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-own-metadata'>;
+}
+declare module 'core-js/fn/reflect/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-own-property-descriptor'>;
+}
+declare module 'core-js/fn/reflect/get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get-prototype-of'>;
+}
+declare module 'core-js/fn/reflect/get.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/get'>;
+}
+declare module 'core-js/fn/reflect/has-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/has-metadata'>;
+}
+declare module 'core-js/fn/reflect/has-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/has-own-metadata'>;
+}
+declare module 'core-js/fn/reflect/has.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/has'>;
+}
+declare module 'core-js/fn/reflect/index.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/index'>;
+}
+declare module 'core-js/fn/reflect/is-extensible.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/is-extensible'>;
+}
+declare module 'core-js/fn/reflect/metadata.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/metadata'>;
+}
+declare module 'core-js/fn/reflect/own-keys.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/own-keys'>;
+}
+declare module 'core-js/fn/reflect/prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/prevent-extensions'>;
+}
+declare module 'core-js/fn/reflect/set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/set-prototype-of'>;
+}
+declare module 'core-js/fn/reflect/set.js' {
+  declare module.exports: $Exports<'core-js/fn/reflect/set'>;
+}
+declare module 'core-js/fn/regexp/constructor.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/constructor'>;
+}
+declare module 'core-js/fn/regexp/escape.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/escape'>;
+}
+declare module 'core-js/fn/regexp/flags.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/flags'>;
+}
+declare module 'core-js/fn/regexp/index.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/index'>;
+}
+declare module 'core-js/fn/regexp/match.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/match'>;
+}
+declare module 'core-js/fn/regexp/replace.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/replace'>;
+}
+declare module 'core-js/fn/regexp/search.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/search'>;
+}
+declare module 'core-js/fn/regexp/split.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/split'>;
+}
+declare module 'core-js/fn/regexp/to-string.js' {
+  declare module.exports: $Exports<'core-js/fn/regexp/to-string'>;
+}
+declare module 'core-js/fn/set-immediate.js' {
+  declare module.exports: $Exports<'core-js/fn/set-immediate'>;
+}
+declare module 'core-js/fn/set-interval.js' {
+  declare module.exports: $Exports<'core-js/fn/set-interval'>;
+}
+declare module 'core-js/fn/set-timeout.js' {
+  declare module.exports: $Exports<'core-js/fn/set-timeout'>;
+}
+declare module 'core-js/fn/set.js' {
+  declare module.exports: $Exports<'core-js/fn/set'>;
+}
+declare module 'core-js/fn/string/anchor.js' {
+  declare module.exports: $Exports<'core-js/fn/string/anchor'>;
+}
+declare module 'core-js/fn/string/at.js' {
+  declare module.exports: $Exports<'core-js/fn/string/at'>;
+}
+declare module 'core-js/fn/string/big.js' {
+  declare module.exports: $Exports<'core-js/fn/string/big'>;
+}
+declare module 'core-js/fn/string/blink.js' {
+  declare module.exports: $Exports<'core-js/fn/string/blink'>;
+}
+declare module 'core-js/fn/string/bold.js' {
+  declare module.exports: $Exports<'core-js/fn/string/bold'>;
+}
+declare module 'core-js/fn/string/code-point-at.js' {
+  declare module.exports: $Exports<'core-js/fn/string/code-point-at'>;
+}
+declare module 'core-js/fn/string/ends-with.js' {
+  declare module.exports: $Exports<'core-js/fn/string/ends-with'>;
+}
+declare module 'core-js/fn/string/escape-html.js' {
+  declare module.exports: $Exports<'core-js/fn/string/escape-html'>;
+}
+declare module 'core-js/fn/string/fixed.js' {
+  declare module.exports: $Exports<'core-js/fn/string/fixed'>;
+}
+declare module 'core-js/fn/string/fontcolor.js' {
+  declare module.exports: $Exports<'core-js/fn/string/fontcolor'>;
+}
+declare module 'core-js/fn/string/fontsize.js' {
+  declare module.exports: $Exports<'core-js/fn/string/fontsize'>;
+}
+declare module 'core-js/fn/string/from-code-point.js' {
+  declare module.exports: $Exports<'core-js/fn/string/from-code-point'>;
+}
+declare module 'core-js/fn/string/includes.js' {
+  declare module.exports: $Exports<'core-js/fn/string/includes'>;
+}
+declare module 'core-js/fn/string/index.js' {
+  declare module.exports: $Exports<'core-js/fn/string/index'>;
+}
+declare module 'core-js/fn/string/italics.js' {
+  declare module.exports: $Exports<'core-js/fn/string/italics'>;
+}
+declare module 'core-js/fn/string/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/string/iterator'>;
+}
+declare module 'core-js/fn/string/link.js' {
+  declare module.exports: $Exports<'core-js/fn/string/link'>;
+}
+declare module 'core-js/fn/string/match-all.js' {
+  declare module.exports: $Exports<'core-js/fn/string/match-all'>;
+}
+declare module 'core-js/fn/string/pad-end.js' {
+  declare module.exports: $Exports<'core-js/fn/string/pad-end'>;
+}
+declare module 'core-js/fn/string/pad-start.js' {
+  declare module.exports: $Exports<'core-js/fn/string/pad-start'>;
+}
+declare module 'core-js/fn/string/raw.js' {
+  declare module.exports: $Exports<'core-js/fn/string/raw'>;
+}
+declare module 'core-js/fn/string/repeat.js' {
+  declare module.exports: $Exports<'core-js/fn/string/repeat'>;
+}
+declare module 'core-js/fn/string/small.js' {
+  declare module.exports: $Exports<'core-js/fn/string/small'>;
+}
+declare module 'core-js/fn/string/starts-with.js' {
+  declare module.exports: $Exports<'core-js/fn/string/starts-with'>;
+}
+declare module 'core-js/fn/string/strike.js' {
+  declare module.exports: $Exports<'core-js/fn/string/strike'>;
+}
+declare module 'core-js/fn/string/sub.js' {
+  declare module.exports: $Exports<'core-js/fn/string/sub'>;
+}
+declare module 'core-js/fn/string/sup.js' {
+  declare module.exports: $Exports<'core-js/fn/string/sup'>;
+}
+declare module 'core-js/fn/string/trim-end.js' {
+  declare module.exports: $Exports<'core-js/fn/string/trim-end'>;
+}
+declare module 'core-js/fn/string/trim-left.js' {
+  declare module.exports: $Exports<'core-js/fn/string/trim-left'>;
+}
+declare module 'core-js/fn/string/trim-right.js' {
+  declare module.exports: $Exports<'core-js/fn/string/trim-right'>;
+}
+declare module 'core-js/fn/string/trim-start.js' {
+  declare module.exports: $Exports<'core-js/fn/string/trim-start'>;
+}
+declare module 'core-js/fn/string/trim.js' {
+  declare module.exports: $Exports<'core-js/fn/string/trim'>;
+}
+declare module 'core-js/fn/string/unescape-html.js' {
+  declare module.exports: $Exports<'core-js/fn/string/unescape-html'>;
+}
+declare module 'core-js/fn/string/virtual/anchor.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/anchor'>;
+}
+declare module 'core-js/fn/string/virtual/at.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/at'>;
+}
+declare module 'core-js/fn/string/virtual/big.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/big'>;
+}
+declare module 'core-js/fn/string/virtual/blink.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/blink'>;
+}
+declare module 'core-js/fn/string/virtual/bold.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/bold'>;
+}
+declare module 'core-js/fn/string/virtual/code-point-at.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/code-point-at'>;
+}
+declare module 'core-js/fn/string/virtual/ends-with.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/ends-with'>;
+}
+declare module 'core-js/fn/string/virtual/escape-html.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/escape-html'>;
+}
+declare module 'core-js/fn/string/virtual/fixed.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/fixed'>;
+}
+declare module 'core-js/fn/string/virtual/fontcolor.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/fontcolor'>;
+}
+declare module 'core-js/fn/string/virtual/fontsize.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/fontsize'>;
+}
+declare module 'core-js/fn/string/virtual/includes.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/includes'>;
+}
+declare module 'core-js/fn/string/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/index'>;
+}
+declare module 'core-js/fn/string/virtual/italics.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/italics'>;
+}
+declare module 'core-js/fn/string/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/iterator'>;
+}
+declare module 'core-js/fn/string/virtual/link.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/link'>;
+}
+declare module 'core-js/fn/string/virtual/match-all.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/match-all'>;
+}
+declare module 'core-js/fn/string/virtual/pad-end.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/pad-end'>;
+}
+declare module 'core-js/fn/string/virtual/pad-start.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/pad-start'>;
+}
+declare module 'core-js/fn/string/virtual/repeat.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/repeat'>;
+}
+declare module 'core-js/fn/string/virtual/small.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/small'>;
+}
+declare module 'core-js/fn/string/virtual/starts-with.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/starts-with'>;
+}
+declare module 'core-js/fn/string/virtual/strike.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/strike'>;
+}
+declare module 'core-js/fn/string/virtual/sub.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/sub'>;
+}
+declare module 'core-js/fn/string/virtual/sup.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/sup'>;
+}
+declare module 'core-js/fn/string/virtual/trim-end.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/trim-end'>;
+}
+declare module 'core-js/fn/string/virtual/trim-left.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/trim-left'>;
+}
+declare module 'core-js/fn/string/virtual/trim-right.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/trim-right'>;
+}
+declare module 'core-js/fn/string/virtual/trim-start.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/trim-start'>;
+}
+declare module 'core-js/fn/string/virtual/trim.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/trim'>;
+}
+declare module 'core-js/fn/string/virtual/unescape-html.js' {
+  declare module.exports: $Exports<'core-js/fn/string/virtual/unescape-html'>;
+}
+declare module 'core-js/fn/symbol/async-iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/async-iterator'>;
+}
+declare module 'core-js/fn/symbol/for.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/for'>;
+}
+declare module 'core-js/fn/symbol/has-instance.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/has-instance'>;
+}
+declare module 'core-js/fn/symbol/index.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/index'>;
+}
+declare module 'core-js/fn/symbol/is-concat-spreadable.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/is-concat-spreadable'>;
+}
+declare module 'core-js/fn/symbol/iterator.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/iterator'>;
+}
+declare module 'core-js/fn/symbol/key-for.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/key-for'>;
+}
+declare module 'core-js/fn/symbol/match.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/match'>;
+}
+declare module 'core-js/fn/symbol/observable.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/observable'>;
+}
+declare module 'core-js/fn/symbol/replace.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/replace'>;
+}
+declare module 'core-js/fn/symbol/search.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/search'>;
+}
+declare module 'core-js/fn/symbol/species.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/species'>;
+}
+declare module 'core-js/fn/symbol/split.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/split'>;
+}
+declare module 'core-js/fn/symbol/to-primitive.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/to-primitive'>;
+}
+declare module 'core-js/fn/symbol/to-string-tag.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/to-string-tag'>;
+}
+declare module 'core-js/fn/symbol/unscopables.js' {
+  declare module.exports: $Exports<'core-js/fn/symbol/unscopables'>;
+}
+declare module 'core-js/fn/system/global.js' {
+  declare module.exports: $Exports<'core-js/fn/system/global'>;
+}
+declare module 'core-js/fn/system/index.js' {
+  declare module.exports: $Exports<'core-js/fn/system/index'>;
+}
+declare module 'core-js/fn/typed/array-buffer.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/array-buffer'>;
+}
+declare module 'core-js/fn/typed/data-view.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/data-view'>;
+}
+declare module 'core-js/fn/typed/float32-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/float32-array'>;
+}
+declare module 'core-js/fn/typed/float64-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/float64-array'>;
+}
+declare module 'core-js/fn/typed/index.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/index'>;
+}
+declare module 'core-js/fn/typed/int16-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/int16-array'>;
+}
+declare module 'core-js/fn/typed/int32-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/int32-array'>;
+}
+declare module 'core-js/fn/typed/int8-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/int8-array'>;
+}
+declare module 'core-js/fn/typed/uint16-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/uint16-array'>;
+}
+declare module 'core-js/fn/typed/uint32-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/uint32-array'>;
+}
+declare module 'core-js/fn/typed/uint8-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/uint8-array'>;
+}
+declare module 'core-js/fn/typed/uint8-clamped-array.js' {
+  declare module.exports: $Exports<'core-js/fn/typed/uint8-clamped-array'>;
+}
+declare module 'core-js/fn/weak-map.js' {
+  declare module.exports: $Exports<'core-js/fn/weak-map'>;
+}
+declare module 'core-js/fn/weak-set.js' {
+  declare module.exports: $Exports<'core-js/fn/weak-set'>;
+}
+declare module 'core-js/Gruntfile.js' {
+  declare module.exports: $Exports<'core-js/Gruntfile'>;
+}
+declare module 'core-js/index' {
+  declare module.exports: $Exports<'core-js'>;
+}
+declare module 'core-js/index.js' {
+  declare module.exports: $Exports<'core-js'>;
+}
+declare module 'core-js/library/core/_.js' {
+  declare module.exports: $Exports<'core-js/library/core/_'>;
+}
+declare module 'core-js/library/core/delay.js' {
+  declare module.exports: $Exports<'core-js/library/core/delay'>;
+}
+declare module 'core-js/library/core/dict.js' {
+  declare module.exports: $Exports<'core-js/library/core/dict'>;
+}
+declare module 'core-js/library/core/function.js' {
+  declare module.exports: $Exports<'core-js/library/core/function'>;
+}
+declare module 'core-js/library/core/index.js' {
+  declare module.exports: $Exports<'core-js/library/core/index'>;
+}
+declare module 'core-js/library/core/number.js' {
+  declare module.exports: $Exports<'core-js/library/core/number'>;
+}
+declare module 'core-js/library/core/object.js' {
+  declare module.exports: $Exports<'core-js/library/core/object'>;
+}
+declare module 'core-js/library/core/regexp.js' {
+  declare module.exports: $Exports<'core-js/library/core/regexp'>;
+}
+declare module 'core-js/library/core/string.js' {
+  declare module.exports: $Exports<'core-js/library/core/string'>;
+}
+declare module 'core-js/library/es5/index.js' {
+  declare module.exports: $Exports<'core-js/library/es5/index'>;
+}
+declare module 'core-js/library/es6/array.js' {
+  declare module.exports: $Exports<'core-js/library/es6/array'>;
+}
+declare module 'core-js/library/es6/date.js' {
+  declare module.exports: $Exports<'core-js/library/es6/date'>;
+}
+declare module 'core-js/library/es6/function.js' {
+  declare module.exports: $Exports<'core-js/library/es6/function'>;
+}
+declare module 'core-js/library/es6/index.js' {
+  declare module.exports: $Exports<'core-js/library/es6/index'>;
+}
+declare module 'core-js/library/es6/map.js' {
+  declare module.exports: $Exports<'core-js/library/es6/map'>;
+}
+declare module 'core-js/library/es6/math.js' {
+  declare module.exports: $Exports<'core-js/library/es6/math'>;
+}
+declare module 'core-js/library/es6/number.js' {
+  declare module.exports: $Exports<'core-js/library/es6/number'>;
+}
+declare module 'core-js/library/es6/object.js' {
+  declare module.exports: $Exports<'core-js/library/es6/object'>;
+}
+declare module 'core-js/library/es6/parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/es6/parse-float'>;
+}
+declare module 'core-js/library/es6/parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/es6/parse-int'>;
+}
+declare module 'core-js/library/es6/promise.js' {
+  declare module.exports: $Exports<'core-js/library/es6/promise'>;
+}
+declare module 'core-js/library/es6/reflect.js' {
+  declare module.exports: $Exports<'core-js/library/es6/reflect'>;
+}
+declare module 'core-js/library/es6/regexp.js' {
+  declare module.exports: $Exports<'core-js/library/es6/regexp'>;
+}
+declare module 'core-js/library/es6/set.js' {
+  declare module.exports: $Exports<'core-js/library/es6/set'>;
+}
+declare module 'core-js/library/es6/string.js' {
+  declare module.exports: $Exports<'core-js/library/es6/string'>;
+}
+declare module 'core-js/library/es6/symbol.js' {
+  declare module.exports: $Exports<'core-js/library/es6/symbol'>;
+}
+declare module 'core-js/library/es6/typed.js' {
+  declare module.exports: $Exports<'core-js/library/es6/typed'>;
+}
+declare module 'core-js/library/es6/weak-map.js' {
+  declare module.exports: $Exports<'core-js/library/es6/weak-map'>;
+}
+declare module 'core-js/library/es6/weak-set.js' {
+  declare module.exports: $Exports<'core-js/library/es6/weak-set'>;
+}
+declare module 'core-js/library/es7/array.js' {
+  declare module.exports: $Exports<'core-js/library/es7/array'>;
+}
+declare module 'core-js/library/es7/asap.js' {
+  declare module.exports: $Exports<'core-js/library/es7/asap'>;
+}
+declare module 'core-js/library/es7/error.js' {
+  declare module.exports: $Exports<'core-js/library/es7/error'>;
+}
+declare module 'core-js/library/es7/index.js' {
+  declare module.exports: $Exports<'core-js/library/es7/index'>;
+}
+declare module 'core-js/library/es7/map.js' {
+  declare module.exports: $Exports<'core-js/library/es7/map'>;
+}
+declare module 'core-js/library/es7/math.js' {
+  declare module.exports: $Exports<'core-js/library/es7/math'>;
+}
+declare module 'core-js/library/es7/object.js' {
+  declare module.exports: $Exports<'core-js/library/es7/object'>;
+}
+declare module 'core-js/library/es7/observable.js' {
+  declare module.exports: $Exports<'core-js/library/es7/observable'>;
+}
+declare module 'core-js/library/es7/reflect.js' {
+  declare module.exports: $Exports<'core-js/library/es7/reflect'>;
+}
+declare module 'core-js/library/es7/set.js' {
+  declare module.exports: $Exports<'core-js/library/es7/set'>;
+}
+declare module 'core-js/library/es7/string.js' {
+  declare module.exports: $Exports<'core-js/library/es7/string'>;
+}
+declare module 'core-js/library/es7/symbol.js' {
+  declare module.exports: $Exports<'core-js/library/es7/symbol'>;
+}
+declare module 'core-js/library/es7/system.js' {
+  declare module.exports: $Exports<'core-js/library/es7/system'>;
+}
+declare module 'core-js/library/fn/_.js' {
+  declare module.exports: $Exports<'core-js/library/fn/_'>;
+}
+declare module 'core-js/library/fn/array/concat.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/concat'>;
+}
+declare module 'core-js/library/fn/array/copy-within.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/copy-within'>;
+}
+declare module 'core-js/library/fn/array/entries.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/entries'>;
+}
+declare module 'core-js/library/fn/array/every.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/every'>;
+}
+declare module 'core-js/library/fn/array/fill.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/fill'>;
+}
+declare module 'core-js/library/fn/array/filter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/filter'>;
+}
+declare module 'core-js/library/fn/array/find-index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/find-index'>;
+}
+declare module 'core-js/library/fn/array/find.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/find'>;
+}
+declare module 'core-js/library/fn/array/for-each.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/for-each'>;
+}
+declare module 'core-js/library/fn/array/from.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/from'>;
+}
+declare module 'core-js/library/fn/array/includes.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/includes'>;
+}
+declare module 'core-js/library/fn/array/index-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/index-of'>;
+}
+declare module 'core-js/library/fn/array/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/index'>;
+}
+declare module 'core-js/library/fn/array/is-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/is-array'>;
+}
+declare module 'core-js/library/fn/array/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/iterator'>;
+}
+declare module 'core-js/library/fn/array/join.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/join'>;
+}
+declare module 'core-js/library/fn/array/keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/keys'>;
+}
+declare module 'core-js/library/fn/array/last-index-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/last-index-of'>;
+}
+declare module 'core-js/library/fn/array/map.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/map'>;
+}
+declare module 'core-js/library/fn/array/of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/of'>;
+}
+declare module 'core-js/library/fn/array/pop.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/pop'>;
+}
+declare module 'core-js/library/fn/array/push.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/push'>;
+}
+declare module 'core-js/library/fn/array/reduce-right.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/reduce-right'>;
+}
+declare module 'core-js/library/fn/array/reduce.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/reduce'>;
+}
+declare module 'core-js/library/fn/array/reverse.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/reverse'>;
+}
+declare module 'core-js/library/fn/array/shift.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/shift'>;
+}
+declare module 'core-js/library/fn/array/slice.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/slice'>;
+}
+declare module 'core-js/library/fn/array/some.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/some'>;
+}
+declare module 'core-js/library/fn/array/sort.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/sort'>;
+}
+declare module 'core-js/library/fn/array/splice.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/splice'>;
+}
+declare module 'core-js/library/fn/array/unshift.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/unshift'>;
+}
+declare module 'core-js/library/fn/array/values.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/values'>;
+}
+declare module 'core-js/library/fn/array/virtual/copy-within.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/copy-within'>;
+}
+declare module 'core-js/library/fn/array/virtual/entries.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/entries'>;
+}
+declare module 'core-js/library/fn/array/virtual/every.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/every'>;
+}
+declare module 'core-js/library/fn/array/virtual/fill.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/fill'>;
+}
+declare module 'core-js/library/fn/array/virtual/filter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/filter'>;
+}
+declare module 'core-js/library/fn/array/virtual/find-index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/find-index'>;
+}
+declare module 'core-js/library/fn/array/virtual/find.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/find'>;
+}
+declare module 'core-js/library/fn/array/virtual/for-each.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/for-each'>;
+}
+declare module 'core-js/library/fn/array/virtual/includes.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/includes'>;
+}
+declare module 'core-js/library/fn/array/virtual/index-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/index-of'>;
+}
+declare module 'core-js/library/fn/array/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/index'>;
+}
+declare module 'core-js/library/fn/array/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/iterator'>;
+}
+declare module 'core-js/library/fn/array/virtual/join.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/join'>;
+}
+declare module 'core-js/library/fn/array/virtual/keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/keys'>;
+}
+declare module 'core-js/library/fn/array/virtual/last-index-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/last-index-of'>;
+}
+declare module 'core-js/library/fn/array/virtual/map.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/map'>;
+}
+declare module 'core-js/library/fn/array/virtual/reduce-right.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/reduce-right'>;
+}
+declare module 'core-js/library/fn/array/virtual/reduce.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/reduce'>;
+}
+declare module 'core-js/library/fn/array/virtual/slice.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/slice'>;
+}
+declare module 'core-js/library/fn/array/virtual/some.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/some'>;
+}
+declare module 'core-js/library/fn/array/virtual/sort.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/sort'>;
+}
+declare module 'core-js/library/fn/array/virtual/values.js' {
+  declare module.exports: $Exports<'core-js/library/fn/array/virtual/values'>;
+}
+declare module 'core-js/library/fn/asap.js' {
+  declare module.exports: $Exports<'core-js/library/fn/asap'>;
+}
+declare module 'core-js/library/fn/clear-immediate.js' {
+  declare module.exports: $Exports<'core-js/library/fn/clear-immediate'>;
+}
+declare module 'core-js/library/fn/date/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/index'>;
+}
+declare module 'core-js/library/fn/date/now.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/now'>;
+}
+declare module 'core-js/library/fn/date/to-iso-string.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/to-iso-string'>;
+}
+declare module 'core-js/library/fn/date/to-json.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/to-json'>;
+}
+declare module 'core-js/library/fn/date/to-primitive.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/to-primitive'>;
+}
+declare module 'core-js/library/fn/date/to-string.js' {
+  declare module.exports: $Exports<'core-js/library/fn/date/to-string'>;
+}
+declare module 'core-js/library/fn/delay.js' {
+  declare module.exports: $Exports<'core-js/library/fn/delay'>;
+}
+declare module 'core-js/library/fn/dict.js' {
+  declare module.exports: $Exports<'core-js/library/fn/dict'>;
+}
+declare module 'core-js/library/fn/dom-collections/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/dom-collections/index'>;
+}
+declare module 'core-js/library/fn/dom-collections/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/dom-collections/iterator'>;
+}
+declare module 'core-js/library/fn/error/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/error/index'>;
+}
+declare module 'core-js/library/fn/error/is-error.js' {
+  declare module.exports: $Exports<'core-js/library/fn/error/is-error'>;
+}
+declare module 'core-js/library/fn/function/bind.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/bind'>;
+}
+declare module 'core-js/library/fn/function/has-instance.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/has-instance'>;
+}
+declare module 'core-js/library/fn/function/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/index'>;
+}
+declare module 'core-js/library/fn/function/name.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/name'>;
+}
+declare module 'core-js/library/fn/function/part.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/part'>;
+}
+declare module 'core-js/library/fn/function/virtual/bind.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/virtual/bind'>;
+}
+declare module 'core-js/library/fn/function/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/virtual/index'>;
+}
+declare module 'core-js/library/fn/function/virtual/part.js' {
+  declare module.exports: $Exports<'core-js/library/fn/function/virtual/part'>;
+}
+declare module 'core-js/library/fn/get-iterator-method.js' {
+  declare module.exports: $Exports<'core-js/library/fn/get-iterator-method'>;
+}
+declare module 'core-js/library/fn/get-iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/get-iterator'>;
+}
+declare module 'core-js/library/fn/is-iterable.js' {
+  declare module.exports: $Exports<'core-js/library/fn/is-iterable'>;
+}
+declare module 'core-js/library/fn/json/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/json/index'>;
+}
+declare module 'core-js/library/fn/json/stringify.js' {
+  declare module.exports: $Exports<'core-js/library/fn/json/stringify'>;
+}
+declare module 'core-js/library/fn/map.js' {
+  declare module.exports: $Exports<'core-js/library/fn/map'>;
+}
+declare module 'core-js/library/fn/math/acosh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/acosh'>;
+}
+declare module 'core-js/library/fn/math/asinh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/asinh'>;
+}
+declare module 'core-js/library/fn/math/atanh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/atanh'>;
+}
+declare module 'core-js/library/fn/math/cbrt.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/cbrt'>;
+}
+declare module 'core-js/library/fn/math/clz32.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/clz32'>;
+}
+declare module 'core-js/library/fn/math/cosh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/cosh'>;
+}
+declare module 'core-js/library/fn/math/expm1.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/expm1'>;
+}
+declare module 'core-js/library/fn/math/fround.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/fround'>;
+}
+declare module 'core-js/library/fn/math/hypot.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/hypot'>;
+}
+declare module 'core-js/library/fn/math/iaddh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/iaddh'>;
+}
+declare module 'core-js/library/fn/math/imul.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/imul'>;
+}
+declare module 'core-js/library/fn/math/imulh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/imulh'>;
+}
+declare module 'core-js/library/fn/math/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/index'>;
+}
+declare module 'core-js/library/fn/math/isubh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/isubh'>;
+}
+declare module 'core-js/library/fn/math/log10.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/log10'>;
+}
+declare module 'core-js/library/fn/math/log1p.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/log1p'>;
+}
+declare module 'core-js/library/fn/math/log2.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/log2'>;
+}
+declare module 'core-js/library/fn/math/sign.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/sign'>;
+}
+declare module 'core-js/library/fn/math/sinh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/sinh'>;
+}
+declare module 'core-js/library/fn/math/tanh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/tanh'>;
+}
+declare module 'core-js/library/fn/math/trunc.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/trunc'>;
+}
+declare module 'core-js/library/fn/math/umulh.js' {
+  declare module.exports: $Exports<'core-js/library/fn/math/umulh'>;
+}
+declare module 'core-js/library/fn/number/constructor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/constructor'>;
+}
+declare module 'core-js/library/fn/number/epsilon.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/epsilon'>;
+}
+declare module 'core-js/library/fn/number/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/index'>;
+}
+declare module 'core-js/library/fn/number/is-finite.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/is-finite'>;
+}
+declare module 'core-js/library/fn/number/is-integer.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/is-integer'>;
+}
+declare module 'core-js/library/fn/number/is-nan.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/is-nan'>;
+}
+declare module 'core-js/library/fn/number/is-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/is-safe-integer'>;
+}
+declare module 'core-js/library/fn/number/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/iterator'>;
+}
+declare module 'core-js/library/fn/number/max-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/max-safe-integer'>;
+}
+declare module 'core-js/library/fn/number/min-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/min-safe-integer'>;
+}
+declare module 'core-js/library/fn/number/parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/parse-float'>;
+}
+declare module 'core-js/library/fn/number/parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/parse-int'>;
+}
+declare module 'core-js/library/fn/number/to-fixed.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/to-fixed'>;
+}
+declare module 'core-js/library/fn/number/to-precision.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/to-precision'>;
+}
+declare module 'core-js/library/fn/number/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/virtual/index'>;
+}
+declare module 'core-js/library/fn/number/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/virtual/iterator'>;
+}
+declare module 'core-js/library/fn/number/virtual/to-fixed.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/virtual/to-fixed'>;
+}
+declare module 'core-js/library/fn/number/virtual/to-precision.js' {
+  declare module.exports: $Exports<'core-js/library/fn/number/virtual/to-precision'>;
+}
+declare module 'core-js/library/fn/object/assign.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/assign'>;
+}
+declare module 'core-js/library/fn/object/classof.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/classof'>;
+}
+declare module 'core-js/library/fn/object/create.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/create'>;
+}
+declare module 'core-js/library/fn/object/define-getter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/define-getter'>;
+}
+declare module 'core-js/library/fn/object/define-properties.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/define-properties'>;
+}
+declare module 'core-js/library/fn/object/define-property.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/define-property'>;
+}
+declare module 'core-js/library/fn/object/define-setter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/define-setter'>;
+}
+declare module 'core-js/library/fn/object/define.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/define'>;
+}
+declare module 'core-js/library/fn/object/entries.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/entries'>;
+}
+declare module 'core-js/library/fn/object/freeze.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/freeze'>;
+}
+declare module 'core-js/library/fn/object/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/get-own-property-descriptor'>;
+}
+declare module 'core-js/library/fn/object/get-own-property-descriptors.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/get-own-property-descriptors'>;
+}
+declare module 'core-js/library/fn/object/get-own-property-names.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/get-own-property-names'>;
+}
+declare module 'core-js/library/fn/object/get-own-property-symbols.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/get-own-property-symbols'>;
+}
+declare module 'core-js/library/fn/object/get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/get-prototype-of'>;
+}
+declare module 'core-js/library/fn/object/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/index'>;
+}
+declare module 'core-js/library/fn/object/is-extensible.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/is-extensible'>;
+}
+declare module 'core-js/library/fn/object/is-frozen.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/is-frozen'>;
+}
+declare module 'core-js/library/fn/object/is-object.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/is-object'>;
+}
+declare module 'core-js/library/fn/object/is-sealed.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/is-sealed'>;
+}
+declare module 'core-js/library/fn/object/is.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/is'>;
+}
+declare module 'core-js/library/fn/object/keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/keys'>;
+}
+declare module 'core-js/library/fn/object/lookup-getter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/lookup-getter'>;
+}
+declare module 'core-js/library/fn/object/lookup-setter.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/lookup-setter'>;
+}
+declare module 'core-js/library/fn/object/make.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/make'>;
+}
+declare module 'core-js/library/fn/object/prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/prevent-extensions'>;
+}
+declare module 'core-js/library/fn/object/seal.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/seal'>;
+}
+declare module 'core-js/library/fn/object/set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/set-prototype-of'>;
+}
+declare module 'core-js/library/fn/object/values.js' {
+  declare module.exports: $Exports<'core-js/library/fn/object/values'>;
+}
+declare module 'core-js/library/fn/observable.js' {
+  declare module.exports: $Exports<'core-js/library/fn/observable'>;
+}
+declare module 'core-js/library/fn/parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/fn/parse-float'>;
+}
+declare module 'core-js/library/fn/parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/fn/parse-int'>;
+}
+declare module 'core-js/library/fn/promise.js' {
+  declare module.exports: $Exports<'core-js/library/fn/promise'>;
+}
+declare module 'core-js/library/fn/reflect/apply.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/apply'>;
+}
+declare module 'core-js/library/fn/reflect/construct.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/construct'>;
+}
+declare module 'core-js/library/fn/reflect/define-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/define-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/define-property.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/define-property'>;
+}
+declare module 'core-js/library/fn/reflect/delete-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/delete-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/delete-property.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/delete-property'>;
+}
+declare module 'core-js/library/fn/reflect/enumerate.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/enumerate'>;
+}
+declare module 'core-js/library/fn/reflect/get-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-metadata-keys'>;
+}
+declare module 'core-js/library/fn/reflect/get-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/get-own-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-own-metadata-keys'>;
+}
+declare module 'core-js/library/fn/reflect/get-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-own-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-own-property-descriptor'>;
+}
+declare module 'core-js/library/fn/reflect/get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get-prototype-of'>;
+}
+declare module 'core-js/library/fn/reflect/get.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/get'>;
+}
+declare module 'core-js/library/fn/reflect/has-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/has-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/has-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/has-own-metadata'>;
+}
+declare module 'core-js/library/fn/reflect/has.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/has'>;
+}
+declare module 'core-js/library/fn/reflect/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/index'>;
+}
+declare module 'core-js/library/fn/reflect/is-extensible.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/is-extensible'>;
+}
+declare module 'core-js/library/fn/reflect/metadata.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/metadata'>;
+}
+declare module 'core-js/library/fn/reflect/own-keys.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/own-keys'>;
+}
+declare module 'core-js/library/fn/reflect/prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/prevent-extensions'>;
+}
+declare module 'core-js/library/fn/reflect/set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/set-prototype-of'>;
+}
+declare module 'core-js/library/fn/reflect/set.js' {
+  declare module.exports: $Exports<'core-js/library/fn/reflect/set'>;
+}
+declare module 'core-js/library/fn/regexp/constructor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/constructor'>;
+}
+declare module 'core-js/library/fn/regexp/escape.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/escape'>;
+}
+declare module 'core-js/library/fn/regexp/flags.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/flags'>;
+}
+declare module 'core-js/library/fn/regexp/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/index'>;
+}
+declare module 'core-js/library/fn/regexp/match.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/match'>;
+}
+declare module 'core-js/library/fn/regexp/replace.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/replace'>;
+}
+declare module 'core-js/library/fn/regexp/search.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/search'>;
+}
+declare module 'core-js/library/fn/regexp/split.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/split'>;
+}
+declare module 'core-js/library/fn/regexp/to-string.js' {
+  declare module.exports: $Exports<'core-js/library/fn/regexp/to-string'>;
+}
+declare module 'core-js/library/fn/set-immediate.js' {
+  declare module.exports: $Exports<'core-js/library/fn/set-immediate'>;
+}
+declare module 'core-js/library/fn/set-interval.js' {
+  declare module.exports: $Exports<'core-js/library/fn/set-interval'>;
+}
+declare module 'core-js/library/fn/set-timeout.js' {
+  declare module.exports: $Exports<'core-js/library/fn/set-timeout'>;
+}
+declare module 'core-js/library/fn/set.js' {
+  declare module.exports: $Exports<'core-js/library/fn/set'>;
+}
+declare module 'core-js/library/fn/string/anchor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/anchor'>;
+}
+declare module 'core-js/library/fn/string/at.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/at'>;
+}
+declare module 'core-js/library/fn/string/big.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/big'>;
+}
+declare module 'core-js/library/fn/string/blink.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/blink'>;
+}
+declare module 'core-js/library/fn/string/bold.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/bold'>;
+}
+declare module 'core-js/library/fn/string/code-point-at.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/code-point-at'>;
+}
+declare module 'core-js/library/fn/string/ends-with.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/ends-with'>;
+}
+declare module 'core-js/library/fn/string/escape-html.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/escape-html'>;
+}
+declare module 'core-js/library/fn/string/fixed.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/fixed'>;
+}
+declare module 'core-js/library/fn/string/fontcolor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/fontcolor'>;
+}
+declare module 'core-js/library/fn/string/fontsize.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/fontsize'>;
+}
+declare module 'core-js/library/fn/string/from-code-point.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/from-code-point'>;
+}
+declare module 'core-js/library/fn/string/includes.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/includes'>;
+}
+declare module 'core-js/library/fn/string/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/index'>;
+}
+declare module 'core-js/library/fn/string/italics.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/italics'>;
+}
+declare module 'core-js/library/fn/string/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/iterator'>;
+}
+declare module 'core-js/library/fn/string/link.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/link'>;
+}
+declare module 'core-js/library/fn/string/match-all.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/match-all'>;
+}
+declare module 'core-js/library/fn/string/pad-end.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/pad-end'>;
+}
+declare module 'core-js/library/fn/string/pad-start.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/pad-start'>;
+}
+declare module 'core-js/library/fn/string/raw.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/raw'>;
+}
+declare module 'core-js/library/fn/string/repeat.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/repeat'>;
+}
+declare module 'core-js/library/fn/string/small.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/small'>;
+}
+declare module 'core-js/library/fn/string/starts-with.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/starts-with'>;
+}
+declare module 'core-js/library/fn/string/strike.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/strike'>;
+}
+declare module 'core-js/library/fn/string/sub.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/sub'>;
+}
+declare module 'core-js/library/fn/string/sup.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/sup'>;
+}
+declare module 'core-js/library/fn/string/trim-end.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/trim-end'>;
+}
+declare module 'core-js/library/fn/string/trim-left.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/trim-left'>;
+}
+declare module 'core-js/library/fn/string/trim-right.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/trim-right'>;
+}
+declare module 'core-js/library/fn/string/trim-start.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/trim-start'>;
+}
+declare module 'core-js/library/fn/string/trim.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/trim'>;
+}
+declare module 'core-js/library/fn/string/unescape-html.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/unescape-html'>;
+}
+declare module 'core-js/library/fn/string/virtual/anchor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/anchor'>;
+}
+declare module 'core-js/library/fn/string/virtual/at.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/at'>;
+}
+declare module 'core-js/library/fn/string/virtual/big.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/big'>;
+}
+declare module 'core-js/library/fn/string/virtual/blink.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/blink'>;
+}
+declare module 'core-js/library/fn/string/virtual/bold.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/bold'>;
+}
+declare module 'core-js/library/fn/string/virtual/code-point-at.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/code-point-at'>;
+}
+declare module 'core-js/library/fn/string/virtual/ends-with.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/ends-with'>;
+}
+declare module 'core-js/library/fn/string/virtual/escape-html.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/escape-html'>;
+}
+declare module 'core-js/library/fn/string/virtual/fixed.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/fixed'>;
+}
+declare module 'core-js/library/fn/string/virtual/fontcolor.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/fontcolor'>;
+}
+declare module 'core-js/library/fn/string/virtual/fontsize.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/fontsize'>;
+}
+declare module 'core-js/library/fn/string/virtual/includes.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/includes'>;
+}
+declare module 'core-js/library/fn/string/virtual/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/index'>;
+}
+declare module 'core-js/library/fn/string/virtual/italics.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/italics'>;
+}
+declare module 'core-js/library/fn/string/virtual/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/iterator'>;
+}
+declare module 'core-js/library/fn/string/virtual/link.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/link'>;
+}
+declare module 'core-js/library/fn/string/virtual/match-all.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/match-all'>;
+}
+declare module 'core-js/library/fn/string/virtual/pad-end.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/pad-end'>;
+}
+declare module 'core-js/library/fn/string/virtual/pad-start.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/pad-start'>;
+}
+declare module 'core-js/library/fn/string/virtual/repeat.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/repeat'>;
+}
+declare module 'core-js/library/fn/string/virtual/small.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/small'>;
+}
+declare module 'core-js/library/fn/string/virtual/starts-with.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/starts-with'>;
+}
+declare module 'core-js/library/fn/string/virtual/strike.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/strike'>;
+}
+declare module 'core-js/library/fn/string/virtual/sub.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/sub'>;
+}
+declare module 'core-js/library/fn/string/virtual/sup.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/sup'>;
+}
+declare module 'core-js/library/fn/string/virtual/trim-end.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/trim-end'>;
+}
+declare module 'core-js/library/fn/string/virtual/trim-left.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/trim-left'>;
+}
+declare module 'core-js/library/fn/string/virtual/trim-right.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/trim-right'>;
+}
+declare module 'core-js/library/fn/string/virtual/trim-start.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/trim-start'>;
+}
+declare module 'core-js/library/fn/string/virtual/trim.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/trim'>;
+}
+declare module 'core-js/library/fn/string/virtual/unescape-html.js' {
+  declare module.exports: $Exports<'core-js/library/fn/string/virtual/unescape-html'>;
+}
+declare module 'core-js/library/fn/symbol/async-iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/async-iterator'>;
+}
+declare module 'core-js/library/fn/symbol/for.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/for'>;
+}
+declare module 'core-js/library/fn/symbol/has-instance.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/has-instance'>;
+}
+declare module 'core-js/library/fn/symbol/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/index'>;
+}
+declare module 'core-js/library/fn/symbol/is-concat-spreadable.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/is-concat-spreadable'>;
+}
+declare module 'core-js/library/fn/symbol/iterator.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/iterator'>;
+}
+declare module 'core-js/library/fn/symbol/key-for.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/key-for'>;
+}
+declare module 'core-js/library/fn/symbol/match.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/match'>;
+}
+declare module 'core-js/library/fn/symbol/observable.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/observable'>;
+}
+declare module 'core-js/library/fn/symbol/replace.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/replace'>;
+}
+declare module 'core-js/library/fn/symbol/search.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/search'>;
+}
+declare module 'core-js/library/fn/symbol/species.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/species'>;
+}
+declare module 'core-js/library/fn/symbol/split.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/split'>;
+}
+declare module 'core-js/library/fn/symbol/to-primitive.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/to-primitive'>;
+}
+declare module 'core-js/library/fn/symbol/to-string-tag.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/to-string-tag'>;
+}
+declare module 'core-js/library/fn/symbol/unscopables.js' {
+  declare module.exports: $Exports<'core-js/library/fn/symbol/unscopables'>;
+}
+declare module 'core-js/library/fn/system/global.js' {
+  declare module.exports: $Exports<'core-js/library/fn/system/global'>;
+}
+declare module 'core-js/library/fn/system/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/system/index'>;
+}
+declare module 'core-js/library/fn/typed/array-buffer.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/array-buffer'>;
+}
+declare module 'core-js/library/fn/typed/data-view.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/data-view'>;
+}
+declare module 'core-js/library/fn/typed/float32-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/float32-array'>;
+}
+declare module 'core-js/library/fn/typed/float64-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/float64-array'>;
+}
+declare module 'core-js/library/fn/typed/index.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/index'>;
+}
+declare module 'core-js/library/fn/typed/int16-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/int16-array'>;
+}
+declare module 'core-js/library/fn/typed/int32-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/int32-array'>;
+}
+declare module 'core-js/library/fn/typed/int8-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/int8-array'>;
+}
+declare module 'core-js/library/fn/typed/uint16-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/uint16-array'>;
+}
+declare module 'core-js/library/fn/typed/uint32-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/uint32-array'>;
+}
+declare module 'core-js/library/fn/typed/uint8-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/uint8-array'>;
+}
+declare module 'core-js/library/fn/typed/uint8-clamped-array.js' {
+  declare module.exports: $Exports<'core-js/library/fn/typed/uint8-clamped-array'>;
+}
+declare module 'core-js/library/fn/weak-map.js' {
+  declare module.exports: $Exports<'core-js/library/fn/weak-map'>;
+}
+declare module 'core-js/library/fn/weak-set.js' {
+  declare module.exports: $Exports<'core-js/library/fn/weak-set'>;
+}
+declare module 'core-js/library/index.js' {
+  declare module.exports: $Exports<'core-js/library/index'>;
+}
+declare module 'core-js/library/modules/_a-function.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_a-function'>;
+}
+declare module 'core-js/library/modules/_a-number-value.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_a-number-value'>;
+}
+declare module 'core-js/library/modules/_add-to-unscopables.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_add-to-unscopables'>;
+}
+declare module 'core-js/library/modules/_an-instance.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_an-instance'>;
+}
+declare module 'core-js/library/modules/_an-object.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_an-object'>;
+}
+declare module 'core-js/library/modules/_array-copy-within.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-copy-within'>;
+}
+declare module 'core-js/library/modules/_array-fill.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-fill'>;
+}
+declare module 'core-js/library/modules/_array-from-iterable.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-from-iterable'>;
+}
+declare module 'core-js/library/modules/_array-includes.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-includes'>;
+}
+declare module 'core-js/library/modules/_array-methods.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-methods'>;
+}
+declare module 'core-js/library/modules/_array-reduce.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-reduce'>;
+}
+declare module 'core-js/library/modules/_array-species-constructor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-species-constructor'>;
+}
+declare module 'core-js/library/modules/_array-species-create.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_array-species-create'>;
+}
+declare module 'core-js/library/modules/_bind.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_bind'>;
+}
+declare module 'core-js/library/modules/_classof.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_classof'>;
+}
+declare module 'core-js/library/modules/_cof.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_cof'>;
+}
+declare module 'core-js/library/modules/_collection-strong.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_collection-strong'>;
+}
+declare module 'core-js/library/modules/_collection-to-json.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_collection-to-json'>;
+}
+declare module 'core-js/library/modules/_collection-weak.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_collection-weak'>;
+}
+declare module 'core-js/library/modules/_collection.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_collection'>;
+}
+declare module 'core-js/library/modules/_core.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_core'>;
+}
+declare module 'core-js/library/modules/_create-property.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_create-property'>;
+}
+declare module 'core-js/library/modules/_ctx.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_ctx'>;
+}
+declare module 'core-js/library/modules/_date-to-primitive.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_date-to-primitive'>;
+}
+declare module 'core-js/library/modules/_defined.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_defined'>;
+}
+declare module 'core-js/library/modules/_descriptors.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_descriptors'>;
+}
+declare module 'core-js/library/modules/_dom-create.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_dom-create'>;
+}
+declare module 'core-js/library/modules/_entry-virtual.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_entry-virtual'>;
+}
+declare module 'core-js/library/modules/_enum-bug-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_enum-bug-keys'>;
+}
+declare module 'core-js/library/modules/_enum-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_enum-keys'>;
+}
+declare module 'core-js/library/modules/_export.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_export'>;
+}
+declare module 'core-js/library/modules/_fails-is-regexp.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_fails-is-regexp'>;
+}
+declare module 'core-js/library/modules/_fails.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_fails'>;
+}
+declare module 'core-js/library/modules/_fix-re-wks.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_fix-re-wks'>;
+}
+declare module 'core-js/library/modules/_flags.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_flags'>;
+}
+declare module 'core-js/library/modules/_for-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_for-of'>;
+}
+declare module 'core-js/library/modules/_global.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_global'>;
+}
+declare module 'core-js/library/modules/_has.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_has'>;
+}
+declare module 'core-js/library/modules/_hide.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_hide'>;
+}
+declare module 'core-js/library/modules/_html.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_html'>;
+}
+declare module 'core-js/library/modules/_ie8-dom-define.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_ie8-dom-define'>;
+}
+declare module 'core-js/library/modules/_inherit-if-required.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_inherit-if-required'>;
+}
+declare module 'core-js/library/modules/_invoke.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_invoke'>;
+}
+declare module 'core-js/library/modules/_iobject.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iobject'>;
+}
+declare module 'core-js/library/modules/_is-array-iter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_is-array-iter'>;
+}
+declare module 'core-js/library/modules/_is-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_is-array'>;
+}
+declare module 'core-js/library/modules/_is-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_is-integer'>;
+}
+declare module 'core-js/library/modules/_is-object.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_is-object'>;
+}
+declare module 'core-js/library/modules/_is-regexp.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_is-regexp'>;
+}
+declare module 'core-js/library/modules/_iter-call.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iter-call'>;
+}
+declare module 'core-js/library/modules/_iter-create.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iter-create'>;
+}
+declare module 'core-js/library/modules/_iter-define.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iter-define'>;
+}
+declare module 'core-js/library/modules/_iter-detect.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iter-detect'>;
+}
+declare module 'core-js/library/modules/_iter-step.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iter-step'>;
+}
+declare module 'core-js/library/modules/_iterators.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_iterators'>;
+}
+declare module 'core-js/library/modules/_keyof.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_keyof'>;
+}
+declare module 'core-js/library/modules/_library.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_library'>;
+}
+declare module 'core-js/library/modules/_math-expm1.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_math-expm1'>;
+}
+declare module 'core-js/library/modules/_math-log1p.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_math-log1p'>;
+}
+declare module 'core-js/library/modules/_math-sign.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_math-sign'>;
+}
+declare module 'core-js/library/modules/_meta.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_meta'>;
+}
+declare module 'core-js/library/modules/_metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_metadata'>;
+}
+declare module 'core-js/library/modules/_microtask.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_microtask'>;
+}
+declare module 'core-js/library/modules/_object-assign.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-assign'>;
+}
+declare module 'core-js/library/modules/_object-create.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-create'>;
+}
+declare module 'core-js/library/modules/_object-define.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-define'>;
+}
+declare module 'core-js/library/modules/_object-dp.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-dp'>;
+}
+declare module 'core-js/library/modules/_object-dps.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-dps'>;
+}
+declare module 'core-js/library/modules/_object-forced-pam.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-forced-pam'>;
+}
+declare module 'core-js/library/modules/_object-gopd.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-gopd'>;
+}
+declare module 'core-js/library/modules/_object-gopn-ext.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-gopn-ext'>;
+}
+declare module 'core-js/library/modules/_object-gopn.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-gopn'>;
+}
+declare module 'core-js/library/modules/_object-gops.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-gops'>;
+}
+declare module 'core-js/library/modules/_object-gpo.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-gpo'>;
+}
+declare module 'core-js/library/modules/_object-keys-internal.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-keys-internal'>;
+}
+declare module 'core-js/library/modules/_object-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-keys'>;
+}
+declare module 'core-js/library/modules/_object-pie.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-pie'>;
+}
+declare module 'core-js/library/modules/_object-sap.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-sap'>;
+}
+declare module 'core-js/library/modules/_object-to-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_object-to-array'>;
+}
+declare module 'core-js/library/modules/_own-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_own-keys'>;
+}
+declare module 'core-js/library/modules/_parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_parse-float'>;
+}
+declare module 'core-js/library/modules/_parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_parse-int'>;
+}
+declare module 'core-js/library/modules/_partial.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_partial'>;
+}
+declare module 'core-js/library/modules/_path.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_path'>;
+}
+declare module 'core-js/library/modules/_property-desc.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_property-desc'>;
+}
+declare module 'core-js/library/modules/_redefine-all.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_redefine-all'>;
+}
+declare module 'core-js/library/modules/_redefine.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_redefine'>;
+}
+declare module 'core-js/library/modules/_replacer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_replacer'>;
+}
+declare module 'core-js/library/modules/_same-value.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_same-value'>;
+}
+declare module 'core-js/library/modules/_set-proto.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_set-proto'>;
+}
+declare module 'core-js/library/modules/_set-species.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_set-species'>;
+}
+declare module 'core-js/library/modules/_set-to-string-tag.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_set-to-string-tag'>;
+}
+declare module 'core-js/library/modules/_shared-key.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_shared-key'>;
+}
+declare module 'core-js/library/modules/_shared.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_shared'>;
+}
+declare module 'core-js/library/modules/_species-constructor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_species-constructor'>;
+}
+declare module 'core-js/library/modules/_strict-method.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_strict-method'>;
+}
+declare module 'core-js/library/modules/_string-at.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-at'>;
+}
+declare module 'core-js/library/modules/_string-context.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-context'>;
+}
+declare module 'core-js/library/modules/_string-html.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-html'>;
+}
+declare module 'core-js/library/modules/_string-pad.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-pad'>;
+}
+declare module 'core-js/library/modules/_string-repeat.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-repeat'>;
+}
+declare module 'core-js/library/modules/_string-trim.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-trim'>;
+}
+declare module 'core-js/library/modules/_string-ws.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_string-ws'>;
+}
+declare module 'core-js/library/modules/_task.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_task'>;
+}
+declare module 'core-js/library/modules/_to-index.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-index'>;
+}
+declare module 'core-js/library/modules/_to-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-integer'>;
+}
+declare module 'core-js/library/modules/_to-iobject.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-iobject'>;
+}
+declare module 'core-js/library/modules/_to-length.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-length'>;
+}
+declare module 'core-js/library/modules/_to-object.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-object'>;
+}
+declare module 'core-js/library/modules/_to-primitive.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_to-primitive'>;
+}
+declare module 'core-js/library/modules/_typed-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_typed-array'>;
+}
+declare module 'core-js/library/modules/_typed-buffer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_typed-buffer'>;
+}
+declare module 'core-js/library/modules/_typed.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_typed'>;
+}
+declare module 'core-js/library/modules/_uid.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_uid'>;
+}
+declare module 'core-js/library/modules/_wks-define.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_wks-define'>;
+}
+declare module 'core-js/library/modules/_wks-ext.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_wks-ext'>;
+}
+declare module 'core-js/library/modules/_wks.js' {
+  declare module.exports: $Exports<'core-js/library/modules/_wks'>;
+}
+declare module 'core-js/library/modules/core.delay.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.delay'>;
+}
+declare module 'core-js/library/modules/core.dict.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.dict'>;
+}
+declare module 'core-js/library/modules/core.function.part.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.function.part'>;
+}
+declare module 'core-js/library/modules/core.get-iterator-method.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.get-iterator-method'>;
+}
+declare module 'core-js/library/modules/core.get-iterator.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.get-iterator'>;
+}
+declare module 'core-js/library/modules/core.is-iterable.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.is-iterable'>;
+}
+declare module 'core-js/library/modules/core.number.iterator.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.number.iterator'>;
+}
+declare module 'core-js/library/modules/core.object.classof.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.object.classof'>;
+}
+declare module 'core-js/library/modules/core.object.define.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.object.define'>;
+}
+declare module 'core-js/library/modules/core.object.is-object.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.object.is-object'>;
+}
+declare module 'core-js/library/modules/core.object.make.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.object.make'>;
+}
+declare module 'core-js/library/modules/core.regexp.escape.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.regexp.escape'>;
+}
+declare module 'core-js/library/modules/core.string.escape-html.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.string.escape-html'>;
+}
+declare module 'core-js/library/modules/core.string.unescape-html.js' {
+  declare module.exports: $Exports<'core-js/library/modules/core.string.unescape-html'>;
+}
+declare module 'core-js/library/modules/es5.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es5'>;
+}
+declare module 'core-js/library/modules/es6.array.copy-within.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.copy-within'>;
+}
+declare module 'core-js/library/modules/es6.array.every.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.every'>;
+}
+declare module 'core-js/library/modules/es6.array.fill.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.fill'>;
+}
+declare module 'core-js/library/modules/es6.array.filter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.filter'>;
+}
+declare module 'core-js/library/modules/es6.array.find-index.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.find-index'>;
+}
+declare module 'core-js/library/modules/es6.array.find.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.find'>;
+}
+declare module 'core-js/library/modules/es6.array.for-each.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.for-each'>;
+}
+declare module 'core-js/library/modules/es6.array.from.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.from'>;
+}
+declare module 'core-js/library/modules/es6.array.index-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.index-of'>;
+}
+declare module 'core-js/library/modules/es6.array.is-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.is-array'>;
+}
+declare module 'core-js/library/modules/es6.array.iterator.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.iterator'>;
+}
+declare module 'core-js/library/modules/es6.array.join.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.join'>;
+}
+declare module 'core-js/library/modules/es6.array.last-index-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.last-index-of'>;
+}
+declare module 'core-js/library/modules/es6.array.map.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.map'>;
+}
+declare module 'core-js/library/modules/es6.array.of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.of'>;
+}
+declare module 'core-js/library/modules/es6.array.reduce-right.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.reduce-right'>;
+}
+declare module 'core-js/library/modules/es6.array.reduce.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.reduce'>;
+}
+declare module 'core-js/library/modules/es6.array.slice.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.slice'>;
+}
+declare module 'core-js/library/modules/es6.array.some.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.some'>;
+}
+declare module 'core-js/library/modules/es6.array.sort.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.sort'>;
+}
+declare module 'core-js/library/modules/es6.array.species.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.array.species'>;
+}
+declare module 'core-js/library/modules/es6.date.now.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.date.now'>;
+}
+declare module 'core-js/library/modules/es6.date.to-iso-string.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.date.to-iso-string'>;
+}
+declare module 'core-js/library/modules/es6.date.to-json.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.date.to-json'>;
+}
+declare module 'core-js/library/modules/es6.date.to-primitive.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.date.to-primitive'>;
+}
+declare module 'core-js/library/modules/es6.date.to-string.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.date.to-string'>;
+}
+declare module 'core-js/library/modules/es6.function.bind.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.function.bind'>;
+}
+declare module 'core-js/library/modules/es6.function.has-instance.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.function.has-instance'>;
+}
+declare module 'core-js/library/modules/es6.function.name.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.function.name'>;
+}
+declare module 'core-js/library/modules/es6.map.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.map'>;
+}
+declare module 'core-js/library/modules/es6.math.acosh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.acosh'>;
+}
+declare module 'core-js/library/modules/es6.math.asinh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.asinh'>;
+}
+declare module 'core-js/library/modules/es6.math.atanh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.atanh'>;
+}
+declare module 'core-js/library/modules/es6.math.cbrt.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.cbrt'>;
+}
+declare module 'core-js/library/modules/es6.math.clz32.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.clz32'>;
+}
+declare module 'core-js/library/modules/es6.math.cosh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.cosh'>;
+}
+declare module 'core-js/library/modules/es6.math.expm1.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.expm1'>;
+}
+declare module 'core-js/library/modules/es6.math.fround.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.fround'>;
+}
+declare module 'core-js/library/modules/es6.math.hypot.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.hypot'>;
+}
+declare module 'core-js/library/modules/es6.math.imul.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.imul'>;
+}
+declare module 'core-js/library/modules/es6.math.log10.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.log10'>;
+}
+declare module 'core-js/library/modules/es6.math.log1p.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.log1p'>;
+}
+declare module 'core-js/library/modules/es6.math.log2.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.log2'>;
+}
+declare module 'core-js/library/modules/es6.math.sign.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.sign'>;
+}
+declare module 'core-js/library/modules/es6.math.sinh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.sinh'>;
+}
+declare module 'core-js/library/modules/es6.math.tanh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.tanh'>;
+}
+declare module 'core-js/library/modules/es6.math.trunc.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.math.trunc'>;
+}
+declare module 'core-js/library/modules/es6.number.constructor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.constructor'>;
+}
+declare module 'core-js/library/modules/es6.number.epsilon.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.epsilon'>;
+}
+declare module 'core-js/library/modules/es6.number.is-finite.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.is-finite'>;
+}
+declare module 'core-js/library/modules/es6.number.is-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.is-integer'>;
+}
+declare module 'core-js/library/modules/es6.number.is-nan.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.is-nan'>;
+}
+declare module 'core-js/library/modules/es6.number.is-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.is-safe-integer'>;
+}
+declare module 'core-js/library/modules/es6.number.max-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.max-safe-integer'>;
+}
+declare module 'core-js/library/modules/es6.number.min-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.min-safe-integer'>;
+}
+declare module 'core-js/library/modules/es6.number.parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.parse-float'>;
+}
+declare module 'core-js/library/modules/es6.number.parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.parse-int'>;
+}
+declare module 'core-js/library/modules/es6.number.to-fixed.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.to-fixed'>;
+}
+declare module 'core-js/library/modules/es6.number.to-precision.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.number.to-precision'>;
+}
+declare module 'core-js/library/modules/es6.object.assign.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.assign'>;
+}
+declare module 'core-js/library/modules/es6.object.create.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.create'>;
+}
+declare module 'core-js/library/modules/es6.object.define-properties.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.define-properties'>;
+}
+declare module 'core-js/library/modules/es6.object.define-property.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.define-property'>;
+}
+declare module 'core-js/library/modules/es6.object.freeze.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.freeze'>;
+}
+declare module 'core-js/library/modules/es6.object.get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.get-own-property-descriptor'>;
+}
+declare module 'core-js/library/modules/es6.object.get-own-property-names.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.get-own-property-names'>;
+}
+declare module 'core-js/library/modules/es6.object.get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.get-prototype-of'>;
+}
+declare module 'core-js/library/modules/es6.object.is-extensible.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.is-extensible'>;
+}
+declare module 'core-js/library/modules/es6.object.is-frozen.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.is-frozen'>;
+}
+declare module 'core-js/library/modules/es6.object.is-sealed.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.is-sealed'>;
+}
+declare module 'core-js/library/modules/es6.object.is.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.is'>;
+}
+declare module 'core-js/library/modules/es6.object.keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.keys'>;
+}
+declare module 'core-js/library/modules/es6.object.prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.prevent-extensions'>;
+}
+declare module 'core-js/library/modules/es6.object.seal.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.seal'>;
+}
+declare module 'core-js/library/modules/es6.object.set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.set-prototype-of'>;
+}
+declare module 'core-js/library/modules/es6.object.to-string.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.object.to-string'>;
+}
+declare module 'core-js/library/modules/es6.parse-float.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.parse-float'>;
+}
+declare module 'core-js/library/modules/es6.parse-int.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.parse-int'>;
+}
+declare module 'core-js/library/modules/es6.promise.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.promise'>;
+}
+declare module 'core-js/library/modules/es6.reflect.apply.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.apply'>;
+}
+declare module 'core-js/library/modules/es6.reflect.construct.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.construct'>;
+}
+declare module 'core-js/library/modules/es6.reflect.define-property.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.define-property'>;
+}
+declare module 'core-js/library/modules/es6.reflect.delete-property.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.delete-property'>;
+}
+declare module 'core-js/library/modules/es6.reflect.enumerate.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.enumerate'>;
+}
+declare module 'core-js/library/modules/es6.reflect.get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.get-own-property-descriptor'>;
+}
+declare module 'core-js/library/modules/es6.reflect.get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.get-prototype-of'>;
+}
+declare module 'core-js/library/modules/es6.reflect.get.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.get'>;
+}
+declare module 'core-js/library/modules/es6.reflect.has.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.has'>;
+}
+declare module 'core-js/library/modules/es6.reflect.is-extensible.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.is-extensible'>;
+}
+declare module 'core-js/library/modules/es6.reflect.own-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.own-keys'>;
+}
+declare module 'core-js/library/modules/es6.reflect.prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.prevent-extensions'>;
+}
+declare module 'core-js/library/modules/es6.reflect.set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.set-prototype-of'>;
+}
+declare module 'core-js/library/modules/es6.reflect.set.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.reflect.set'>;
+}
+declare module 'core-js/library/modules/es6.regexp.constructor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.constructor'>;
+}
+declare module 'core-js/library/modules/es6.regexp.flags.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.flags'>;
+}
+declare module 'core-js/library/modules/es6.regexp.match.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.match'>;
+}
+declare module 'core-js/library/modules/es6.regexp.replace.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.replace'>;
+}
+declare module 'core-js/library/modules/es6.regexp.search.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.search'>;
+}
+declare module 'core-js/library/modules/es6.regexp.split.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.split'>;
+}
+declare module 'core-js/library/modules/es6.regexp.to-string.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.regexp.to-string'>;
+}
+declare module 'core-js/library/modules/es6.set.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.set'>;
+}
+declare module 'core-js/library/modules/es6.string.anchor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.anchor'>;
+}
+declare module 'core-js/library/modules/es6.string.big.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.big'>;
+}
+declare module 'core-js/library/modules/es6.string.blink.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.blink'>;
+}
+declare module 'core-js/library/modules/es6.string.bold.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.bold'>;
+}
+declare module 'core-js/library/modules/es6.string.code-point-at.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.code-point-at'>;
+}
+declare module 'core-js/library/modules/es6.string.ends-with.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.ends-with'>;
+}
+declare module 'core-js/library/modules/es6.string.fixed.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.fixed'>;
+}
+declare module 'core-js/library/modules/es6.string.fontcolor.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.fontcolor'>;
+}
+declare module 'core-js/library/modules/es6.string.fontsize.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.fontsize'>;
+}
+declare module 'core-js/library/modules/es6.string.from-code-point.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.from-code-point'>;
+}
+declare module 'core-js/library/modules/es6.string.includes.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.includes'>;
+}
+declare module 'core-js/library/modules/es6.string.italics.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.italics'>;
+}
+declare module 'core-js/library/modules/es6.string.iterator.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.iterator'>;
+}
+declare module 'core-js/library/modules/es6.string.link.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.link'>;
+}
+declare module 'core-js/library/modules/es6.string.raw.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.raw'>;
+}
+declare module 'core-js/library/modules/es6.string.repeat.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.repeat'>;
+}
+declare module 'core-js/library/modules/es6.string.small.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.small'>;
+}
+declare module 'core-js/library/modules/es6.string.starts-with.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.starts-with'>;
+}
+declare module 'core-js/library/modules/es6.string.strike.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.strike'>;
+}
+declare module 'core-js/library/modules/es6.string.sub.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.sub'>;
+}
+declare module 'core-js/library/modules/es6.string.sup.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.sup'>;
+}
+declare module 'core-js/library/modules/es6.string.trim.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.string.trim'>;
+}
+declare module 'core-js/library/modules/es6.symbol.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.symbol'>;
+}
+declare module 'core-js/library/modules/es6.typed.array-buffer.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.array-buffer'>;
+}
+declare module 'core-js/library/modules/es6.typed.data-view.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.data-view'>;
+}
+declare module 'core-js/library/modules/es6.typed.float32-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.float32-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.float64-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.float64-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.int16-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.int16-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.int32-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.int32-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.int8-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.int8-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.uint16-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.uint16-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.uint32-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.uint32-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.uint8-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.uint8-array'>;
+}
+declare module 'core-js/library/modules/es6.typed.uint8-clamped-array.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.typed.uint8-clamped-array'>;
+}
+declare module 'core-js/library/modules/es6.weak-map.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.weak-map'>;
+}
+declare module 'core-js/library/modules/es6.weak-set.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es6.weak-set'>;
+}
+declare module 'core-js/library/modules/es7.array.includes.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.array.includes'>;
+}
+declare module 'core-js/library/modules/es7.asap.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.asap'>;
+}
+declare module 'core-js/library/modules/es7.error.is-error.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.error.is-error'>;
+}
+declare module 'core-js/library/modules/es7.map.to-json.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.map.to-json'>;
+}
+declare module 'core-js/library/modules/es7.math.iaddh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.math.iaddh'>;
+}
+declare module 'core-js/library/modules/es7.math.imulh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.math.imulh'>;
+}
+declare module 'core-js/library/modules/es7.math.isubh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.math.isubh'>;
+}
+declare module 'core-js/library/modules/es7.math.umulh.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.math.umulh'>;
+}
+declare module 'core-js/library/modules/es7.object.define-getter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.define-getter'>;
+}
+declare module 'core-js/library/modules/es7.object.define-setter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.define-setter'>;
+}
+declare module 'core-js/library/modules/es7.object.entries.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.entries'>;
+}
+declare module 'core-js/library/modules/es7.object.enumerable-entries.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.enumerable-entries'>;
+}
+declare module 'core-js/library/modules/es7.object.enumerable-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.enumerable-keys'>;
+}
+declare module 'core-js/library/modules/es7.object.enumerable-values.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.enumerable-values'>;
+}
+declare module 'core-js/library/modules/es7.object.get-own-property-descriptors.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.get-own-property-descriptors'>;
+}
+declare module 'core-js/library/modules/es7.object.lookup-getter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.lookup-getter'>;
+}
+declare module 'core-js/library/modules/es7.object.lookup-setter.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.lookup-setter'>;
+}
+declare module 'core-js/library/modules/es7.object.values.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.object.values'>;
+}
+declare module 'core-js/library/modules/es7.observable.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.observable'>;
+}
+declare module 'core-js/library/modules/es7.reflect.define-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.define-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.delete-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.delete-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.get-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.get-metadata-keys'>;
+}
+declare module 'core-js/library/modules/es7.reflect.get-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.get-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.get-own-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.get-own-metadata-keys'>;
+}
+declare module 'core-js/library/modules/es7.reflect.get-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.get-own-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.has-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.has-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.has-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.has-own-metadata'>;
+}
+declare module 'core-js/library/modules/es7.reflect.metadata.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.reflect.metadata'>;
+}
+declare module 'core-js/library/modules/es7.set.to-json.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.set.to-json'>;
+}
+declare module 'core-js/library/modules/es7.string.at.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.at'>;
+}
+declare module 'core-js/library/modules/es7.string.match-all.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.match-all'>;
+}
+declare module 'core-js/library/modules/es7.string.pad-end.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.pad-end'>;
+}
+declare module 'core-js/library/modules/es7.string.pad-start.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.pad-start'>;
+}
+declare module 'core-js/library/modules/es7.string.trim-left.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.trim-left'>;
+}
+declare module 'core-js/library/modules/es7.string.trim-right.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.string.trim-right'>;
+}
+declare module 'core-js/library/modules/es7.symbol.async-iterator.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.symbol.async-iterator'>;
+}
+declare module 'core-js/library/modules/es7.symbol.observable.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.symbol.observable'>;
+}
+declare module 'core-js/library/modules/es7.system.global.js' {
+  declare module.exports: $Exports<'core-js/library/modules/es7.system.global'>;
+}
+declare module 'core-js/library/modules/web.dom.iterable.js' {
+  declare module.exports: $Exports<'core-js/library/modules/web.dom.iterable'>;
+}
+declare module 'core-js/library/modules/web.immediate.js' {
+  declare module.exports: $Exports<'core-js/library/modules/web.immediate'>;
+}
+declare module 'core-js/library/modules/web.timers.js' {
+  declare module.exports: $Exports<'core-js/library/modules/web.timers'>;
+}
+declare module 'core-js/library/shim.js' {
+  declare module.exports: $Exports<'core-js/library/shim'>;
+}
+declare module 'core-js/library/stage/0.js' {
+  declare module.exports: $Exports<'core-js/library/stage/0'>;
+}
+declare module 'core-js/library/stage/1.js' {
+  declare module.exports: $Exports<'core-js/library/stage/1'>;
+}
+declare module 'core-js/library/stage/2.js' {
+  declare module.exports: $Exports<'core-js/library/stage/2'>;
+}
+declare module 'core-js/library/stage/3.js' {
+  declare module.exports: $Exports<'core-js/library/stage/3'>;
+}
+declare module 'core-js/library/stage/4.js' {
+  declare module.exports: $Exports<'core-js/library/stage/4'>;
+}
+declare module 'core-js/library/stage/index.js' {
+  declare module.exports: $Exports<'core-js/library/stage/index'>;
+}
+declare module 'core-js/library/stage/pre.js' {
+  declare module.exports: $Exports<'core-js/library/stage/pre'>;
+}
+declare module 'core-js/library/web/dom-collections.js' {
+  declare module.exports: $Exports<'core-js/library/web/dom-collections'>;
+}
+declare module 'core-js/library/web/immediate.js' {
+  declare module.exports: $Exports<'core-js/library/web/immediate'>;
+}
+declare module 'core-js/library/web/index.js' {
+  declare module.exports: $Exports<'core-js/library/web/index'>;
+}
+declare module 'core-js/library/web/timers.js' {
+  declare module.exports: $Exports<'core-js/library/web/timers'>;
+}
+declare module 'core-js/modules/_a-function.js' {
+  declare module.exports: $Exports<'core-js/modules/_a-function'>;
+}
+declare module 'core-js/modules/_a-number-value.js' {
+  declare module.exports: $Exports<'core-js/modules/_a-number-value'>;
+}
+declare module 'core-js/modules/_add-to-unscopables.js' {
+  declare module.exports: $Exports<'core-js/modules/_add-to-unscopables'>;
+}
+declare module 'core-js/modules/_an-instance.js' {
+  declare module.exports: $Exports<'core-js/modules/_an-instance'>;
+}
+declare module 'core-js/modules/_an-object.js' {
+  declare module.exports: $Exports<'core-js/modules/_an-object'>;
+}
+declare module 'core-js/modules/_array-copy-within.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-copy-within'>;
+}
+declare module 'core-js/modules/_array-fill.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-fill'>;
+}
+declare module 'core-js/modules/_array-from-iterable.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-from-iterable'>;
+}
+declare module 'core-js/modules/_array-includes.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-includes'>;
+}
+declare module 'core-js/modules/_array-methods.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-methods'>;
+}
+declare module 'core-js/modules/_array-reduce.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-reduce'>;
+}
+declare module 'core-js/modules/_array-species-constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-species-constructor'>;
+}
+declare module 'core-js/modules/_array-species-create.js' {
+  declare module.exports: $Exports<'core-js/modules/_array-species-create'>;
+}
+declare module 'core-js/modules/_bind.js' {
+  declare module.exports: $Exports<'core-js/modules/_bind'>;
+}
+declare module 'core-js/modules/_classof.js' {
+  declare module.exports: $Exports<'core-js/modules/_classof'>;
+}
+declare module 'core-js/modules/_cof.js' {
+  declare module.exports: $Exports<'core-js/modules/_cof'>;
+}
+declare module 'core-js/modules/_collection-strong.js' {
+  declare module.exports: $Exports<'core-js/modules/_collection-strong'>;
+}
+declare module 'core-js/modules/_collection-to-json.js' {
+  declare module.exports: $Exports<'core-js/modules/_collection-to-json'>;
+}
+declare module 'core-js/modules/_collection-weak.js' {
+  declare module.exports: $Exports<'core-js/modules/_collection-weak'>;
+}
+declare module 'core-js/modules/_collection.js' {
+  declare module.exports: $Exports<'core-js/modules/_collection'>;
+}
+declare module 'core-js/modules/_core.js' {
+  declare module.exports: $Exports<'core-js/modules/_core'>;
+}
+declare module 'core-js/modules/_create-property.js' {
+  declare module.exports: $Exports<'core-js/modules/_create-property'>;
+}
+declare module 'core-js/modules/_ctx.js' {
+  declare module.exports: $Exports<'core-js/modules/_ctx'>;
+}
+declare module 'core-js/modules/_date-to-primitive.js' {
+  declare module.exports: $Exports<'core-js/modules/_date-to-primitive'>;
+}
+declare module 'core-js/modules/_defined.js' {
+  declare module.exports: $Exports<'core-js/modules/_defined'>;
+}
+declare module 'core-js/modules/_descriptors.js' {
+  declare module.exports: $Exports<'core-js/modules/_descriptors'>;
+}
+declare module 'core-js/modules/_dom-create.js' {
+  declare module.exports: $Exports<'core-js/modules/_dom-create'>;
+}
+declare module 'core-js/modules/_entry-virtual.js' {
+  declare module.exports: $Exports<'core-js/modules/_entry-virtual'>;
+}
+declare module 'core-js/modules/_enum-bug-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/_enum-bug-keys'>;
+}
+declare module 'core-js/modules/_enum-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/_enum-keys'>;
+}
+declare module 'core-js/modules/_export.js' {
+  declare module.exports: $Exports<'core-js/modules/_export'>;
+}
+declare module 'core-js/modules/_fails-is-regexp.js' {
+  declare module.exports: $Exports<'core-js/modules/_fails-is-regexp'>;
+}
+declare module 'core-js/modules/_fails.js' {
+  declare module.exports: $Exports<'core-js/modules/_fails'>;
+}
+declare module 'core-js/modules/_fix-re-wks.js' {
+  declare module.exports: $Exports<'core-js/modules/_fix-re-wks'>;
+}
+declare module 'core-js/modules/_flags.js' {
+  declare module.exports: $Exports<'core-js/modules/_flags'>;
+}
+declare module 'core-js/modules/_for-of.js' {
+  declare module.exports: $Exports<'core-js/modules/_for-of'>;
+}
+declare module 'core-js/modules/_global.js' {
+  declare module.exports: $Exports<'core-js/modules/_global'>;
+}
+declare module 'core-js/modules/_has.js' {
+  declare module.exports: $Exports<'core-js/modules/_has'>;
+}
+declare module 'core-js/modules/_hide.js' {
+  declare module.exports: $Exports<'core-js/modules/_hide'>;
+}
+declare module 'core-js/modules/_html.js' {
+  declare module.exports: $Exports<'core-js/modules/_html'>;
+}
+declare module 'core-js/modules/_ie8-dom-define.js' {
+  declare module.exports: $Exports<'core-js/modules/_ie8-dom-define'>;
+}
+declare module 'core-js/modules/_inherit-if-required.js' {
+  declare module.exports: $Exports<'core-js/modules/_inherit-if-required'>;
+}
+declare module 'core-js/modules/_invoke.js' {
+  declare module.exports: $Exports<'core-js/modules/_invoke'>;
+}
+declare module 'core-js/modules/_iobject.js' {
+  declare module.exports: $Exports<'core-js/modules/_iobject'>;
+}
+declare module 'core-js/modules/_is-array-iter.js' {
+  declare module.exports: $Exports<'core-js/modules/_is-array-iter'>;
+}
+declare module 'core-js/modules/_is-array.js' {
+  declare module.exports: $Exports<'core-js/modules/_is-array'>;
+}
+declare module 'core-js/modules/_is-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/_is-integer'>;
+}
+declare module 'core-js/modules/_is-object.js' {
+  declare module.exports: $Exports<'core-js/modules/_is-object'>;
+}
+declare module 'core-js/modules/_is-regexp.js' {
+  declare module.exports: $Exports<'core-js/modules/_is-regexp'>;
+}
+declare module 'core-js/modules/_iter-call.js' {
+  declare module.exports: $Exports<'core-js/modules/_iter-call'>;
+}
+declare module 'core-js/modules/_iter-create.js' {
+  declare module.exports: $Exports<'core-js/modules/_iter-create'>;
+}
+declare module 'core-js/modules/_iter-define.js' {
+  declare module.exports: $Exports<'core-js/modules/_iter-define'>;
+}
+declare module 'core-js/modules/_iter-detect.js' {
+  declare module.exports: $Exports<'core-js/modules/_iter-detect'>;
+}
+declare module 'core-js/modules/_iter-step.js' {
+  declare module.exports: $Exports<'core-js/modules/_iter-step'>;
+}
+declare module 'core-js/modules/_iterators.js' {
+  declare module.exports: $Exports<'core-js/modules/_iterators'>;
+}
+declare module 'core-js/modules/_keyof.js' {
+  declare module.exports: $Exports<'core-js/modules/_keyof'>;
+}
+declare module 'core-js/modules/_library.js' {
+  declare module.exports: $Exports<'core-js/modules/_library'>;
+}
+declare module 'core-js/modules/_math-expm1.js' {
+  declare module.exports: $Exports<'core-js/modules/_math-expm1'>;
+}
+declare module 'core-js/modules/_math-log1p.js' {
+  declare module.exports: $Exports<'core-js/modules/_math-log1p'>;
+}
+declare module 'core-js/modules/_math-sign.js' {
+  declare module.exports: $Exports<'core-js/modules/_math-sign'>;
+}
+declare module 'core-js/modules/_meta.js' {
+  declare module.exports: $Exports<'core-js/modules/_meta'>;
+}
+declare module 'core-js/modules/_metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/_metadata'>;
+}
+declare module 'core-js/modules/_microtask.js' {
+  declare module.exports: $Exports<'core-js/modules/_microtask'>;
+}
+declare module 'core-js/modules/_object-assign.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-assign'>;
+}
+declare module 'core-js/modules/_object-create.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-create'>;
+}
+declare module 'core-js/modules/_object-define.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-define'>;
+}
+declare module 'core-js/modules/_object-dp.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-dp'>;
+}
+declare module 'core-js/modules/_object-dps.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-dps'>;
+}
+declare module 'core-js/modules/_object-forced-pam.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-forced-pam'>;
+}
+declare module 'core-js/modules/_object-gopd.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-gopd'>;
+}
+declare module 'core-js/modules/_object-gopn-ext.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-gopn-ext'>;
+}
+declare module 'core-js/modules/_object-gopn.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-gopn'>;
+}
+declare module 'core-js/modules/_object-gops.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-gops'>;
+}
+declare module 'core-js/modules/_object-gpo.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-gpo'>;
+}
+declare module 'core-js/modules/_object-keys-internal.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-keys-internal'>;
+}
+declare module 'core-js/modules/_object-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-keys'>;
+}
+declare module 'core-js/modules/_object-pie.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-pie'>;
+}
+declare module 'core-js/modules/_object-sap.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-sap'>;
+}
+declare module 'core-js/modules/_object-to-array.js' {
+  declare module.exports: $Exports<'core-js/modules/_object-to-array'>;
+}
+declare module 'core-js/modules/_own-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/_own-keys'>;
+}
+declare module 'core-js/modules/_parse-float.js' {
+  declare module.exports: $Exports<'core-js/modules/_parse-float'>;
+}
+declare module 'core-js/modules/_parse-int.js' {
+  declare module.exports: $Exports<'core-js/modules/_parse-int'>;
+}
+declare module 'core-js/modules/_partial.js' {
+  declare module.exports: $Exports<'core-js/modules/_partial'>;
+}
+declare module 'core-js/modules/_path.js' {
+  declare module.exports: $Exports<'core-js/modules/_path'>;
+}
+declare module 'core-js/modules/_property-desc.js' {
+  declare module.exports: $Exports<'core-js/modules/_property-desc'>;
+}
+declare module 'core-js/modules/_redefine-all.js' {
+  declare module.exports: $Exports<'core-js/modules/_redefine-all'>;
+}
+declare module 'core-js/modules/_redefine.js' {
+  declare module.exports: $Exports<'core-js/modules/_redefine'>;
+}
+declare module 'core-js/modules/_replacer.js' {
+  declare module.exports: $Exports<'core-js/modules/_replacer'>;
+}
+declare module 'core-js/modules/_same-value.js' {
+  declare module.exports: $Exports<'core-js/modules/_same-value'>;
+}
+declare module 'core-js/modules/_set-proto.js' {
+  declare module.exports: $Exports<'core-js/modules/_set-proto'>;
+}
+declare module 'core-js/modules/_set-species.js' {
+  declare module.exports: $Exports<'core-js/modules/_set-species'>;
+}
+declare module 'core-js/modules/_set-to-string-tag.js' {
+  declare module.exports: $Exports<'core-js/modules/_set-to-string-tag'>;
+}
+declare module 'core-js/modules/_shared-key.js' {
+  declare module.exports: $Exports<'core-js/modules/_shared-key'>;
+}
+declare module 'core-js/modules/_shared.js' {
+  declare module.exports: $Exports<'core-js/modules/_shared'>;
+}
+declare module 'core-js/modules/_species-constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/_species-constructor'>;
+}
+declare module 'core-js/modules/_strict-method.js' {
+  declare module.exports: $Exports<'core-js/modules/_strict-method'>;
+}
+declare module 'core-js/modules/_string-at.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-at'>;
+}
+declare module 'core-js/modules/_string-context.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-context'>;
+}
+declare module 'core-js/modules/_string-html.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-html'>;
+}
+declare module 'core-js/modules/_string-pad.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-pad'>;
+}
+declare module 'core-js/modules/_string-repeat.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-repeat'>;
+}
+declare module 'core-js/modules/_string-trim.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-trim'>;
+}
+declare module 'core-js/modules/_string-ws.js' {
+  declare module.exports: $Exports<'core-js/modules/_string-ws'>;
+}
+declare module 'core-js/modules/_task.js' {
+  declare module.exports: $Exports<'core-js/modules/_task'>;
+}
+declare module 'core-js/modules/_to-index.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-index'>;
+}
+declare module 'core-js/modules/_to-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-integer'>;
+}
+declare module 'core-js/modules/_to-iobject.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-iobject'>;
+}
+declare module 'core-js/modules/_to-length.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-length'>;
+}
+declare module 'core-js/modules/_to-object.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-object'>;
+}
+declare module 'core-js/modules/_to-primitive.js' {
+  declare module.exports: $Exports<'core-js/modules/_to-primitive'>;
+}
+declare module 'core-js/modules/_typed-array.js' {
+  declare module.exports: $Exports<'core-js/modules/_typed-array'>;
+}
+declare module 'core-js/modules/_typed-buffer.js' {
+  declare module.exports: $Exports<'core-js/modules/_typed-buffer'>;
+}
+declare module 'core-js/modules/_typed.js' {
+  declare module.exports: $Exports<'core-js/modules/_typed'>;
+}
+declare module 'core-js/modules/_uid.js' {
+  declare module.exports: $Exports<'core-js/modules/_uid'>;
+}
+declare module 'core-js/modules/_wks-define.js' {
+  declare module.exports: $Exports<'core-js/modules/_wks-define'>;
+}
+declare module 'core-js/modules/_wks-ext.js' {
+  declare module.exports: $Exports<'core-js/modules/_wks-ext'>;
+}
+declare module 'core-js/modules/_wks.js' {
+  declare module.exports: $Exports<'core-js/modules/_wks'>;
+}
+declare module 'core-js/modules/core.delay.js' {
+  declare module.exports: $Exports<'core-js/modules/core.delay'>;
+}
+declare module 'core-js/modules/core.dict.js' {
+  declare module.exports: $Exports<'core-js/modules/core.dict'>;
+}
+declare module 'core-js/modules/core.function.part.js' {
+  declare module.exports: $Exports<'core-js/modules/core.function.part'>;
+}
+declare module 'core-js/modules/core.get-iterator-method.js' {
+  declare module.exports: $Exports<'core-js/modules/core.get-iterator-method'>;
+}
+declare module 'core-js/modules/core.get-iterator.js' {
+  declare module.exports: $Exports<'core-js/modules/core.get-iterator'>;
+}
+declare module 'core-js/modules/core.is-iterable.js' {
+  declare module.exports: $Exports<'core-js/modules/core.is-iterable'>;
+}
+declare module 'core-js/modules/core.number.iterator.js' {
+  declare module.exports: $Exports<'core-js/modules/core.number.iterator'>;
+}
+declare module 'core-js/modules/core.object.classof.js' {
+  declare module.exports: $Exports<'core-js/modules/core.object.classof'>;
+}
+declare module 'core-js/modules/core.object.define.js' {
+  declare module.exports: $Exports<'core-js/modules/core.object.define'>;
+}
+declare module 'core-js/modules/core.object.is-object.js' {
+  declare module.exports: $Exports<'core-js/modules/core.object.is-object'>;
+}
+declare module 'core-js/modules/core.object.make.js' {
+  declare module.exports: $Exports<'core-js/modules/core.object.make'>;
+}
+declare module 'core-js/modules/core.regexp.escape.js' {
+  declare module.exports: $Exports<'core-js/modules/core.regexp.escape'>;
+}
+declare module 'core-js/modules/core.string.escape-html.js' {
+  declare module.exports: $Exports<'core-js/modules/core.string.escape-html'>;
+}
+declare module 'core-js/modules/core.string.unescape-html.js' {
+  declare module.exports: $Exports<'core-js/modules/core.string.unescape-html'>;
+}
+declare module 'core-js/modules/es5.js' {
+  declare module.exports: $Exports<'core-js/modules/es5'>;
+}
+declare module 'core-js/modules/es6.array.copy-within.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.copy-within'>;
+}
+declare module 'core-js/modules/es6.array.every.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.every'>;
+}
+declare module 'core-js/modules/es6.array.fill.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.fill'>;
+}
+declare module 'core-js/modules/es6.array.filter.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.filter'>;
+}
+declare module 'core-js/modules/es6.array.find-index.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.find-index'>;
+}
+declare module 'core-js/modules/es6.array.find.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.find'>;
+}
+declare module 'core-js/modules/es6.array.for-each.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.for-each'>;
+}
+declare module 'core-js/modules/es6.array.from.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.from'>;
+}
+declare module 'core-js/modules/es6.array.index-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.index-of'>;
+}
+declare module 'core-js/modules/es6.array.is-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.is-array'>;
+}
+declare module 'core-js/modules/es6.array.iterator.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.iterator'>;
+}
+declare module 'core-js/modules/es6.array.join.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.join'>;
+}
+declare module 'core-js/modules/es6.array.last-index-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.last-index-of'>;
+}
+declare module 'core-js/modules/es6.array.map.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.map'>;
+}
+declare module 'core-js/modules/es6.array.of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.of'>;
+}
+declare module 'core-js/modules/es6.array.reduce-right.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.reduce-right'>;
+}
+declare module 'core-js/modules/es6.array.reduce.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.reduce'>;
+}
+declare module 'core-js/modules/es6.array.slice.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.slice'>;
+}
+declare module 'core-js/modules/es6.array.some.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.some'>;
+}
+declare module 'core-js/modules/es6.array.sort.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.sort'>;
+}
+declare module 'core-js/modules/es6.array.species.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.array.species'>;
+}
+declare module 'core-js/modules/es6.date.now.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.date.now'>;
+}
+declare module 'core-js/modules/es6.date.to-iso-string.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.date.to-iso-string'>;
+}
+declare module 'core-js/modules/es6.date.to-json.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.date.to-json'>;
+}
+declare module 'core-js/modules/es6.date.to-primitive.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.date.to-primitive'>;
+}
+declare module 'core-js/modules/es6.date.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.date.to-string'>;
+}
+declare module 'core-js/modules/es6.function.bind.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.function.bind'>;
+}
+declare module 'core-js/modules/es6.function.has-instance.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.function.has-instance'>;
+}
+declare module 'core-js/modules/es6.function.name.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.function.name'>;
+}
+declare module 'core-js/modules/es6.map.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.map'>;
+}
+declare module 'core-js/modules/es6.math.acosh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.acosh'>;
+}
+declare module 'core-js/modules/es6.math.asinh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.asinh'>;
+}
+declare module 'core-js/modules/es6.math.atanh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.atanh'>;
+}
+declare module 'core-js/modules/es6.math.cbrt.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.cbrt'>;
+}
+declare module 'core-js/modules/es6.math.clz32.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.clz32'>;
+}
+declare module 'core-js/modules/es6.math.cosh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.cosh'>;
+}
+declare module 'core-js/modules/es6.math.expm1.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.expm1'>;
+}
+declare module 'core-js/modules/es6.math.fround.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.fround'>;
+}
+declare module 'core-js/modules/es6.math.hypot.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.hypot'>;
+}
+declare module 'core-js/modules/es6.math.imul.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.imul'>;
+}
+declare module 'core-js/modules/es6.math.log10.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.log10'>;
+}
+declare module 'core-js/modules/es6.math.log1p.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.log1p'>;
+}
+declare module 'core-js/modules/es6.math.log2.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.log2'>;
+}
+declare module 'core-js/modules/es6.math.sign.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.sign'>;
+}
+declare module 'core-js/modules/es6.math.sinh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.sinh'>;
+}
+declare module 'core-js/modules/es6.math.tanh.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.tanh'>;
+}
+declare module 'core-js/modules/es6.math.trunc.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.math.trunc'>;
+}
+declare module 'core-js/modules/es6.number.constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.constructor'>;
+}
+declare module 'core-js/modules/es6.number.epsilon.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.epsilon'>;
+}
+declare module 'core-js/modules/es6.number.is-finite.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.is-finite'>;
+}
+declare module 'core-js/modules/es6.number.is-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.is-integer'>;
+}
+declare module 'core-js/modules/es6.number.is-nan.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.is-nan'>;
+}
+declare module 'core-js/modules/es6.number.is-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.is-safe-integer'>;
+}
+declare module 'core-js/modules/es6.number.max-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.max-safe-integer'>;
+}
+declare module 'core-js/modules/es6.number.min-safe-integer.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.min-safe-integer'>;
+}
+declare module 'core-js/modules/es6.number.parse-float.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.parse-float'>;
+}
+declare module 'core-js/modules/es6.number.parse-int.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.parse-int'>;
+}
+declare module 'core-js/modules/es6.number.to-fixed.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.to-fixed'>;
+}
+declare module 'core-js/modules/es6.number.to-precision.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.number.to-precision'>;
+}
+declare module 'core-js/modules/es6.object.assign.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.assign'>;
+}
+declare module 'core-js/modules/es6.object.create.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.create'>;
+}
+declare module 'core-js/modules/es6.object.define-properties.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.define-properties'>;
+}
+declare module 'core-js/modules/es6.object.define-property.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.define-property'>;
+}
+declare module 'core-js/modules/es6.object.freeze.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.freeze'>;
+}
+declare module 'core-js/modules/es6.object.get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.get-own-property-descriptor'>;
+}
+declare module 'core-js/modules/es6.object.get-own-property-names.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.get-own-property-names'>;
+}
+declare module 'core-js/modules/es6.object.get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.get-prototype-of'>;
+}
+declare module 'core-js/modules/es6.object.is-extensible.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.is-extensible'>;
+}
+declare module 'core-js/modules/es6.object.is-frozen.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.is-frozen'>;
+}
+declare module 'core-js/modules/es6.object.is-sealed.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.is-sealed'>;
+}
+declare module 'core-js/modules/es6.object.is.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.is'>;
+}
+declare module 'core-js/modules/es6.object.keys.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.keys'>;
+}
+declare module 'core-js/modules/es6.object.prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.prevent-extensions'>;
+}
+declare module 'core-js/modules/es6.object.seal.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.seal'>;
+}
+declare module 'core-js/modules/es6.object.set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.set-prototype-of'>;
+}
+declare module 'core-js/modules/es6.object.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.object.to-string'>;
+}
+declare module 'core-js/modules/es6.parse-float.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.parse-float'>;
+}
+declare module 'core-js/modules/es6.parse-int.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.parse-int'>;
+}
+declare module 'core-js/modules/es6.promise.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.promise'>;
+}
+declare module 'core-js/modules/es6.reflect.apply.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.apply'>;
+}
+declare module 'core-js/modules/es6.reflect.construct.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.construct'>;
+}
+declare module 'core-js/modules/es6.reflect.define-property.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.define-property'>;
+}
+declare module 'core-js/modules/es6.reflect.delete-property.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.delete-property'>;
+}
+declare module 'core-js/modules/es6.reflect.enumerate.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.enumerate'>;
+}
+declare module 'core-js/modules/es6.reflect.get-own-property-descriptor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.get-own-property-descriptor'>;
+}
+declare module 'core-js/modules/es6.reflect.get-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.get-prototype-of'>;
+}
+declare module 'core-js/modules/es6.reflect.get.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.get'>;
+}
+declare module 'core-js/modules/es6.reflect.has.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.has'>;
+}
+declare module 'core-js/modules/es6.reflect.is-extensible.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.is-extensible'>;
+}
+declare module 'core-js/modules/es6.reflect.own-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.own-keys'>;
+}
+declare module 'core-js/modules/es6.reflect.prevent-extensions.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.prevent-extensions'>;
+}
+declare module 'core-js/modules/es6.reflect.set-prototype-of.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.set-prototype-of'>;
+}
+declare module 'core-js/modules/es6.reflect.set.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.reflect.set'>;
+}
+declare module 'core-js/modules/es6.regexp.constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.constructor'>;
+}
+declare module 'core-js/modules/es6.regexp.flags.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.flags'>;
+}
+declare module 'core-js/modules/es6.regexp.match.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.match'>;
+}
+declare module 'core-js/modules/es6.regexp.replace.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.replace'>;
+}
+declare module 'core-js/modules/es6.regexp.search.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.search'>;
+}
+declare module 'core-js/modules/es6.regexp.split.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.split'>;
+}
+declare module 'core-js/modules/es6.regexp.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.regexp.to-string'>;
+}
+declare module 'core-js/modules/es6.set.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.set'>;
+}
+declare module 'core-js/modules/es6.string.anchor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.anchor'>;
+}
+declare module 'core-js/modules/es6.string.big.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.big'>;
+}
+declare module 'core-js/modules/es6.string.blink.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.blink'>;
+}
+declare module 'core-js/modules/es6.string.bold.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.bold'>;
+}
+declare module 'core-js/modules/es6.string.code-point-at.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.code-point-at'>;
+}
+declare module 'core-js/modules/es6.string.ends-with.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.ends-with'>;
+}
+declare module 'core-js/modules/es6.string.fixed.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.fixed'>;
+}
+declare module 'core-js/modules/es6.string.fontcolor.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.fontcolor'>;
+}
+declare module 'core-js/modules/es6.string.fontsize.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.fontsize'>;
+}
+declare module 'core-js/modules/es6.string.from-code-point.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.from-code-point'>;
+}
+declare module 'core-js/modules/es6.string.includes.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.includes'>;
+}
+declare module 'core-js/modules/es6.string.italics.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.italics'>;
+}
+declare module 'core-js/modules/es6.string.iterator.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.iterator'>;
+}
+declare module 'core-js/modules/es6.string.link.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.link'>;
+}
+declare module 'core-js/modules/es6.string.raw.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.raw'>;
+}
+declare module 'core-js/modules/es6.string.repeat.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.repeat'>;
+}
+declare module 'core-js/modules/es6.string.small.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.small'>;
+}
+declare module 'core-js/modules/es6.string.starts-with.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.starts-with'>;
+}
+declare module 'core-js/modules/es6.string.strike.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.strike'>;
+}
+declare module 'core-js/modules/es6.string.sub.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.sub'>;
+}
+declare module 'core-js/modules/es6.string.sup.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.sup'>;
+}
+declare module 'core-js/modules/es6.string.trim.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.string.trim'>;
+}
+declare module 'core-js/modules/es6.symbol.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.symbol'>;
+}
+declare module 'core-js/modules/es6.typed.array-buffer.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.array-buffer'>;
+}
+declare module 'core-js/modules/es6.typed.data-view.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.data-view'>;
+}
+declare module 'core-js/modules/es6.typed.float32-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.float32-array'>;
+}
+declare module 'core-js/modules/es6.typed.float64-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.float64-array'>;
+}
+declare module 'core-js/modules/es6.typed.int16-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.int16-array'>;
+}
+declare module 'core-js/modules/es6.typed.int32-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.int32-array'>;
+}
+declare module 'core-js/modules/es6.typed.int8-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.int8-array'>;
+}
+declare module 'core-js/modules/es6.typed.uint16-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.uint16-array'>;
+}
+declare module 'core-js/modules/es6.typed.uint32-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.uint32-array'>;
+}
+declare module 'core-js/modules/es6.typed.uint8-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.uint8-array'>;
+}
+declare module 'core-js/modules/es6.typed.uint8-clamped-array.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.typed.uint8-clamped-array'>;
+}
+declare module 'core-js/modules/es6.weak-map.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.weak-map'>;
+}
+declare module 'core-js/modules/es6.weak-set.js' {
+  declare module.exports: $Exports<'core-js/modules/es6.weak-set'>;
+}
+declare module 'core-js/modules/es7.array.includes.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.array.includes'>;
+}
+declare module 'core-js/modules/es7.asap.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.asap'>;
+}
+declare module 'core-js/modules/es7.error.is-error.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.error.is-error'>;
+}
+declare module 'core-js/modules/es7.map.to-json.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.map.to-json'>;
+}
+declare module 'core-js/modules/es7.math.iaddh.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.math.iaddh'>;
+}
+declare module 'core-js/modules/es7.math.imulh.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.math.imulh'>;
+}
+declare module 'core-js/modules/es7.math.isubh.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.math.isubh'>;
+}
+declare module 'core-js/modules/es7.math.umulh.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.math.umulh'>;
+}
+declare module 'core-js/modules/es7.object.define-getter.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.define-getter'>;
+}
+declare module 'core-js/modules/es7.object.define-setter.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.define-setter'>;
+}
+declare module 'core-js/modules/es7.object.entries.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.entries'>;
+}
+declare module 'core-js/modules/es7.object.enumerable-entries.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.enumerable-entries'>;
+}
+declare module 'core-js/modules/es7.object.enumerable-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.enumerable-keys'>;
+}
+declare module 'core-js/modules/es7.object.enumerable-values.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.enumerable-values'>;
+}
+declare module 'core-js/modules/es7.object.get-own-property-descriptors.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.get-own-property-descriptors'>;
+}
+declare module 'core-js/modules/es7.object.lookup-getter.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.lookup-getter'>;
+}
+declare module 'core-js/modules/es7.object.lookup-setter.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.lookup-setter'>;
+}
+declare module 'core-js/modules/es7.object.values.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.object.values'>;
+}
+declare module 'core-js/modules/es7.observable.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.observable'>;
+}
+declare module 'core-js/modules/es7.reflect.define-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.define-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.delete-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.delete-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.get-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.get-metadata-keys'>;
+}
+declare module 'core-js/modules/es7.reflect.get-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.get-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.get-own-metadata-keys.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.get-own-metadata-keys'>;
+}
+declare module 'core-js/modules/es7.reflect.get-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.get-own-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.has-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.has-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.has-own-metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.has-own-metadata'>;
+}
+declare module 'core-js/modules/es7.reflect.metadata.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.reflect.metadata'>;
+}
+declare module 'core-js/modules/es7.set.to-json.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.set.to-json'>;
+}
+declare module 'core-js/modules/es7.string.at.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.at'>;
+}
+declare module 'core-js/modules/es7.string.match-all.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.match-all'>;
+}
+declare module 'core-js/modules/es7.string.pad-end.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.pad-end'>;
+}
+declare module 'core-js/modules/es7.string.pad-start.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.pad-start'>;
+}
+declare module 'core-js/modules/es7.string.trim-left.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.trim-left'>;
+}
+declare module 'core-js/modules/es7.string.trim-right.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.string.trim-right'>;
+}
+declare module 'core-js/modules/es7.symbol.async-iterator.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.symbol.async-iterator'>;
+}
+declare module 'core-js/modules/es7.symbol.observable.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.symbol.observable'>;
+}
+declare module 'core-js/modules/es7.system.global.js' {
+  declare module.exports: $Exports<'core-js/modules/es7.system.global'>;
+}
+declare module 'core-js/modules/library/_add-to-unscopables.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_add-to-unscopables'>;
+}
+declare module 'core-js/modules/library/_collection.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_collection'>;
+}
+declare module 'core-js/modules/library/_export.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_export'>;
+}
+declare module 'core-js/modules/library/_library.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_library'>;
+}
+declare module 'core-js/modules/library/_path.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_path'>;
+}
+declare module 'core-js/modules/library/_redefine-all.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_redefine-all'>;
+}
+declare module 'core-js/modules/library/_redefine.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_redefine'>;
+}
+declare module 'core-js/modules/library/_set-species.js' {
+  declare module.exports: $Exports<'core-js/modules/library/_set-species'>;
+}
+declare module 'core-js/modules/library/es6.date.to-primitive.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.date.to-primitive'>;
+}
+declare module 'core-js/modules/library/es6.date.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.date.to-string'>;
+}
+declare module 'core-js/modules/library/es6.function.name.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.function.name'>;
+}
+declare module 'core-js/modules/library/es6.number.constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.number.constructor'>;
+}
+declare module 'core-js/modules/library/es6.object.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.object.to-string'>;
+}
+declare module 'core-js/modules/library/es6.regexp.constructor.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.constructor'>;
+}
+declare module 'core-js/modules/library/es6.regexp.flags.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.flags'>;
+}
+declare module 'core-js/modules/library/es6.regexp.match.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.match'>;
+}
+declare module 'core-js/modules/library/es6.regexp.replace.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.replace'>;
+}
+declare module 'core-js/modules/library/es6.regexp.search.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.search'>;
+}
+declare module 'core-js/modules/library/es6.regexp.split.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.split'>;
+}
+declare module 'core-js/modules/library/es6.regexp.to-string.js' {
+  declare module.exports: $Exports<'core-js/modules/library/es6.regexp.to-string'>;
+}
+declare module 'core-js/modules/library/web.dom.iterable.js' {
+  declare module.exports: $Exports<'core-js/modules/library/web.dom.iterable'>;
+}
+declare module 'core-js/modules/web.dom.iterable.js' {
+  declare module.exports: $Exports<'core-js/modules/web.dom.iterable'>;
+}
+declare module 'core-js/modules/web.immediate.js' {
+  declare module.exports: $Exports<'core-js/modules/web.immediate'>;
+}
+declare module 'core-js/modules/web.timers.js' {
+  declare module.exports: $Exports<'core-js/modules/web.timers'>;
+}
+declare module 'core-js/shim.js' {
+  declare module.exports: $Exports<'core-js/shim'>;
+}
+declare module 'core-js/stage/0.js' {
+  declare module.exports: $Exports<'core-js/stage/0'>;
+}
+declare module 'core-js/stage/1.js' {
+  declare module.exports: $Exports<'core-js/stage/1'>;
+}
+declare module 'core-js/stage/2.js' {
+  declare module.exports: $Exports<'core-js/stage/2'>;
+}
+declare module 'core-js/stage/3.js' {
+  declare module.exports: $Exports<'core-js/stage/3'>;
+}
+declare module 'core-js/stage/4.js' {
+  declare module.exports: $Exports<'core-js/stage/4'>;
+}
+declare module 'core-js/stage/index.js' {
+  declare module.exports: $Exports<'core-js/stage/index'>;
+}
+declare module 'core-js/stage/pre.js' {
+  declare module.exports: $Exports<'core-js/stage/pre'>;
+}
+declare module 'core-js/web/dom-collections.js' {
+  declare module.exports: $Exports<'core-js/web/dom-collections'>;
+}
+declare module 'core-js/web/immediate.js' {
+  declare module.exports: $Exports<'core-js/web/immediate'>;
+}
+declare module 'core-js/web/index.js' {
+  declare module.exports: $Exports<'core-js/web/index'>;
+}
+declare module 'core-js/web/timers.js' {
+  declare module.exports: $Exports<'core-js/web/timers'>;
+}
diff --git a/flow-typed/npm/cross-spawn_vx.x.x.js b/flow-typed/npm/cross-spawn_vx.x.x.js
new file mode 100644
index 0000000..92ca2f1
--- /dev/null
+++ b/flow-typed/npm/cross-spawn_vx.x.x.js
@@ -0,0 +1,59 @@
+// flow-typed signature: 61abc04328de805c914647ba9f60e747
+// flow-typed version: <<STUB>>/cross-spawn_v^4.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'cross-spawn'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'cross-spawn' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'cross-spawn/lib/enoent' {
+  declare module.exports: any;
+}
+
+declare module 'cross-spawn/lib/hasBrokenSpawn' {
+  declare module.exports: any;
+}
+
+declare module 'cross-spawn/lib/parse' {
+  declare module.exports: any;
+}
+
+declare module 'cross-spawn/lib/resolveCommand' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'cross-spawn/index' {
+  declare module.exports: $Exports<'cross-spawn'>;
+}
+declare module 'cross-spawn/index.js' {
+  declare module.exports: $Exports<'cross-spawn'>;
+}
+declare module 'cross-spawn/lib/enoent.js' {
+  declare module.exports: $Exports<'cross-spawn/lib/enoent'>;
+}
+declare module 'cross-spawn/lib/hasBrokenSpawn.js' {
+  declare module.exports: $Exports<'cross-spawn/lib/hasBrokenSpawn'>;
+}
+declare module 'cross-spawn/lib/parse.js' {
+  declare module.exports: $Exports<'cross-spawn/lib/parse'>;
+}
+declare module 'cross-spawn/lib/resolveCommand.js' {
+  declare module.exports: $Exports<'cross-spawn/lib/resolveCommand'>;
+}
diff --git a/flow-typed/npm/css-loader_vx.x.x.js b/flow-typed/npm/css-loader_vx.x.x.js
new file mode 100644
index 0000000..8bb20bd
--- /dev/null
+++ b/flow-typed/npm/css-loader_vx.x.x.js
@@ -0,0 +1,87 @@
+// flow-typed signature: 3d15dceba7ae8991811d8fc44cdcd354
+// flow-typed version: <<STUB>>/css-loader_v^0.26.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'css-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'css-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'css-loader/lib/compile-exports' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/css-base' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/getImportPrefix' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/getLocalIdent' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/loader' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/localsLoader' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/lib/processCss' {
+  declare module.exports: any;
+}
+
+declare module 'css-loader/locals' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'css-loader/index' {
+  declare module.exports: $Exports<'css-loader'>;
+}
+declare module 'css-loader/index.js' {
+  declare module.exports: $Exports<'css-loader'>;
+}
+declare module 'css-loader/lib/compile-exports.js' {
+  declare module.exports: $Exports<'css-loader/lib/compile-exports'>;
+}
+declare module 'css-loader/lib/css-base.js' {
+  declare module.exports: $Exports<'css-loader/lib/css-base'>;
+}
+declare module 'css-loader/lib/getImportPrefix.js' {
+  declare module.exports: $Exports<'css-loader/lib/getImportPrefix'>;
+}
+declare module 'css-loader/lib/getLocalIdent.js' {
+  declare module.exports: $Exports<'css-loader/lib/getLocalIdent'>;
+}
+declare module 'css-loader/lib/loader.js' {
+  declare module.exports: $Exports<'css-loader/lib/loader'>;
+}
+declare module 'css-loader/lib/localsLoader.js' {
+  declare module.exports: $Exports<'css-loader/lib/localsLoader'>;
+}
+declare module 'css-loader/lib/processCss.js' {
+  declare module.exports: $Exports<'css-loader/lib/processCss'>;
+}
+declare module 'css-loader/locals.js' {
+  declare module.exports: $Exports<'css-loader/locals'>;
+}
diff --git a/flow-typed/npm/cubicbezier_vx.x.x.js b/flow-typed/npm/cubicbezier_vx.x.x.js
new file mode 100644
index 0000000..430ab63
--- /dev/null
+++ b/flow-typed/npm/cubicbezier_vx.x.x.js
@@ -0,0 +1,109 @@
+// flow-typed signature: 2acc7f273c46882f343acb402b1618f3
+// flow-typed version: <<STUB>>/cubicbezier_v^0.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'cubicbezier'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'cubicbezier' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'cubicbezier/api/scripts/bootstrap.min' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/jquery.min' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/linenumber' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/main' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/prettify/lang-css' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/prettify/prettify' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/api/scripts/underscore-min' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/build/cubicbezier.common' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/build/cubicbezier.debug' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/build/cubicbezier' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/Gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'cubicbezier/src/cubicbezier' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'cubicbezier/api/scripts/bootstrap.min.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/bootstrap.min'>;
+}
+declare module 'cubicbezier/api/scripts/jquery.min.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/jquery.min'>;
+}
+declare module 'cubicbezier/api/scripts/linenumber.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/linenumber'>;
+}
+declare module 'cubicbezier/api/scripts/main.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/main'>;
+}
+declare module 'cubicbezier/api/scripts/prettify/lang-css.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/prettify/lang-css'>;
+}
+declare module 'cubicbezier/api/scripts/prettify/prettify.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/prettify/prettify'>;
+}
+declare module 'cubicbezier/api/scripts/underscore-min.js' {
+  declare module.exports: $Exports<'cubicbezier/api/scripts/underscore-min'>;
+}
+declare module 'cubicbezier/build/cubicbezier.common.js' {
+  declare module.exports: $Exports<'cubicbezier/build/cubicbezier.common'>;
+}
+declare module 'cubicbezier/build/cubicbezier.debug.js' {
+  declare module.exports: $Exports<'cubicbezier/build/cubicbezier.debug'>;
+}
+declare module 'cubicbezier/build/cubicbezier.js' {
+  declare module.exports: $Exports<'cubicbezier/build/cubicbezier'>;
+}
+declare module 'cubicbezier/Gruntfile.js' {
+  declare module.exports: $Exports<'cubicbezier/Gruntfile'>;
+}
+declare module 'cubicbezier/src/cubicbezier.js' {
+  declare module.exports: $Exports<'cubicbezier/src/cubicbezier'>;
+}
diff --git a/flow-typed/npm/danger_vx.x.x.js b/flow-typed/npm/danger_vx.x.x.js
new file mode 100644
index 0000000..82a6393
--- /dev/null
+++ b/flow-typed/npm/danger_vx.x.x.js
@@ -0,0 +1,284 @@
+// flow-typed signature: 1c9bafbcdbde50023262e7b0774de8e2
+// flow-typed version: <<STUB>>/danger_v^0.11.5/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'danger'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'danger' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'danger/coverage/remapped/html/prettify' {
+  declare module.exports: any;
+}
+
+declare module 'danger/coverage/remapped/html/sorter' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/api/fetch' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/ci_source_helpers' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/ci_source' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/get_ci_source' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Circle' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Codeship' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/DockerCloud' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Fake' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/index' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Jenkins' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Semaphore' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Surf' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/ci_source/providers/Travis' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/commands/danger-pr' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/commands/danger-run' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/commands/danger' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/danger' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/Aliases' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/Commit' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/DangerDSL' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/DangerResults' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/GitDSL' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/dsl/GitHubDSL' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/FakePlatform' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/GitHub' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/github/GitHubAPI' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/github/pullRequestParser' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/messaging/violation' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/platforms/platform' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/runner/Dangerfile' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/runner/DangerfileRunner' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/runner/Executor' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/runner/templates/githubIssueTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'danger/distribution/runner/types' {
+  declare module.exports: any;
+}
+
+declare module 'danger/wallaby' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'danger/coverage/remapped/html/prettify.js' {
+  declare module.exports: $Exports<'danger/coverage/remapped/html/prettify'>;
+}
+declare module 'danger/coverage/remapped/html/sorter.js' {
+  declare module.exports: $Exports<'danger/coverage/remapped/html/sorter'>;
+}
+declare module 'danger/distribution/api/fetch.js' {
+  declare module.exports: $Exports<'danger/distribution/api/fetch'>;
+}
+declare module 'danger/distribution/ci_source/ci_source_helpers.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/ci_source_helpers'>;
+}
+declare module 'danger/distribution/ci_source/ci_source.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/ci_source'>;
+}
+declare module 'danger/distribution/ci_source/get_ci_source.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/get_ci_source'>;
+}
+declare module 'danger/distribution/ci_source/providers/Circle.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Circle'>;
+}
+declare module 'danger/distribution/ci_source/providers/Codeship.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Codeship'>;
+}
+declare module 'danger/distribution/ci_source/providers/DockerCloud.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/DockerCloud'>;
+}
+declare module 'danger/distribution/ci_source/providers/Fake.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Fake'>;
+}
+declare module 'danger/distribution/ci_source/providers/index.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/index'>;
+}
+declare module 'danger/distribution/ci_source/providers/Jenkins.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Jenkins'>;
+}
+declare module 'danger/distribution/ci_source/providers/Semaphore.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Semaphore'>;
+}
+declare module 'danger/distribution/ci_source/providers/Surf.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Surf'>;
+}
+declare module 'danger/distribution/ci_source/providers/Travis.js' {
+  declare module.exports: $Exports<'danger/distribution/ci_source/providers/Travis'>;
+}
+declare module 'danger/distribution/commands/danger-pr.js' {
+  declare module.exports: $Exports<'danger/distribution/commands/danger-pr'>;
+}
+declare module 'danger/distribution/commands/danger-run.js' {
+  declare module.exports: $Exports<'danger/distribution/commands/danger-run'>;
+}
+declare module 'danger/distribution/commands/danger.js' {
+  declare module.exports: $Exports<'danger/distribution/commands/danger'>;
+}
+declare module 'danger/distribution/danger.js' {
+  declare module.exports: $Exports<'danger/distribution/danger'>;
+}
+declare module 'danger/distribution/dsl/Aliases.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/Aliases'>;
+}
+declare module 'danger/distribution/dsl/Commit.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/Commit'>;
+}
+declare module 'danger/distribution/dsl/DangerDSL.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/DangerDSL'>;
+}
+declare module 'danger/distribution/dsl/DangerResults.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/DangerResults'>;
+}
+declare module 'danger/distribution/dsl/GitDSL.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/GitDSL'>;
+}
+declare module 'danger/distribution/dsl/GitHubDSL.js' {
+  declare module.exports: $Exports<'danger/distribution/dsl/GitHubDSL'>;
+}
+declare module 'danger/distribution/platforms/FakePlatform.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/FakePlatform'>;
+}
+declare module 'danger/distribution/platforms/GitHub.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/GitHub'>;
+}
+declare module 'danger/distribution/platforms/github/GitHubAPI.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/github/GitHubAPI'>;
+}
+declare module 'danger/distribution/platforms/github/pullRequestParser.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/github/pullRequestParser'>;
+}
+declare module 'danger/distribution/platforms/messaging/violation.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/messaging/violation'>;
+}
+declare module 'danger/distribution/platforms/platform.js' {
+  declare module.exports: $Exports<'danger/distribution/platforms/platform'>;
+}
+declare module 'danger/distribution/runner/Dangerfile.js' {
+  declare module.exports: $Exports<'danger/distribution/runner/Dangerfile'>;
+}
+declare module 'danger/distribution/runner/DangerfileRunner.js' {
+  declare module.exports: $Exports<'danger/distribution/runner/DangerfileRunner'>;
+}
+declare module 'danger/distribution/runner/Executor.js' {
+  declare module.exports: $Exports<'danger/distribution/runner/Executor'>;
+}
+declare module 'danger/distribution/runner/templates/githubIssueTemplate.js' {
+  declare module.exports: $Exports<'danger/distribution/runner/templates/githubIssueTemplate'>;
+}
+declare module 'danger/distribution/runner/types.js' {
+  declare module.exports: $Exports<'danger/distribution/runner/types'>;
+}
+declare module 'danger/wallaby.js' {
+  declare module.exports: $Exports<'danger/wallaby'>;
+}
diff --git a/flow-typed/npm/envd_vx.x.x.js b/flow-typed/npm/envd_vx.x.x.js
new file mode 100644
index 0000000..a643554
--- /dev/null
+++ b/flow-typed/npm/envd_vx.x.x.js
@@ -0,0 +1,109 @@
+// flow-typed signature: af9ebe066fe75d46a18a54b7d8b93aa0
+// flow-typed version: <<STUB>>/envd_v^0.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'envd'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'envd' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'envd/build/envd.common' {
+  declare module.exports: any;
+}
+
+declare module 'envd/build/envd.debug' {
+  declare module.exports: any;
+}
+
+declare module 'envd/build/envd' {
+  declare module.exports: any;
+}
+
+declare module 'envd/Gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/app' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/browser' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/envd' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/os' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/params' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/thirdapp' {
+  declare module.exports: any;
+}
+
+declare module 'envd/src/version' {
+  declare module.exports: any;
+}
+
+declare module 'envd/test/env-test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'envd/build/envd.common.js' {
+  declare module.exports: $Exports<'envd/build/envd.common'>;
+}
+declare module 'envd/build/envd.debug.js' {
+  declare module.exports: $Exports<'envd/build/envd.debug'>;
+}
+declare module 'envd/build/envd.js' {
+  declare module.exports: $Exports<'envd/build/envd'>;
+}
+declare module 'envd/Gruntfile.js' {
+  declare module.exports: $Exports<'envd/Gruntfile'>;
+}
+declare module 'envd/src/app.js' {
+  declare module.exports: $Exports<'envd/src/app'>;
+}
+declare module 'envd/src/browser.js' {
+  declare module.exports: $Exports<'envd/src/browser'>;
+}
+declare module 'envd/src/envd.js' {
+  declare module.exports: $Exports<'envd/src/envd'>;
+}
+declare module 'envd/src/os.js' {
+  declare module.exports: $Exports<'envd/src/os'>;
+}
+declare module 'envd/src/params.js' {
+  declare module.exports: $Exports<'envd/src/params'>;
+}
+declare module 'envd/src/thirdapp.js' {
+  declare module.exports: $Exports<'envd/src/thirdapp'>;
+}
+declare module 'envd/src/version.js' {
+  declare module.exports: $Exports<'envd/src/version'>;
+}
+declare module 'envd/test/env-test.js' {
+  declare module.exports: $Exports<'envd/test/env-test'>;
+}
diff --git a/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js b/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js
new file mode 100644
index 0000000..269a1fc
--- /dev/null
+++ b/flow-typed/npm/eslint-plugin-flowtype_vx.x.x.js
@@ -0,0 +1,319 @@
+// flow-typed signature: fc3fc729dcec925198f4e66b48750ba8
+// flow-typed version: <<STUB>>/eslint-plugin-flowtype_v^2.30.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'eslint-plugin-flowtype'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'eslint-plugin-flowtype' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'eslint-plugin-flowtype/bin/readmeAssertions' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/index' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/booleanStyle' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/defineFlowType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/delimiterDangle' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/genericSpacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/noDupeKeys' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/noWeakTypes' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/requireParameterType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/requireReturnType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/requireVariableType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/semi' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/sortKeys' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/typeIdMatch' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/useFlowType' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/rules/validSyntax' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/getParameterName' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/index' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFile' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/quoteName' {
+  declare module.exports: any;
+}
+
+declare module 'eslint-plugin-flowtype/dist/utilities/spacingFixers' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'eslint-plugin-flowtype/bin/readmeAssertions.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/bin/readmeAssertions'>;
+}
+declare module 'eslint-plugin-flowtype/dist/index.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/index'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/booleanStyle.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/booleanStyle'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/defineFlowType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/defineFlowType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/delimiterDangle.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/delimiterDangle'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/genericSpacing.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/genericSpacing'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/noDupeKeys.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noDupeKeys'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noPrimitiveConstructorTypes'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/noWeakTypes.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/noWeakTypes'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/objectTypeDelimiter'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/requireParameterType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireParameterType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/requireReturnType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireReturnType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireValidFileAnnotation'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/requireVariableType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/requireVariableType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/semi.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/semi'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/sortKeys.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/sortKeys'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceAfterTypeColon'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceBeforeGenericBracket'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/spaceBeforeTypeColon'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateFunctions'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeIndexer'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateObjectTypeProperty'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateReturnType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypeCastExpression'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/evaluateTypical'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/index'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeColonSpacing/reporter'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/typeIdMatch.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/typeIdMatch'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/unionIntersectionSpacing'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/useFlowType.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/useFlowType'>;
+}
+declare module 'eslint-plugin-flowtype/dist/rules/validSyntax.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/rules/validSyntax'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/checkFlowFileAnnotation'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/fuzzyStringMatch'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/getParameterName.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getParameterName'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getTokenAfterParens'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/getTokenBeforeParens'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/index.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/index'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFile.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isFlowFile'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/isFlowFileAnnotation'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/iterateFunctionNodes'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/quoteName.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/quoteName'>;
+}
+declare module 'eslint-plugin-flowtype/dist/utilities/spacingFixers.js' {
+  declare module.exports: $Exports<'eslint-plugin-flowtype/dist/utilities/spacingFixers'>;
+}
diff --git a/flow-typed/npm/eslint_vx.x.x.js b/flow-typed/npm/eslint_vx.x.x.js
new file mode 100644
index 0000000..ddc0c86
--- /dev/null
+++ b/flow-typed/npm/eslint_vx.x.x.js
@@ -0,0 +1,1978 @@
+// flow-typed signature: da6806e3fae70af833ecac5fcc52f0c1
+// flow-typed version: <<STUB>>/eslint_v^2.11.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'eslint'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'eslint' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'eslint/bin/eslint' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/conf/cli-options' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/conf/environments' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/conf/eslint-all' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/api' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/ast-utils' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/cli-engine' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/cli' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/code-path-analyzer' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/code-path-segment' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/code-path-state' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/code-path' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/debug-helpers' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/fork-context' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/code-path-analysis/id-generator' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/autoconfig' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/config-file' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/config-initializer' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/config-ops' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/config-rule' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/config-validator' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/environments' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/config/plugins' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/eslint' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/file-finder' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/checkstyle' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/compact' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/html' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/jslint-xml' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/json' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/junit' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/stylish' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/table' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/tap' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/unix' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/formatters/visualstudio' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/ignored-paths' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/load-rules' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/logging' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/options' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rule-context' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/accessor-pairs' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/array-bracket-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/array-callback-return' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/arrow-body-style' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/arrow-parens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/arrow-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/block-scoped-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/block-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/brace-style' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/callback-return' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/camelcase' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/comma-dangle' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/comma-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/comma-style' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/complexity' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/computed-property-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/consistent-return' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/consistent-this' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/constructor-super' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/curly' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/default-case' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/dot-location' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/dot-notation' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/eol-last' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/eqeqeq' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/func-names' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/func-style' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/generator-star-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/global-require' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/guard-for-in' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/handle-callback-err' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/id-blacklist' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/id-length' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/id-match' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/indent' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/init-declarations' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/jsx-quotes' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/key-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/keyword-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/linebreak-style' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/lines-around-comment' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-depth' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-len' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-lines' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-nested-callbacks' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-params' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-statements-per-line' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/max-statements' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/new-cap' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/new-parens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/newline-after-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/newline-before-return' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/newline-per-chained-call' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-alert' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-array-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-bitwise' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-caller' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-case-declarations' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-catch-shadow' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-class-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-cond-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-confusing-arrow' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-console' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-const-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-constant-condition' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-continue' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-control-regex' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-debugger' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-delete-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-div-regex' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-dupe-args' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-dupe-class-members' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-dupe-keys' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-duplicate-case' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-duplicate-imports' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-else-return' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-empty-character-class' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-empty-function' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-empty-pattern' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-empty' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-eq-null' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-eval' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-ex-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extend-native' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extra-bind' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extra-boolean-cast' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extra-label' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extra-parens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-extra-semi' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-fallthrough' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-floating-decimal' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-func-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-implicit-coercion' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-implicit-globals' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-implied-eval' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-inline-comments' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-inner-declarations' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-invalid-regexp' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-invalid-this' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-irregular-whitespace' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-iterator' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-label-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-labels' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-lone-blocks' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-lonely-if' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-loop-func' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-magic-numbers' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-mixed-operators' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-mixed-requires' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-mixed-spaces-and-tabs' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-multi-spaces' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-multi-str' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-multiple-empty-lines' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-native-reassign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-negated-condition' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-negated-in-lhs' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-nested-ternary' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new-func' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new-object' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new-require' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new-symbol' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new-wrappers' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-new' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-obj-calls' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-octal-escape' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-octal' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-param-reassign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-path-concat' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-plusplus' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-process-env' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-process-exit' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-proto' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-prototype-builtins' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-redeclare' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-regex-spaces' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-restricted-globals' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-restricted-imports' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-restricted-modules' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-restricted-syntax' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-return-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-script-url' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-self-assign' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-self-compare' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-sequences' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-shadow-restricted-names' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-shadow' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-spaced-func' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-sparse-arrays' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-sync' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-ternary' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-this-before-super' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-throw-literal' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-trailing-spaces' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-undef-init' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-undef' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-undefined' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-underscore-dangle' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unexpected-multiline' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unmodified-loop-condition' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unneeded-ternary' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unreachable' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unsafe-finally' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unused-expressions' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unused-labels' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-unused-vars' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-use-before-define' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-call' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-computed-key' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-concat' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-constructor' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-escape' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-useless-rename' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-void' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-warning-comments' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-whitespace-before-property' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/no-with' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/object-curly-newline' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/object-curly-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/object-property-newline' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/object-shorthand' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/one-var-declaration-per-line' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/one-var' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/operator-assignment' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/operator-linebreak' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/padded-blocks' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-arrow-callback' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-const' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-reflect' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-rest-params' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-spread' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/prefer-template' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/quote-props' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/quotes' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/radix' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/require-jsdoc' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/require-yield' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/rest-spread-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/semi-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/semi' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/sort-imports' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/sort-vars' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/space-before-blocks' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/space-before-function-paren' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/space-in-parens' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/space-infix-ops' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/space-unary-ops' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/spaced-comment' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/strict' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/template-curly-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/unicode-bom' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/use-isnan' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/valid-jsdoc' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/valid-typeof' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/vars-on-top' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/wrap-iife' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/wrap-regex' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/yield-star-spacing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/rules/yoda' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/testers/event-generator-tester' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/testers/rule-tester' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/timing' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/token-store' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/comment-event-generator' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/glob-util' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/hash' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/keywords' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/module-resolver' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/node-event-generator' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/npm-util' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/path-util' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/rule-fixer' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/source-code-fixer' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/source-code-util' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/source-code' {
+  declare module.exports: any;
+}
+
+declare module 'eslint/lib/util/traverser' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'eslint/bin/eslint.js' {
+  declare module.exports: $Exports<'eslint/bin/eslint'>;
+}
+declare module 'eslint/conf/cli-options.js' {
+  declare module.exports: $Exports<'eslint/conf/cli-options'>;
+}
+declare module 'eslint/conf/environments.js' {
+  declare module.exports: $Exports<'eslint/conf/environments'>;
+}
+declare module 'eslint/conf/eslint-all.js' {
+  declare module.exports: $Exports<'eslint/conf/eslint-all'>;
+}
+declare module 'eslint/lib/api.js' {
+  declare module.exports: $Exports<'eslint/lib/api'>;
+}
+declare module 'eslint/lib/ast-utils.js' {
+  declare module.exports: $Exports<'eslint/lib/ast-utils'>;
+}
+declare module 'eslint/lib/cli-engine.js' {
+  declare module.exports: $Exports<'eslint/lib/cli-engine'>;
+}
+declare module 'eslint/lib/cli.js' {
+  declare module.exports: $Exports<'eslint/lib/cli'>;
+}
+declare module 'eslint/lib/code-path-analysis/code-path-analyzer.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-analyzer'>;
+}
+declare module 'eslint/lib/code-path-analysis/code-path-segment.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-segment'>;
+}
+declare module 'eslint/lib/code-path-analysis/code-path-state.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path-state'>;
+}
+declare module 'eslint/lib/code-path-analysis/code-path.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/code-path'>;
+}
+declare module 'eslint/lib/code-path-analysis/debug-helpers.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/debug-helpers'>;
+}
+declare module 'eslint/lib/code-path-analysis/fork-context.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/fork-context'>;
+}
+declare module 'eslint/lib/code-path-analysis/id-generator.js' {
+  declare module.exports: $Exports<'eslint/lib/code-path-analysis/id-generator'>;
+}
+declare module 'eslint/lib/config.js' {
+  declare module.exports: $Exports<'eslint/lib/config'>;
+}
+declare module 'eslint/lib/config/autoconfig.js' {
+  declare module.exports: $Exports<'eslint/lib/config/autoconfig'>;
+}
+declare module 'eslint/lib/config/config-file.js' {
+  declare module.exports: $Exports<'eslint/lib/config/config-file'>;
+}
+declare module 'eslint/lib/config/config-initializer.js' {
+  declare module.exports: $Exports<'eslint/lib/config/config-initializer'>;
+}
+declare module 'eslint/lib/config/config-ops.js' {
+  declare module.exports: $Exports<'eslint/lib/config/config-ops'>;
+}
+declare module 'eslint/lib/config/config-rule.js' {
+  declare module.exports: $Exports<'eslint/lib/config/config-rule'>;
+}
+declare module 'eslint/lib/config/config-validator.js' {
+  declare module.exports: $Exports<'eslint/lib/config/config-validator'>;
+}
+declare module 'eslint/lib/config/environments.js' {
+  declare module.exports: $Exports<'eslint/lib/config/environments'>;
+}
+declare module 'eslint/lib/config/plugins.js' {
+  declare module.exports: $Exports<'eslint/lib/config/plugins'>;
+}
+declare module 'eslint/lib/eslint.js' {
+  declare module.exports: $Exports<'eslint/lib/eslint'>;
+}
+declare module 'eslint/lib/file-finder.js' {
+  declare module.exports: $Exports<'eslint/lib/file-finder'>;
+}
+declare module 'eslint/lib/formatters/checkstyle.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/checkstyle'>;
+}
+declare module 'eslint/lib/formatters/compact.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/compact'>;
+}
+declare module 'eslint/lib/formatters/html.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/html'>;
+}
+declare module 'eslint/lib/formatters/jslint-xml.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/jslint-xml'>;
+}
+declare module 'eslint/lib/formatters/json.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/json'>;
+}
+declare module 'eslint/lib/formatters/junit.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/junit'>;
+}
+declare module 'eslint/lib/formatters/stylish.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/stylish'>;
+}
+declare module 'eslint/lib/formatters/table.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/table'>;
+}
+declare module 'eslint/lib/formatters/tap.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/tap'>;
+}
+declare module 'eslint/lib/formatters/unix.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/unix'>;
+}
+declare module 'eslint/lib/formatters/visualstudio.js' {
+  declare module.exports: $Exports<'eslint/lib/formatters/visualstudio'>;
+}
+declare module 'eslint/lib/ignored-paths.js' {
+  declare module.exports: $Exports<'eslint/lib/ignored-paths'>;
+}
+declare module 'eslint/lib/load-rules.js' {
+  declare module.exports: $Exports<'eslint/lib/load-rules'>;
+}
+declare module 'eslint/lib/logging.js' {
+  declare module.exports: $Exports<'eslint/lib/logging'>;
+}
+declare module 'eslint/lib/options.js' {
+  declare module.exports: $Exports<'eslint/lib/options'>;
+}
+declare module 'eslint/lib/rule-context.js' {
+  declare module.exports: $Exports<'eslint/lib/rule-context'>;
+}
+declare module 'eslint/lib/rules.js' {
+  declare module.exports: $Exports<'eslint/lib/rules'>;
+}
+declare module 'eslint/lib/rules/accessor-pairs.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/accessor-pairs'>;
+}
+declare module 'eslint/lib/rules/array-bracket-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/array-bracket-spacing'>;
+}
+declare module 'eslint/lib/rules/array-callback-return.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/array-callback-return'>;
+}
+declare module 'eslint/lib/rules/arrow-body-style.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/arrow-body-style'>;
+}
+declare module 'eslint/lib/rules/arrow-parens.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/arrow-parens'>;
+}
+declare module 'eslint/lib/rules/arrow-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/arrow-spacing'>;
+}
+declare module 'eslint/lib/rules/block-scoped-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/block-scoped-var'>;
+}
+declare module 'eslint/lib/rules/block-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/block-spacing'>;
+}
+declare module 'eslint/lib/rules/brace-style.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/brace-style'>;
+}
+declare module 'eslint/lib/rules/callback-return.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/callback-return'>;
+}
+declare module 'eslint/lib/rules/camelcase.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/camelcase'>;
+}
+declare module 'eslint/lib/rules/comma-dangle.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/comma-dangle'>;
+}
+declare module 'eslint/lib/rules/comma-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/comma-spacing'>;
+}
+declare module 'eslint/lib/rules/comma-style.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/comma-style'>;
+}
+declare module 'eslint/lib/rules/complexity.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/complexity'>;
+}
+declare module 'eslint/lib/rules/computed-property-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/computed-property-spacing'>;
+}
+declare module 'eslint/lib/rules/consistent-return.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/consistent-return'>;
+}
+declare module 'eslint/lib/rules/consistent-this.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/consistent-this'>;
+}
+declare module 'eslint/lib/rules/constructor-super.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/constructor-super'>;
+}
+declare module 'eslint/lib/rules/curly.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/curly'>;
+}
+declare module 'eslint/lib/rules/default-case.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/default-case'>;
+}
+declare module 'eslint/lib/rules/dot-location.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/dot-location'>;
+}
+declare module 'eslint/lib/rules/dot-notation.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/dot-notation'>;
+}
+declare module 'eslint/lib/rules/eol-last.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/eol-last'>;
+}
+declare module 'eslint/lib/rules/eqeqeq.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/eqeqeq'>;
+}
+declare module 'eslint/lib/rules/func-names.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/func-names'>;
+}
+declare module 'eslint/lib/rules/func-style.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/func-style'>;
+}
+declare module 'eslint/lib/rules/generator-star-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/generator-star-spacing'>;
+}
+declare module 'eslint/lib/rules/global-require.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/global-require'>;
+}
+declare module 'eslint/lib/rules/guard-for-in.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/guard-for-in'>;
+}
+declare module 'eslint/lib/rules/handle-callback-err.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/handle-callback-err'>;
+}
+declare module 'eslint/lib/rules/id-blacklist.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/id-blacklist'>;
+}
+declare module 'eslint/lib/rules/id-length.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/id-length'>;
+}
+declare module 'eslint/lib/rules/id-match.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/id-match'>;
+}
+declare module 'eslint/lib/rules/indent.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/indent'>;
+}
+declare module 'eslint/lib/rules/init-declarations.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/init-declarations'>;
+}
+declare module 'eslint/lib/rules/jsx-quotes.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/jsx-quotes'>;
+}
+declare module 'eslint/lib/rules/key-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/key-spacing'>;
+}
+declare module 'eslint/lib/rules/keyword-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/keyword-spacing'>;
+}
+declare module 'eslint/lib/rules/linebreak-style.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/linebreak-style'>;
+}
+declare module 'eslint/lib/rules/lines-around-comment.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/lines-around-comment'>;
+}
+declare module 'eslint/lib/rules/max-depth.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-depth'>;
+}
+declare module 'eslint/lib/rules/max-len.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-len'>;
+}
+declare module 'eslint/lib/rules/max-lines.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-lines'>;
+}
+declare module 'eslint/lib/rules/max-nested-callbacks.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-nested-callbacks'>;
+}
+declare module 'eslint/lib/rules/max-params.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-params'>;
+}
+declare module 'eslint/lib/rules/max-statements-per-line.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-statements-per-line'>;
+}
+declare module 'eslint/lib/rules/max-statements.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/max-statements'>;
+}
+declare module 'eslint/lib/rules/new-cap.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/new-cap'>;
+}
+declare module 'eslint/lib/rules/new-parens.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/new-parens'>;
+}
+declare module 'eslint/lib/rules/newline-after-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/newline-after-var'>;
+}
+declare module 'eslint/lib/rules/newline-before-return.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/newline-before-return'>;
+}
+declare module 'eslint/lib/rules/newline-per-chained-call.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/newline-per-chained-call'>;
+}
+declare module 'eslint/lib/rules/no-alert.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-alert'>;
+}
+declare module 'eslint/lib/rules/no-array-constructor.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-array-constructor'>;
+}
+declare module 'eslint/lib/rules/no-bitwise.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-bitwise'>;
+}
+declare module 'eslint/lib/rules/no-caller.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-caller'>;
+}
+declare module 'eslint/lib/rules/no-case-declarations.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-case-declarations'>;
+}
+declare module 'eslint/lib/rules/no-catch-shadow.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-catch-shadow'>;
+}
+declare module 'eslint/lib/rules/no-class-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-class-assign'>;
+}
+declare module 'eslint/lib/rules/no-cond-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-cond-assign'>;
+}
+declare module 'eslint/lib/rules/no-confusing-arrow.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-confusing-arrow'>;
+}
+declare module 'eslint/lib/rules/no-console.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-console'>;
+}
+declare module 'eslint/lib/rules/no-const-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-const-assign'>;
+}
+declare module 'eslint/lib/rules/no-constant-condition.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-constant-condition'>;
+}
+declare module 'eslint/lib/rules/no-continue.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-continue'>;
+}
+declare module 'eslint/lib/rules/no-control-regex.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-control-regex'>;
+}
+declare module 'eslint/lib/rules/no-debugger.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-debugger'>;
+}
+declare module 'eslint/lib/rules/no-delete-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-delete-var'>;
+}
+declare module 'eslint/lib/rules/no-div-regex.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-div-regex'>;
+}
+declare module 'eslint/lib/rules/no-dupe-args.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-args'>;
+}
+declare module 'eslint/lib/rules/no-dupe-class-members.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-class-members'>;
+}
+declare module 'eslint/lib/rules/no-dupe-keys.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-dupe-keys'>;
+}
+declare module 'eslint/lib/rules/no-duplicate-case.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-duplicate-case'>;
+}
+declare module 'eslint/lib/rules/no-duplicate-imports.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-duplicate-imports'>;
+}
+declare module 'eslint/lib/rules/no-else-return.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-else-return'>;
+}
+declare module 'eslint/lib/rules/no-empty-character-class.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-empty-character-class'>;
+}
+declare module 'eslint/lib/rules/no-empty-function.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-empty-function'>;
+}
+declare module 'eslint/lib/rules/no-empty-pattern.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-empty-pattern'>;
+}
+declare module 'eslint/lib/rules/no-empty.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-empty'>;
+}
+declare module 'eslint/lib/rules/no-eq-null.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-eq-null'>;
+}
+declare module 'eslint/lib/rules/no-eval.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-eval'>;
+}
+declare module 'eslint/lib/rules/no-ex-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-ex-assign'>;
+}
+declare module 'eslint/lib/rules/no-extend-native.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extend-native'>;
+}
+declare module 'eslint/lib/rules/no-extra-bind.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extra-bind'>;
+}
+declare module 'eslint/lib/rules/no-extra-boolean-cast.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extra-boolean-cast'>;
+}
+declare module 'eslint/lib/rules/no-extra-label.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extra-label'>;
+}
+declare module 'eslint/lib/rules/no-extra-parens.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extra-parens'>;
+}
+declare module 'eslint/lib/rules/no-extra-semi.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-extra-semi'>;
+}
+declare module 'eslint/lib/rules/no-fallthrough.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-fallthrough'>;
+}
+declare module 'eslint/lib/rules/no-floating-decimal.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-floating-decimal'>;
+}
+declare module 'eslint/lib/rules/no-func-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-func-assign'>;
+}
+declare module 'eslint/lib/rules/no-implicit-coercion.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-implicit-coercion'>;
+}
+declare module 'eslint/lib/rules/no-implicit-globals.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-implicit-globals'>;
+}
+declare module 'eslint/lib/rules/no-implied-eval.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-implied-eval'>;
+}
+declare module 'eslint/lib/rules/no-inline-comments.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-inline-comments'>;
+}
+declare module 'eslint/lib/rules/no-inner-declarations.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-inner-declarations'>;
+}
+declare module 'eslint/lib/rules/no-invalid-regexp.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-invalid-regexp'>;
+}
+declare module 'eslint/lib/rules/no-invalid-this.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-invalid-this'>;
+}
+declare module 'eslint/lib/rules/no-irregular-whitespace.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-irregular-whitespace'>;
+}
+declare module 'eslint/lib/rules/no-iterator.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-iterator'>;
+}
+declare module 'eslint/lib/rules/no-label-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-label-var'>;
+}
+declare module 'eslint/lib/rules/no-labels.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-labels'>;
+}
+declare module 'eslint/lib/rules/no-lone-blocks.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-lone-blocks'>;
+}
+declare module 'eslint/lib/rules/no-lonely-if.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-lonely-if'>;
+}
+declare module 'eslint/lib/rules/no-loop-func.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-loop-func'>;
+}
+declare module 'eslint/lib/rules/no-magic-numbers.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-magic-numbers'>;
+}
+declare module 'eslint/lib/rules/no-mixed-operators.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-operators'>;
+}
+declare module 'eslint/lib/rules/no-mixed-requires.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-requires'>;
+}
+declare module 'eslint/lib/rules/no-mixed-spaces-and-tabs.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-mixed-spaces-and-tabs'>;
+}
+declare module 'eslint/lib/rules/no-multi-spaces.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-multi-spaces'>;
+}
+declare module 'eslint/lib/rules/no-multi-str.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-multi-str'>;
+}
+declare module 'eslint/lib/rules/no-multiple-empty-lines.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-multiple-empty-lines'>;
+}
+declare module 'eslint/lib/rules/no-native-reassign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-native-reassign'>;
+}
+declare module 'eslint/lib/rules/no-negated-condition.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-negated-condition'>;
+}
+declare module 'eslint/lib/rules/no-negated-in-lhs.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-negated-in-lhs'>;
+}
+declare module 'eslint/lib/rules/no-nested-ternary.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-nested-ternary'>;
+}
+declare module 'eslint/lib/rules/no-new-func.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new-func'>;
+}
+declare module 'eslint/lib/rules/no-new-object.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new-object'>;
+}
+declare module 'eslint/lib/rules/no-new-require.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new-require'>;
+}
+declare module 'eslint/lib/rules/no-new-symbol.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new-symbol'>;
+}
+declare module 'eslint/lib/rules/no-new-wrappers.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new-wrappers'>;
+}
+declare module 'eslint/lib/rules/no-new.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-new'>;
+}
+declare module 'eslint/lib/rules/no-obj-calls.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-obj-calls'>;
+}
+declare module 'eslint/lib/rules/no-octal-escape.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-octal-escape'>;
+}
+declare module 'eslint/lib/rules/no-octal.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-octal'>;
+}
+declare module 'eslint/lib/rules/no-param-reassign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-param-reassign'>;
+}
+declare module 'eslint/lib/rules/no-path-concat.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-path-concat'>;
+}
+declare module 'eslint/lib/rules/no-plusplus.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-plusplus'>;
+}
+declare module 'eslint/lib/rules/no-process-env.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-process-env'>;
+}
+declare module 'eslint/lib/rules/no-process-exit.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-process-exit'>;
+}
+declare module 'eslint/lib/rules/no-proto.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-proto'>;
+}
+declare module 'eslint/lib/rules/no-prototype-builtins.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-prototype-builtins'>;
+}
+declare module 'eslint/lib/rules/no-redeclare.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-redeclare'>;
+}
+declare module 'eslint/lib/rules/no-regex-spaces.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-regex-spaces'>;
+}
+declare module 'eslint/lib/rules/no-restricted-globals.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-globals'>;
+}
+declare module 'eslint/lib/rules/no-restricted-imports.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-imports'>;
+}
+declare module 'eslint/lib/rules/no-restricted-modules.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-modules'>;
+}
+declare module 'eslint/lib/rules/no-restricted-syntax.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-restricted-syntax'>;
+}
+declare module 'eslint/lib/rules/no-return-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-return-assign'>;
+}
+declare module 'eslint/lib/rules/no-script-url.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-script-url'>;
+}
+declare module 'eslint/lib/rules/no-self-assign.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-self-assign'>;
+}
+declare module 'eslint/lib/rules/no-self-compare.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-self-compare'>;
+}
+declare module 'eslint/lib/rules/no-sequences.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-sequences'>;
+}
+declare module 'eslint/lib/rules/no-shadow-restricted-names.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-shadow-restricted-names'>;
+}
+declare module 'eslint/lib/rules/no-shadow.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-shadow'>;
+}
+declare module 'eslint/lib/rules/no-spaced-func.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-spaced-func'>;
+}
+declare module 'eslint/lib/rules/no-sparse-arrays.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-sparse-arrays'>;
+}
+declare module 'eslint/lib/rules/no-sync.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-sync'>;
+}
+declare module 'eslint/lib/rules/no-ternary.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-ternary'>;
+}
+declare module 'eslint/lib/rules/no-this-before-super.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-this-before-super'>;
+}
+declare module 'eslint/lib/rules/no-throw-literal.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-throw-literal'>;
+}
+declare module 'eslint/lib/rules/no-trailing-spaces.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-trailing-spaces'>;
+}
+declare module 'eslint/lib/rules/no-undef-init.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-undef-init'>;
+}
+declare module 'eslint/lib/rules/no-undef.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-undef'>;
+}
+declare module 'eslint/lib/rules/no-undefined.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-undefined'>;
+}
+declare module 'eslint/lib/rules/no-underscore-dangle.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-underscore-dangle'>;
+}
+declare module 'eslint/lib/rules/no-unexpected-multiline.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unexpected-multiline'>;
+}
+declare module 'eslint/lib/rules/no-unmodified-loop-condition.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unmodified-loop-condition'>;
+}
+declare module 'eslint/lib/rules/no-unneeded-ternary.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unneeded-ternary'>;
+}
+declare module 'eslint/lib/rules/no-unreachable.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unreachable'>;
+}
+declare module 'eslint/lib/rules/no-unsafe-finally.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unsafe-finally'>;
+}
+declare module 'eslint/lib/rules/no-unused-expressions.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unused-expressions'>;
+}
+declare module 'eslint/lib/rules/no-unused-labels.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unused-labels'>;
+}
+declare module 'eslint/lib/rules/no-unused-vars.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-unused-vars'>;
+}
+declare module 'eslint/lib/rules/no-use-before-define.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-use-before-define'>;
+}
+declare module 'eslint/lib/rules/no-useless-call.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-call'>;
+}
+declare module 'eslint/lib/rules/no-useless-computed-key.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-computed-key'>;
+}
+declare module 'eslint/lib/rules/no-useless-concat.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-concat'>;
+}
+declare module 'eslint/lib/rules/no-useless-constructor.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-constructor'>;
+}
+declare module 'eslint/lib/rules/no-useless-escape.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-escape'>;
+}
+declare module 'eslint/lib/rules/no-useless-rename.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-useless-rename'>;
+}
+declare module 'eslint/lib/rules/no-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-var'>;
+}
+declare module 'eslint/lib/rules/no-void.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-void'>;
+}
+declare module 'eslint/lib/rules/no-warning-comments.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-warning-comments'>;
+}
+declare module 'eslint/lib/rules/no-whitespace-before-property.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-whitespace-before-property'>;
+}
+declare module 'eslint/lib/rules/no-with.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/no-with'>;
+}
+declare module 'eslint/lib/rules/object-curly-newline.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/object-curly-newline'>;
+}
+declare module 'eslint/lib/rules/object-curly-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/object-curly-spacing'>;
+}
+declare module 'eslint/lib/rules/object-property-newline.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/object-property-newline'>;
+}
+declare module 'eslint/lib/rules/object-shorthand.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/object-shorthand'>;
+}
+declare module 'eslint/lib/rules/one-var-declaration-per-line.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/one-var-declaration-per-line'>;
+}
+declare module 'eslint/lib/rules/one-var.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/one-var'>;
+}
+declare module 'eslint/lib/rules/operator-assignment.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/operator-assignment'>;
+}
+declare module 'eslint/lib/rules/operator-linebreak.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/operator-linebreak'>;
+}
+declare module 'eslint/lib/rules/padded-blocks.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/padded-blocks'>;
+}
+declare module 'eslint/lib/rules/prefer-arrow-callback.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-arrow-callback'>;
+}
+declare module 'eslint/lib/rules/prefer-const.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-const'>;
+}
+declare module 'eslint/lib/rules/prefer-reflect.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-reflect'>;
+}
+declare module 'eslint/lib/rules/prefer-rest-params.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-rest-params'>;
+}
+declare module 'eslint/lib/rules/prefer-spread.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-spread'>;
+}
+declare module 'eslint/lib/rules/prefer-template.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/prefer-template'>;
+}
+declare module 'eslint/lib/rules/quote-props.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/quote-props'>;
+}
+declare module 'eslint/lib/rules/quotes.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/quotes'>;
+}
+declare module 'eslint/lib/rules/radix.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/radix'>;
+}
+declare module 'eslint/lib/rules/require-jsdoc.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/require-jsdoc'>;
+}
+declare module 'eslint/lib/rules/require-yield.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/require-yield'>;
+}
+declare module 'eslint/lib/rules/rest-spread-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/rest-spread-spacing'>;
+}
+declare module 'eslint/lib/rules/semi-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/semi-spacing'>;
+}
+declare module 'eslint/lib/rules/semi.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/semi'>;
+}
+declare module 'eslint/lib/rules/sort-imports.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/sort-imports'>;
+}
+declare module 'eslint/lib/rules/sort-vars.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/sort-vars'>;
+}
+declare module 'eslint/lib/rules/space-before-blocks.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/space-before-blocks'>;
+}
+declare module 'eslint/lib/rules/space-before-function-paren.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/space-before-function-paren'>;
+}
+declare module 'eslint/lib/rules/space-in-parens.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/space-in-parens'>;
+}
+declare module 'eslint/lib/rules/space-infix-ops.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/space-infix-ops'>;
+}
+declare module 'eslint/lib/rules/space-unary-ops.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/space-unary-ops'>;
+}
+declare module 'eslint/lib/rules/spaced-comment.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/spaced-comment'>;
+}
+declare module 'eslint/lib/rules/strict.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/strict'>;
+}
+declare module 'eslint/lib/rules/template-curly-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/template-curly-spacing'>;
+}
+declare module 'eslint/lib/rules/unicode-bom.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/unicode-bom'>;
+}
+declare module 'eslint/lib/rules/use-isnan.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/use-isnan'>;
+}
+declare module 'eslint/lib/rules/valid-jsdoc.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/valid-jsdoc'>;
+}
+declare module 'eslint/lib/rules/valid-typeof.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/valid-typeof'>;
+}
+declare module 'eslint/lib/rules/vars-on-top.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/vars-on-top'>;
+}
+declare module 'eslint/lib/rules/wrap-iife.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/wrap-iife'>;
+}
+declare module 'eslint/lib/rules/wrap-regex.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/wrap-regex'>;
+}
+declare module 'eslint/lib/rules/yield-star-spacing.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/yield-star-spacing'>;
+}
+declare module 'eslint/lib/rules/yoda.js' {
+  declare module.exports: $Exports<'eslint/lib/rules/yoda'>;
+}
+declare module 'eslint/lib/testers/event-generator-tester.js' {
+  declare module.exports: $Exports<'eslint/lib/testers/event-generator-tester'>;
+}
+declare module 'eslint/lib/testers/rule-tester.js' {
+  declare module.exports: $Exports<'eslint/lib/testers/rule-tester'>;
+}
+declare module 'eslint/lib/timing.js' {
+  declare module.exports: $Exports<'eslint/lib/timing'>;
+}
+declare module 'eslint/lib/token-store.js' {
+  declare module.exports: $Exports<'eslint/lib/token-store'>;
+}
+declare module 'eslint/lib/util/comment-event-generator.js' {
+  declare module.exports: $Exports<'eslint/lib/util/comment-event-generator'>;
+}
+declare module 'eslint/lib/util/glob-util.js' {
+  declare module.exports: $Exports<'eslint/lib/util/glob-util'>;
+}
+declare module 'eslint/lib/util/hash.js' {
+  declare module.exports: $Exports<'eslint/lib/util/hash'>;
+}
+declare module 'eslint/lib/util/keywords.js' {
+  declare module.exports: $Exports<'eslint/lib/util/keywords'>;
+}
+declare module 'eslint/lib/util/module-resolver.js' {
+  declare module.exports: $Exports<'eslint/lib/util/module-resolver'>;
+}
+declare module 'eslint/lib/util/node-event-generator.js' {
+  declare module.exports: $Exports<'eslint/lib/util/node-event-generator'>;
+}
+declare module 'eslint/lib/util/npm-util.js' {
+  declare module.exports: $Exports<'eslint/lib/util/npm-util'>;
+}
+declare module 'eslint/lib/util/path-util.js' {
+  declare module.exports: $Exports<'eslint/lib/util/path-util'>;
+}
+declare module 'eslint/lib/util/rule-fixer.js' {
+  declare module.exports: $Exports<'eslint/lib/util/rule-fixer'>;
+}
+declare module 'eslint/lib/util/source-code-fixer.js' {
+  declare module.exports: $Exports<'eslint/lib/util/source-code-fixer'>;
+}
+declare module 'eslint/lib/util/source-code-util.js' {
+  declare module.exports: $Exports<'eslint/lib/util/source-code-util'>;
+}
+declare module 'eslint/lib/util/source-code.js' {
+  declare module.exports: $Exports<'eslint/lib/util/source-code'>;
+}
+declare module 'eslint/lib/util/traverser.js' {
+  declare module.exports: $Exports<'eslint/lib/util/traverser'>;
+}
diff --git a/flow-typed/npm/flow-bin_v0.x.x.js b/flow-typed/npm/flow-bin_v0.x.x.js
new file mode 100644
index 0000000..c538e20
--- /dev/null
+++ b/flow-typed/npm/flow-bin_v0.x.x.js
@@ -0,0 +1,6 @@
+// flow-typed signature: 6a5610678d4b01e13bbfbbc62bdaf583
+// flow-typed version: 3817bc6980/flow-bin_v0.x.x/flow_>=v0.25.x
+
+declare module "flow-bin" {
+  declare module.exports: string;
+}
diff --git a/flow-typed/npm/fs-extra_vx.x.x.js b/flow-typed/npm/fs-extra_vx.x.x.js
new file mode 100644
index 0000000..58ae838
--- /dev/null
+++ b/flow-typed/npm/fs-extra_vx.x.x.js
@@ -0,0 +1,221 @@
+// flow-typed signature: c947db7334e6884638b152b5395288e4
+// flow-typed version: <<STUB>>/fs-extra_v^2.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'fs-extra'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'fs-extra' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'fs-extra/lib/copy-sync/copy-file-sync' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/copy-sync/copy-sync' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/copy-sync/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/copy/copy' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/copy/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/copy/ncp' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/empty/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/file' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/link' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/symlink-paths' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/symlink-type' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/ensure/symlink' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/json/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/json/jsonfile' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/json/output-json-sync' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/json/output-json' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/mkdirs/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/mkdirs/mkdirs-sync' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/mkdirs/mkdirs' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/mkdirs/win32' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/move/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/output/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/remove/index' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/remove/rimraf' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/util/assign' {
+  declare module.exports: any;
+}
+
+declare module 'fs-extra/lib/util/utimes' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'fs-extra/lib/copy-sync/copy-file-sync.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy-sync/copy-file-sync'>;
+}
+declare module 'fs-extra/lib/copy-sync/copy-sync.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy-sync/copy-sync'>;
+}
+declare module 'fs-extra/lib/copy-sync/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy-sync/index'>;
+}
+declare module 'fs-extra/lib/copy/copy.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy/copy'>;
+}
+declare module 'fs-extra/lib/copy/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy/index'>;
+}
+declare module 'fs-extra/lib/copy/ncp.js' {
+  declare module.exports: $Exports<'fs-extra/lib/copy/ncp'>;
+}
+declare module 'fs-extra/lib/empty/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/empty/index'>;
+}
+declare module 'fs-extra/lib/ensure/file.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/file'>;
+}
+declare module 'fs-extra/lib/ensure/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/index'>;
+}
+declare module 'fs-extra/lib/ensure/link.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/link'>;
+}
+declare module 'fs-extra/lib/ensure/symlink-paths.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/symlink-paths'>;
+}
+declare module 'fs-extra/lib/ensure/symlink-type.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/symlink-type'>;
+}
+declare module 'fs-extra/lib/ensure/symlink.js' {
+  declare module.exports: $Exports<'fs-extra/lib/ensure/symlink'>;
+}
+declare module 'fs-extra/lib/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/index'>;
+}
+declare module 'fs-extra/lib/json/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/json/index'>;
+}
+declare module 'fs-extra/lib/json/jsonfile.js' {
+  declare module.exports: $Exports<'fs-extra/lib/json/jsonfile'>;
+}
+declare module 'fs-extra/lib/json/output-json-sync.js' {
+  declare module.exports: $Exports<'fs-extra/lib/json/output-json-sync'>;
+}
+declare module 'fs-extra/lib/json/output-json.js' {
+  declare module.exports: $Exports<'fs-extra/lib/json/output-json'>;
+}
+declare module 'fs-extra/lib/mkdirs/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/mkdirs/index'>;
+}
+declare module 'fs-extra/lib/mkdirs/mkdirs-sync.js' {
+  declare module.exports: $Exports<'fs-extra/lib/mkdirs/mkdirs-sync'>;
+}
+declare module 'fs-extra/lib/mkdirs/mkdirs.js' {
+  declare module.exports: $Exports<'fs-extra/lib/mkdirs/mkdirs'>;
+}
+declare module 'fs-extra/lib/mkdirs/win32.js' {
+  declare module.exports: $Exports<'fs-extra/lib/mkdirs/win32'>;
+}
+declare module 'fs-extra/lib/move/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/move/index'>;
+}
+declare module 'fs-extra/lib/output/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/output/index'>;
+}
+declare module 'fs-extra/lib/remove/index.js' {
+  declare module.exports: $Exports<'fs-extra/lib/remove/index'>;
+}
+declare module 'fs-extra/lib/remove/rimraf.js' {
+  declare module.exports: $Exports<'fs-extra/lib/remove/rimraf'>;
+}
+declare module 'fs-extra/lib/util/assign.js' {
+  declare module.exports: $Exports<'fs-extra/lib/util/assign'>;
+}
+declare module 'fs-extra/lib/util/utimes.js' {
+  declare module.exports: $Exports<'fs-extra/lib/util/utimes'>;
+}
diff --git a/flow-typed/npm/http-server_vx.x.x.js b/flow-typed/npm/http-server_vx.x.x.js
new file mode 100644
index 0000000..ecc6cd3
--- /dev/null
+++ b/flow-typed/npm/http-server_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: e437acb5eb438e7be3fbc38b76fddd43
+// flow-typed version: <<STUB>>/http-server_v^0.9.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'http-server'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'http-server' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'http-server/lib/http-server' {
+  declare module.exports: any;
+}
+
+declare module 'http-server/test/http-server-test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'http-server/lib/http-server.js' {
+  declare module.exports: $Exports<'http-server/lib/http-server'>;
+}
+declare module 'http-server/test/http-server-test.js' {
+  declare module.exports: $Exports<'http-server/test/http-server-test'>;
+}
diff --git a/flow-typed/npm/httpurl_vx.x.x.js b/flow-typed/npm/httpurl_vx.x.x.js
new file mode 100644
index 0000000..39520aa
--- /dev/null
+++ b/flow-typed/npm/httpurl_vx.x.x.js
@@ -0,0 +1,67 @@
+// flow-typed signature: 53907eaae19285207dcb127208163f0c
+// flow-typed version: <<STUB>>/httpurl_v^0.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'httpurl'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'httpurl' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'httpurl/build/httpurl.common' {
+  declare module.exports: any;
+}
+
+declare module 'httpurl/build/httpurl.debug' {
+  declare module.exports: any;
+}
+
+declare module 'httpurl/build/httpurl' {
+  declare module.exports: any;
+}
+
+declare module 'httpurl/Gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'httpurl/src/httpurl' {
+  declare module.exports: any;
+}
+
+declare module 'httpurl/test/httpurl' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'httpurl/build/httpurl.common.js' {
+  declare module.exports: $Exports<'httpurl/build/httpurl.common'>;
+}
+declare module 'httpurl/build/httpurl.debug.js' {
+  declare module.exports: $Exports<'httpurl/build/httpurl.debug'>;
+}
+declare module 'httpurl/build/httpurl.js' {
+  declare module.exports: $Exports<'httpurl/build/httpurl'>;
+}
+declare module 'httpurl/Gruntfile.js' {
+  declare module.exports: $Exports<'httpurl/Gruntfile'>;
+}
+declare module 'httpurl/src/httpurl.js' {
+  declare module.exports: $Exports<'httpurl/src/httpurl'>;
+}
+declare module 'httpurl/test/httpurl.js' {
+  declare module.exports: $Exports<'httpurl/test/httpurl'>;
+}
diff --git a/flow-typed/npm/inline-style-prefixer_vx.x.x.js b/flow-typed/npm/inline-style-prefixer_vx.x.x.js
new file mode 100644
index 0000000..8f7457e
--- /dev/null
+++ b/flow-typed/npm/inline-style-prefixer_vx.x.x.js
@@ -0,0 +1,347 @@
+// flow-typed signature: 511ccee6eb842e1d1b61e791ff6051db
+// flow-typed version: <<STUB>>/inline-style-prefixer_v^3.0.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'inline-style-prefixer'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'inline-style-prefixer' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'inline-style-prefixer/dynamic/createPrefixer' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/dynamicData' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/index' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/calc' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/crossFade' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/cursor' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/filter' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/flex' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/flexboxIE' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/flexboxOld' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/gradient' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/imageSet' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/index' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/position' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/sizing' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/dynamic/plugins/transition' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/generateDynamicPrefixMap' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/generatePluginList' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/generateStaticPrefixMap' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/index' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/maps/pluginMap' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/generator/maps/propertyMap' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/createPrefixer' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/index' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/calc' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/crossFade' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/cursor' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/filter' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/flex' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/flexboxIE' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/flexboxOld' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/gradient' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/imageSet' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/index' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/position' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/sizing' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/plugins/transition' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/static/staticData' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/addNewValuesOnly' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/capitalizeString' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/getBrowserInformation' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/getPrefixedKeyframes' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/getPrefixedValue' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/isObject' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/prefixProperty' {
+  declare module.exports: any;
+}
+
+declare module 'inline-style-prefixer/utils/prefixValue' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'inline-style-prefixer/dynamic/createPrefixer.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/createPrefixer'>;
+}
+declare module 'inline-style-prefixer/dynamic/dynamicData.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/dynamicData'>;
+}
+declare module 'inline-style-prefixer/dynamic/index.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/index'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/calc.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/calc'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/crossFade.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/crossFade'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/cursor.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/cursor'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/filter.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/filter'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/flex.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/flex'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/flexboxIE.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/flexboxIE'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/flexboxOld.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/flexboxOld'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/gradient.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/gradient'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/imageSet.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/imageSet'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/index.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/index'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/position.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/position'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/sizing.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/sizing'>;
+}
+declare module 'inline-style-prefixer/dynamic/plugins/transition.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/dynamic/plugins/transition'>;
+}
+declare module 'inline-style-prefixer/generator/generateDynamicPrefixMap.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/generateDynamicPrefixMap'>;
+}
+declare module 'inline-style-prefixer/generator/generatePluginList.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/generatePluginList'>;
+}
+declare module 'inline-style-prefixer/generator/generateStaticPrefixMap.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/generateStaticPrefixMap'>;
+}
+declare module 'inline-style-prefixer/generator/index.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/index'>;
+}
+declare module 'inline-style-prefixer/generator/maps/pluginMap.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/maps/pluginMap'>;
+}
+declare module 'inline-style-prefixer/generator/maps/propertyMap.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/generator/maps/propertyMap'>;
+}
+declare module 'inline-style-prefixer/static/createPrefixer.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/createPrefixer'>;
+}
+declare module 'inline-style-prefixer/static/index.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/index'>;
+}
+declare module 'inline-style-prefixer/static/plugins/calc.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/calc'>;
+}
+declare module 'inline-style-prefixer/static/plugins/crossFade.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/crossFade'>;
+}
+declare module 'inline-style-prefixer/static/plugins/cursor.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/cursor'>;
+}
+declare module 'inline-style-prefixer/static/plugins/filter.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/filter'>;
+}
+declare module 'inline-style-prefixer/static/plugins/flex.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/flex'>;
+}
+declare module 'inline-style-prefixer/static/plugins/flexboxIE.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/flexboxIE'>;
+}
+declare module 'inline-style-prefixer/static/plugins/flexboxOld.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/flexboxOld'>;
+}
+declare module 'inline-style-prefixer/static/plugins/gradient.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/gradient'>;
+}
+declare module 'inline-style-prefixer/static/plugins/imageSet.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/imageSet'>;
+}
+declare module 'inline-style-prefixer/static/plugins/index.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/index'>;
+}
+declare module 'inline-style-prefixer/static/plugins/position.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/position'>;
+}
+declare module 'inline-style-prefixer/static/plugins/sizing.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/sizing'>;
+}
+declare module 'inline-style-prefixer/static/plugins/transition.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/plugins/transition'>;
+}
+declare module 'inline-style-prefixer/static/staticData.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/static/staticData'>;
+}
+declare module 'inline-style-prefixer/utils/addNewValuesOnly.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/addNewValuesOnly'>;
+}
+declare module 'inline-style-prefixer/utils/capitalizeString.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/capitalizeString'>;
+}
+declare module 'inline-style-prefixer/utils/getBrowserInformation.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/getBrowserInformation'>;
+}
+declare module 'inline-style-prefixer/utils/getPrefixedKeyframes.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/getPrefixedKeyframes'>;
+}
+declare module 'inline-style-prefixer/utils/getPrefixedValue.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/getPrefixedValue'>;
+}
+declare module 'inline-style-prefixer/utils/isObject.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/isObject'>;
+}
+declare module 'inline-style-prefixer/utils/prefixProperty.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/prefixProperty'>;
+}
+declare module 'inline-style-prefixer/utils/prefixValue.js' {
+  declare module.exports: $Exports<'inline-style-prefixer/utils/prefixValue'>;
+}
diff --git a/flow-typed/npm/json-loader_vx.x.x.js b/flow-typed/npm/json-loader_vx.x.x.js
new file mode 100644
index 0000000..9ccae9b
--- /dev/null
+++ b/flow-typed/npm/json-loader_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: 4d23bf1a2235eda868dc76304f4bfc32
+// flow-typed version: <<STUB>>/json-loader_v^0.5.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'json-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'json-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'json-loader/index' {
+  declare module.exports: $Exports<'json-loader'>;
+}
+declare module 'json-loader/index.js' {
+  declare module.exports: $Exports<'json-loader'>;
+}
diff --git a/flow-typed/npm/karma-coverage_vx.x.x.js b/flow-typed/npm/karma-coverage_vx.x.x.js
new file mode 100644
index 0000000..c042531
--- /dev/null
+++ b/flow-typed/npm/karma-coverage_vx.x.x.js
@@ -0,0 +1,81 @@
+// flow-typed signature: a3641137850fff0b7b41d98b95bfaca8
+// flow-typed version: <<STUB>>/karma-coverage_v^1.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-coverage'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-coverage' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-coverage/gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/coverage-map' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/in-memory-report' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/preprocessor' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/reporter' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/source-cache-store' {
+  declare module.exports: any;
+}
+
+declare module 'karma-coverage/lib/source-cache' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-coverage/gruntfile.js' {
+  declare module.exports: $Exports<'karma-coverage/gruntfile'>;
+}
+declare module 'karma-coverage/lib/coverage-map.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/coverage-map'>;
+}
+declare module 'karma-coverage/lib/in-memory-report.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/in-memory-report'>;
+}
+declare module 'karma-coverage/lib/index.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/index'>;
+}
+declare module 'karma-coverage/lib/preprocessor.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/preprocessor'>;
+}
+declare module 'karma-coverage/lib/reporter.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/reporter'>;
+}
+declare module 'karma-coverage/lib/source-cache-store.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/source-cache-store'>;
+}
+declare module 'karma-coverage/lib/source-cache.js' {
+  declare module.exports: $Exports<'karma-coverage/lib/source-cache'>;
+}
diff --git a/flow-typed/npm/karma-mocha-reporter_vx.x.x.js b/flow-typed/npm/karma-mocha-reporter_vx.x.x.js
new file mode 100644
index 0000000..4838e3d
--- /dev/null
+++ b/flow-typed/npm/karma-mocha-reporter_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 3994e81f768a28c55ca2d39910be5c67
+// flow-typed version: <<STUB>>/karma-mocha-reporter_v^2.2.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-mocha-reporter'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-mocha-reporter' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-mocha-reporter/symbols' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-mocha-reporter/index' {
+  declare module.exports: $Exports<'karma-mocha-reporter'>;
+}
+declare module 'karma-mocha-reporter/index.js' {
+  declare module.exports: $Exports<'karma-mocha-reporter'>;
+}
+declare module 'karma-mocha-reporter/symbols.js' {
+  declare module.exports: $Exports<'karma-mocha-reporter/symbols'>;
+}
diff --git a/flow-typed/npm/karma-mocha_vx.x.x.js b/flow-typed/npm/karma-mocha_vx.x.x.js
new file mode 100644
index 0000000..b6b6d18
--- /dev/null
+++ b/flow-typed/npm/karma-mocha_vx.x.x.js
@@ -0,0 +1,53 @@
+// flow-typed signature: d3244e361f648af2e67f7835973cd3bb
+// flow-typed version: <<STUB>>/karma-mocha_v^1.3.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-mocha'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-mocha' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-mocha/gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'karma-mocha/lib/adapter' {
+  declare module.exports: any;
+}
+
+declare module 'karma-mocha/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'karma-mocha/wallaby' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-mocha/gruntfile.js' {
+  declare module.exports: $Exports<'karma-mocha/gruntfile'>;
+}
+declare module 'karma-mocha/lib/adapter.js' {
+  declare module.exports: $Exports<'karma-mocha/lib/adapter'>;
+}
+declare module 'karma-mocha/lib/index.js' {
+  declare module.exports: $Exports<'karma-mocha/lib/index'>;
+}
+declare module 'karma-mocha/wallaby.js' {
+  declare module.exports: $Exports<'karma-mocha/wallaby'>;
+}
diff --git a/flow-typed/npm/karma-phantomjs-launcher_vx.x.x.js b/flow-typed/npm/karma-phantomjs-launcher_vx.x.x.js
new file mode 100644
index 0000000..f897efb
--- /dev/null
+++ b/flow-typed/npm/karma-phantomjs-launcher_vx.x.x.js
@@ -0,0 +1,59 @@
+// flow-typed signature: 370b8388d42a489c09fca7cc6a6c1dc0
+// flow-typed version: <<STUB>>/karma-phantomjs-launcher_v^1.0.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-phantomjs-launcher'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-phantomjs-launcher' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-phantomjs-launcher/capture.template' {
+  declare module.exports: any;
+}
+
+declare module 'karma-phantomjs-launcher/gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'karma-phantomjs-launcher/karma.conf' {
+  declare module.exports: any;
+}
+
+declare module 'karma-phantomjs-launcher/test/add.spec' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-phantomjs-launcher/capture.template.js' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher/capture.template'>;
+}
+declare module 'karma-phantomjs-launcher/gruntfile.js' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher/gruntfile'>;
+}
+declare module 'karma-phantomjs-launcher/index' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher'>;
+}
+declare module 'karma-phantomjs-launcher/index.js' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher'>;
+}
+declare module 'karma-phantomjs-launcher/karma.conf.js' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher/karma.conf'>;
+}
+declare module 'karma-phantomjs-launcher/test/add.spec.js' {
+  declare module.exports: $Exports<'karma-phantomjs-launcher/test/add.spec'>;
+}
diff --git a/flow-typed/npm/karma-rollup-preprocessor_vx.x.x.js b/flow-typed/npm/karma-rollup-preprocessor_vx.x.x.js
new file mode 100644
index 0000000..3dc7ce2
--- /dev/null
+++ b/flow-typed/npm/karma-rollup-preprocessor_vx.x.x.js
@@ -0,0 +1,53 @@
+// flow-typed signature: 9b5b1885bf45d4adf8ce0d3ca9ab51b1
+// flow-typed version: <<STUB>>/karma-rollup-preprocessor_v^3.0.3/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-rollup-preprocessor'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-rollup-preprocessor' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-rollup-preprocessor/karma.conf' {
+  declare module.exports: any;
+}
+
+declare module 'karma-rollup-preprocessor/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'karma-rollup-preprocessor/test/helper' {
+  declare module.exports: any;
+}
+
+declare module 'karma-rollup-preprocessor/test/main' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-rollup-preprocessor/karma.conf.js' {
+  declare module.exports: $Exports<'karma-rollup-preprocessor/karma.conf'>;
+}
+declare module 'karma-rollup-preprocessor/lib/index.js' {
+  declare module.exports: $Exports<'karma-rollup-preprocessor/lib/index'>;
+}
+declare module 'karma-rollup-preprocessor/test/helper.js' {
+  declare module.exports: $Exports<'karma-rollup-preprocessor/test/helper'>;
+}
+declare module 'karma-rollup-preprocessor/test/main.js' {
+  declare module.exports: $Exports<'karma-rollup-preprocessor/test/main'>;
+}
diff --git a/flow-typed/npm/karma-sinon-chai_vx.x.x.js b/flow-typed/npm/karma-sinon-chai_vx.x.x.js
new file mode 100644
index 0000000..9c0219e
--- /dev/null
+++ b/flow-typed/npm/karma-sinon-chai_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 0953d9baac8251cc38f40d1011955980
+// flow-typed version: <<STUB>>/karma-sinon-chai_v^1.2.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-sinon-chai'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-sinon-chai' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-sinon-chai/chai-adapter' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-sinon-chai/chai-adapter.js' {
+  declare module.exports: $Exports<'karma-sinon-chai/chai-adapter'>;
+}
+declare module 'karma-sinon-chai/index' {
+  declare module.exports: $Exports<'karma-sinon-chai'>;
+}
+declare module 'karma-sinon-chai/index.js' {
+  declare module.exports: $Exports<'karma-sinon-chai'>;
+}
diff --git a/flow-typed/npm/karma-sourcemap-loader_vx.x.x.js b/flow-typed/npm/karma-sourcemap-loader_vx.x.x.js
new file mode 100644
index 0000000..be33689
--- /dev/null
+++ b/flow-typed/npm/karma-sourcemap-loader_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: a5c8dc54e881e4ed564a1f5ae3a4d0f1
+// flow-typed version: <<STUB>>/karma-sourcemap-loader_v^0.3.7/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-sourcemap-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-sourcemap-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'karma-sourcemap-loader/index' {
+  declare module.exports: $Exports<'karma-sourcemap-loader'>;
+}
+declare module 'karma-sourcemap-loader/index.js' {
+  declare module.exports: $Exports<'karma-sourcemap-loader'>;
+}
diff --git a/flow-typed/npm/karma-webpack_vx.x.x.js b/flow-typed/npm/karma-webpack_vx.x.x.js
new file mode 100644
index 0000000..3baf5a4
--- /dev/null
+++ b/flow-typed/npm/karma-webpack_vx.x.x.js
@@ -0,0 +1,45 @@
+// flow-typed signature: d27960d9578f6d20018e9ab285c690c3
+// flow-typed version: <<STUB>>/karma-webpack_v^1.8.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma-webpack'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma-webpack' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma-webpack/lib/karma-webpack' {
+  declare module.exports: any;
+}
+
+declare module 'karma-webpack/lib/mocha-env-loader' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma-webpack/index' {
+  declare module.exports: $Exports<'karma-webpack'>;
+}
+declare module 'karma-webpack/index.js' {
+  declare module.exports: $Exports<'karma-webpack'>;
+}
+declare module 'karma-webpack/lib/karma-webpack.js' {
+  declare module.exports: $Exports<'karma-webpack/lib/karma-webpack'>;
+}
+declare module 'karma-webpack/lib/mocha-env-loader.js' {
+  declare module.exports: $Exports<'karma-webpack/lib/mocha-env-loader'>;
+}
diff --git a/flow-typed/npm/karma_vx.x.x.js b/flow-typed/npm/karma_vx.x.x.js
new file mode 100644
index 0000000..db25c76
--- /dev/null
+++ b/flow-typed/npm/karma_vx.x.x.js
@@ -0,0 +1,445 @@
+// flow-typed signature: 23f99b46e80313193d75c5745e615546
+// flow-typed version: <<STUB>>/karma_v^1.3.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'karma'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'karma' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'karma/common/stringify' {
+  declare module.exports: any;
+}
+
+declare module 'karma/common/util' {
+  declare module.exports: any;
+}
+
+declare module 'karma/config.tpl' {
+  declare module.exports: any;
+}
+
+declare module 'karma/context/karma' {
+  declare module.exports: any;
+}
+
+declare module 'karma/context/main' {
+  declare module.exports: any;
+}
+
+declare module 'karma/gruntfile' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/browser_collection' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/browser_result' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/browser' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/cli' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/completion' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/config' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/constants' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/detached' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/emitter_wrapper' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/events' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/executor' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/file-list' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/file' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/helper' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/init' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/init/color_schemes' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/init/formatters' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/init/state_machine' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/launcher' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/launchers/base' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/launchers/capture_timeout' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/launchers/process' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/launchers/retry' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/logger' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/common' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/karma' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/proxy' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/runner' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/source_files' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/stopper' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/middleware/strip_host' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/plugin' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/preprocessor' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporter' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/base_color' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/base' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/dots_color' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/dots' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/multi' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/progress_color' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/reporters/progress' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/runner' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/server' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/stopper' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/temp_dir' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/url' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/watcher' {
+  declare module.exports: any;
+}
+
+declare module 'karma/lib/web-server' {
+  declare module.exports: any;
+}
+
+declare module 'karma/requirejs.config.tpl' {
+  declare module.exports: any;
+}
+
+declare module 'karma/static/context' {
+  declare module.exports: any;
+}
+
+declare module 'karma/static/debug' {
+  declare module.exports: any;
+}
+
+declare module 'karma/static/karma' {
+  declare module.exports: any;
+}
+
+declare module 'karma/wallaby' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'karma/common/stringify.js' {
+  declare module.exports: $Exports<'karma/common/stringify'>;
+}
+declare module 'karma/common/util.js' {
+  declare module.exports: $Exports<'karma/common/util'>;
+}
+declare module 'karma/config.tpl.js' {
+  declare module.exports: $Exports<'karma/config.tpl'>;
+}
+declare module 'karma/context/karma.js' {
+  declare module.exports: $Exports<'karma/context/karma'>;
+}
+declare module 'karma/context/main.js' {
+  declare module.exports: $Exports<'karma/context/main'>;
+}
+declare module 'karma/gruntfile.js' {
+  declare module.exports: $Exports<'karma/gruntfile'>;
+}
+declare module 'karma/lib/browser_collection.js' {
+  declare module.exports: $Exports<'karma/lib/browser_collection'>;
+}
+declare module 'karma/lib/browser_result.js' {
+  declare module.exports: $Exports<'karma/lib/browser_result'>;
+}
+declare module 'karma/lib/browser.js' {
+  declare module.exports: $Exports<'karma/lib/browser'>;
+}
+declare module 'karma/lib/cli.js' {
+  declare module.exports: $Exports<'karma/lib/cli'>;
+}
+declare module 'karma/lib/completion.js' {
+  declare module.exports: $Exports<'karma/lib/completion'>;
+}
+declare module 'karma/lib/config.js' {
+  declare module.exports: $Exports<'karma/lib/config'>;
+}
+declare module 'karma/lib/constants.js' {
+  declare module.exports: $Exports<'karma/lib/constants'>;
+}
+declare module 'karma/lib/detached.js' {
+  declare module.exports: $Exports<'karma/lib/detached'>;
+}
+declare module 'karma/lib/emitter_wrapper.js' {
+  declare module.exports: $Exports<'karma/lib/emitter_wrapper'>;
+}
+declare module 'karma/lib/events.js' {
+  declare module.exports: $Exports<'karma/lib/events'>;
+}
+declare module 'karma/lib/executor.js' {
+  declare module.exports: $Exports<'karma/lib/executor'>;
+}
+declare module 'karma/lib/file-list.js' {
+  declare module.exports: $Exports<'karma/lib/file-list'>;
+}
+declare module 'karma/lib/file.js' {
+  declare module.exports: $Exports<'karma/lib/file'>;
+}
+declare module 'karma/lib/helper.js' {
+  declare module.exports: $Exports<'karma/lib/helper'>;
+}
+declare module 'karma/lib/index.js' {
+  declare module.exports: $Exports<'karma/lib/index'>;
+}
+declare module 'karma/lib/init.js' {
+  declare module.exports: $Exports<'karma/lib/init'>;
+}
+declare module 'karma/lib/init/color_schemes.js' {
+  declare module.exports: $Exports<'karma/lib/init/color_schemes'>;
+}
+declare module 'karma/lib/init/formatters.js' {
+  declare module.exports: $Exports<'karma/lib/init/formatters'>;
+}
+declare module 'karma/lib/init/state_machine.js' {
+  declare module.exports: $Exports<'karma/lib/init/state_machine'>;
+}
+declare module 'karma/lib/launcher.js' {
+  declare module.exports: $Exports<'karma/lib/launcher'>;
+}
+declare module 'karma/lib/launchers/base.js' {
+  declare module.exports: $Exports<'karma/lib/launchers/base'>;
+}
+declare module 'karma/lib/launchers/capture_timeout.js' {
+  declare module.exports: $Exports<'karma/lib/launchers/capture_timeout'>;
+}
+declare module 'karma/lib/launchers/process.js' {
+  declare module.exports: $Exports<'karma/lib/launchers/process'>;
+}
+declare module 'karma/lib/launchers/retry.js' {
+  declare module.exports: $Exports<'karma/lib/launchers/retry'>;
+}
+declare module 'karma/lib/logger.js' {
+  declare module.exports: $Exports<'karma/lib/logger'>;
+}
+declare module 'karma/lib/middleware/common.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/common'>;
+}
+declare module 'karma/lib/middleware/karma.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/karma'>;
+}
+declare module 'karma/lib/middleware/proxy.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/proxy'>;
+}
+declare module 'karma/lib/middleware/runner.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/runner'>;
+}
+declare module 'karma/lib/middleware/source_files.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/source_files'>;
+}
+declare module 'karma/lib/middleware/stopper.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/stopper'>;
+}
+declare module 'karma/lib/middleware/strip_host.js' {
+  declare module.exports: $Exports<'karma/lib/middleware/strip_host'>;
+}
+declare module 'karma/lib/plugin.js' {
+  declare module.exports: $Exports<'karma/lib/plugin'>;
+}
+declare module 'karma/lib/preprocessor.js' {
+  declare module.exports: $Exports<'karma/lib/preprocessor'>;
+}
+declare module 'karma/lib/reporter.js' {
+  declare module.exports: $Exports<'karma/lib/reporter'>;
+}
+declare module 'karma/lib/reporters/base_color.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/base_color'>;
+}
+declare module 'karma/lib/reporters/base.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/base'>;
+}
+declare module 'karma/lib/reporters/dots_color.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/dots_color'>;
+}
+declare module 'karma/lib/reporters/dots.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/dots'>;
+}
+declare module 'karma/lib/reporters/multi.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/multi'>;
+}
+declare module 'karma/lib/reporters/progress_color.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/progress_color'>;
+}
+declare module 'karma/lib/reporters/progress.js' {
+  declare module.exports: $Exports<'karma/lib/reporters/progress'>;
+}
+declare module 'karma/lib/runner.js' {
+  declare module.exports: $Exports<'karma/lib/runner'>;
+}
+declare module 'karma/lib/server.js' {
+  declare module.exports: $Exports<'karma/lib/server'>;
+}
+declare module 'karma/lib/stopper.js' {
+  declare module.exports: $Exports<'karma/lib/stopper'>;
+}
+declare module 'karma/lib/temp_dir.js' {
+  declare module.exports: $Exports<'karma/lib/temp_dir'>;
+}
+declare module 'karma/lib/url.js' {
+  declare module.exports: $Exports<'karma/lib/url'>;
+}
+declare module 'karma/lib/watcher.js' {
+  declare module.exports: $Exports<'karma/lib/watcher'>;
+}
+declare module 'karma/lib/web-server.js' {
+  declare module.exports: $Exports<'karma/lib/web-server'>;
+}
+declare module 'karma/requirejs.config.tpl.js' {
+  declare module.exports: $Exports<'karma/requirejs.config.tpl'>;
+}
+declare module 'karma/static/context.js' {
+  declare module.exports: $Exports<'karma/static/context'>;
+}
+declare module 'karma/static/debug.js' {
+  declare module.exports: $Exports<'karma/static/debug'>;
+}
+declare module 'karma/static/karma.js' {
+  declare module.exports: $Exports<'karma/static/karma'>;
+}
+declare module 'karma/wallaby.js' {
+  declare module.exports: $Exports<'karma/wallaby'>;
+}
diff --git a/flow-typed/npm/lazyimg_vx.x.x.js b/flow-typed/npm/lazyimg_vx.x.x.js
new file mode 100644
index 0000000..c65a3ce
--- /dev/null
+++ b/flow-typed/npm/lazyimg_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 2d99e7d6377a0ac83377b9ad4ef0d586
+// flow-typed version: <<STUB>>/lazyimg_v^0.1.5/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'lazyimg'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'lazyimg' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'lazyimg/src/adapter' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'lazyimg/src/adapter.js' {
+  declare module.exports: $Exports<'lazyimg/src/adapter'>;
+}
diff --git a/flow-typed/npm/macaca-cli_vx.x.x.js b/flow-typed/npm/macaca-cli_vx.x.x.js
new file mode 100644
index 0000000..5552813
--- /dev/null
+++ b/flow-typed/npm/macaca-cli_vx.x.x.js
@@ -0,0 +1,123 @@
+// flow-typed signature: 38d6c245fb4a7aae6f6a56abbb4f091a
+// flow-typed version: <<STUB>>/macaca-cli_v^1.1.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'macaca-cli'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'macaca-cli' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'macaca-cli/lib/common/config' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/common/helper' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/common/logFormatter/index' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/common/logFormatter/performance' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/common/logFormatter/screenshot' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/common/logger' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/run/index' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/server/index' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/server/server' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/lib/server/signal' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/scripts/print' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/test_ava/ava.test' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-cli/test_jasmine/jasmine.test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'macaca-cli/lib/common/config.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/config'>;
+}
+declare module 'macaca-cli/lib/common/helper.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/helper'>;
+}
+declare module 'macaca-cli/lib/common/logFormatter/index.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/logFormatter/index'>;
+}
+declare module 'macaca-cli/lib/common/logFormatter/performance.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/logFormatter/performance'>;
+}
+declare module 'macaca-cli/lib/common/logFormatter/screenshot.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/logFormatter/screenshot'>;
+}
+declare module 'macaca-cli/lib/common/logger.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/common/logger'>;
+}
+declare module 'macaca-cli/lib/index.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/index'>;
+}
+declare module 'macaca-cli/lib/run/index.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/run/index'>;
+}
+declare module 'macaca-cli/lib/server/index.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/server/index'>;
+}
+declare module 'macaca-cli/lib/server/server.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/server/server'>;
+}
+declare module 'macaca-cli/lib/server/signal.js' {
+  declare module.exports: $Exports<'macaca-cli/lib/server/signal'>;
+}
+declare module 'macaca-cli/scripts/print.js' {
+  declare module.exports: $Exports<'macaca-cli/scripts/print'>;
+}
+declare module 'macaca-cli/test_ava/ava.test.js' {
+  declare module.exports: $Exports<'macaca-cli/test_ava/ava.test'>;
+}
+declare module 'macaca-cli/test_jasmine/jasmine.test.js' {
+  declare module.exports: $Exports<'macaca-cli/test_jasmine/jasmine.test'>;
+}
diff --git a/flow-typed/npm/macaca-utils_vx.x.x.js b/flow-typed/npm/macaca-utils_vx.x.x.js
new file mode 100644
index 0000000..6da7fa4
--- /dev/null
+++ b/flow-typed/npm/macaca-utils_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: 815591caa2e3b3cf9763db5e80d01c1c
+// flow-typed version: <<STUB>>/macaca-utils_v^0.1.9/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'macaca-utils'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'macaca-utils' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'macaca-utils/lib/macaca-utils' {
+  declare module.exports: any;
+}
+
+declare module 'macaca-utils/test/macaca-utils.test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'macaca-utils/lib/macaca-utils.js' {
+  declare module.exports: $Exports<'macaca-utils/lib/macaca-utils'>;
+}
+declare module 'macaca-utils/test/macaca-utils.test.js' {
+  declare module.exports: $Exports<'macaca-utils/test/macaca-utils.test'>;
+}
diff --git a/flow-typed/npm/mocha_v2.4.x.js b/flow-typed/npm/mocha_v2.4.x.js
new file mode 100644
index 0000000..fce7805
--- /dev/null
+++ b/flow-typed/npm/mocha_v2.4.x.js
@@ -0,0 +1,25 @@
+// flow-typed signature: 908ce59549760ff976de1c8777869375
+// flow-typed version: 94e9f7e0a4/mocha_v2.4.x/flow_>=v0.22.x
+
+type TestFunction = ((done: () => void) => void | Promise<mixed>);
+
+declare var describe : {
+    (name:string, spec:() => void): void;
+    only(description:string, spec:() => void): void;
+    skip(description:string, spec:() => void): void;
+    timeout(ms:number): void;
+};
+
+declare var context : typeof describe;
+
+declare var it : {
+    (name:string, spec?:TestFunction): void;
+    only(description:string, spec:TestFunction): void;
+    skip(description:string, spec:TestFunction): void;
+    timeout(ms:number): void;
+};
+
+declare function before(method : TestFunction):void;
+declare function beforeEach(method : TestFunction):void;
+declare function after(method : TestFunction):void;
+declare function afterEach(method : TestFunction):void;
diff --git a/flow-typed/npm/modals_vx.x.x.js b/flow-typed/npm/modals_vx.x.x.js
new file mode 100644
index 0000000..aaef78f
--- /dev/null
+++ b/flow-typed/npm/modals_vx.x.x.js
@@ -0,0 +1,81 @@
+// flow-typed signature: ce0c870eb1fe7d632753dedcd93d9cb7
+// flow-typed version: <<STUB>>/modals_v^0.1.6/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'modals'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'modals' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'modals/build/modal' {
+  declare module.exports: any;
+}
+
+declare module 'modals/gulpfile' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/alert' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/confirm' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/index' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/modal' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/prompt' {
+  declare module.exports: any;
+}
+
+declare module 'modals/src/toast' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'modals/build/modal.js' {
+  declare module.exports: $Exports<'modals/build/modal'>;
+}
+declare module 'modals/gulpfile.js' {
+  declare module.exports: $Exports<'modals/gulpfile'>;
+}
+declare module 'modals/src/alert.js' {
+  declare module.exports: $Exports<'modals/src/alert'>;
+}
+declare module 'modals/src/confirm.js' {
+  declare module.exports: $Exports<'modals/src/confirm'>;
+}
+declare module 'modals/src/index.js' {
+  declare module.exports: $Exports<'modals/src/index'>;
+}
+declare module 'modals/src/modal.js' {
+  declare module.exports: $Exports<'modals/src/modal'>;
+}
+declare module 'modals/src/prompt.js' {
+  declare module.exports: $Exports<'modals/src/prompt'>;
+}
+declare module 'modals/src/toast.js' {
+  declare module.exports: $Exports<'modals/src/toast'>;
+}
diff --git a/flow-typed/npm/nightwatch_vx.x.x.js b/flow-typed/npm/nightwatch_vx.x.x.js
new file mode 100644
index 0000000..68dc4fb
--- /dev/null
+++ b/flow-typed/npm/nightwatch_vx.x.x.js
@@ -0,0 +1,633 @@
+// flow-typed signature: 2c10ff52ce02274157dba92fd2a8a434
+// flow-typed version: <<STUB>>/nightwatch_v^0.9.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'nightwatch'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'nightwatch' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'nightwatch/bin/runner' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/custom-commands/hasOnBeforeUnload' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/globalsModule' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/mocha/github' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/mocha/googleDemoTest' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/pages/home' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/pages/searchResults' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/digg' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/github/github' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/google' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/google/googleDemoTest' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/googlePageObject' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/nightwatch' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/tests/onbeforeunload' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/unittests/demoTestAsync' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/unittests/testUtils' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/examples/unittests/testUtilsWithChai' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/attributeContains' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/attributeEquals' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/containsText' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/cssClassNotPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/cssClassPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/cssProperty' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/elementNotPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/elementPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/hidden' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/title' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/urlContains' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/urlEquals' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/value' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/valueContains' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/assertions/visible' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/_locateStrategy' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/end' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/pause' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/perform' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/useCss' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/useRecursion' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/client-commands/useXpath' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/_elementByRecursion' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/_elementsByRecursion' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/_waitForElement' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/waitForElementNotPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/waitForElementNotVisible' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/waitForElementPresent' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/element-commands/waitForElementVisible' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/_baseAssertion' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/attribute' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/css' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/enabled' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/present' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/selected' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/text' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/type' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/value' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/expect/visible' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/api/protocol' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/core/api' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/core/assertion' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/core/queue' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/http/request' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/page-object/command-wrapper' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/page-object/element' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/page-object/page-utils' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/page-object/page' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/page-object/section' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/cli/child-process' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/cli/cli' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/cli/clirunner' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/cli/errorhandler' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/clientmanager' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/filematcher' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/module' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/reporter' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/reporters/junit' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/run' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/selenium' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/testcase' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/testsuite' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/runner/walk' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/util/logger' {
+  declare module.exports: any;
+}
+
+declare module 'nightwatch/lib/util/utils' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'nightwatch/bin/runner.js' {
+  declare module.exports: $Exports<'nightwatch/bin/runner'>;
+}
+declare module 'nightwatch/examples/custom-commands/hasOnBeforeUnload.js' {
+  declare module.exports: $Exports<'nightwatch/examples/custom-commands/hasOnBeforeUnload'>;
+}
+declare module 'nightwatch/examples/globalsModule.js' {
+  declare module.exports: $Exports<'nightwatch/examples/globalsModule'>;
+}
+declare module 'nightwatch/examples/mocha/github.js' {
+  declare module.exports: $Exports<'nightwatch/examples/mocha/github'>;
+}
+declare module 'nightwatch/examples/mocha/googleDemoTest.js' {
+  declare module.exports: $Exports<'nightwatch/examples/mocha/googleDemoTest'>;
+}
+declare module 'nightwatch/examples/pages/home.js' {
+  declare module.exports: $Exports<'nightwatch/examples/pages/home'>;
+}
+declare module 'nightwatch/examples/pages/searchResults.js' {
+  declare module.exports: $Exports<'nightwatch/examples/pages/searchResults'>;
+}
+declare module 'nightwatch/examples/tests/digg.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/digg'>;
+}
+declare module 'nightwatch/examples/tests/github/github.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/github/github'>;
+}
+declare module 'nightwatch/examples/tests/google.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/google'>;
+}
+declare module 'nightwatch/examples/tests/google/googleDemoTest.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/google/googleDemoTest'>;
+}
+declare module 'nightwatch/examples/tests/googlePageObject.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/googlePageObject'>;
+}
+declare module 'nightwatch/examples/tests/nightwatch.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/nightwatch'>;
+}
+declare module 'nightwatch/examples/tests/onbeforeunload.js' {
+  declare module.exports: $Exports<'nightwatch/examples/tests/onbeforeunload'>;
+}
+declare module 'nightwatch/examples/unittests/demoTestAsync.js' {
+  declare module.exports: $Exports<'nightwatch/examples/unittests/demoTestAsync'>;
+}
+declare module 'nightwatch/examples/unittests/testUtils.js' {
+  declare module.exports: $Exports<'nightwatch/examples/unittests/testUtils'>;
+}
+declare module 'nightwatch/examples/unittests/testUtilsWithChai.js' {
+  declare module.exports: $Exports<'nightwatch/examples/unittests/testUtilsWithChai'>;
+}
+declare module 'nightwatch/index' {
+  declare module.exports: $Exports<'nightwatch'>;
+}
+declare module 'nightwatch/index.js' {
+  declare module.exports: $Exports<'nightwatch'>;
+}
+declare module 'nightwatch/lib/api/assertions/attributeContains.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/attributeContains'>;
+}
+declare module 'nightwatch/lib/api/assertions/attributeEquals.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/attributeEquals'>;
+}
+declare module 'nightwatch/lib/api/assertions/containsText.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/containsText'>;
+}
+declare module 'nightwatch/lib/api/assertions/cssClassNotPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/cssClassNotPresent'>;
+}
+declare module 'nightwatch/lib/api/assertions/cssClassPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/cssClassPresent'>;
+}
+declare module 'nightwatch/lib/api/assertions/cssProperty.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/cssProperty'>;
+}
+declare module 'nightwatch/lib/api/assertions/elementNotPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/elementNotPresent'>;
+}
+declare module 'nightwatch/lib/api/assertions/elementPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/elementPresent'>;
+}
+declare module 'nightwatch/lib/api/assertions/hidden.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/hidden'>;
+}
+declare module 'nightwatch/lib/api/assertions/title.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/title'>;
+}
+declare module 'nightwatch/lib/api/assertions/urlContains.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/urlContains'>;
+}
+declare module 'nightwatch/lib/api/assertions/urlEquals.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/urlEquals'>;
+}
+declare module 'nightwatch/lib/api/assertions/value.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/value'>;
+}
+declare module 'nightwatch/lib/api/assertions/valueContains.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/valueContains'>;
+}
+declare module 'nightwatch/lib/api/assertions/visible.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/assertions/visible'>;
+}
+declare module 'nightwatch/lib/api/client-commands.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands'>;
+}
+declare module 'nightwatch/lib/api/client-commands/_locateStrategy.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/_locateStrategy'>;
+}
+declare module 'nightwatch/lib/api/client-commands/end.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/end'>;
+}
+declare module 'nightwatch/lib/api/client-commands/pause.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/pause'>;
+}
+declare module 'nightwatch/lib/api/client-commands/perform.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/perform'>;
+}
+declare module 'nightwatch/lib/api/client-commands/useCss.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/useCss'>;
+}
+declare module 'nightwatch/lib/api/client-commands/useRecursion.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/useRecursion'>;
+}
+declare module 'nightwatch/lib/api/client-commands/useXpath.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/client-commands/useXpath'>;
+}
+declare module 'nightwatch/lib/api/element-commands.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands'>;
+}
+declare module 'nightwatch/lib/api/element-commands/_elementByRecursion.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/_elementByRecursion'>;
+}
+declare module 'nightwatch/lib/api/element-commands/_elementsByRecursion.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/_elementsByRecursion'>;
+}
+declare module 'nightwatch/lib/api/element-commands/_waitForElement.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/_waitForElement'>;
+}
+declare module 'nightwatch/lib/api/element-commands/waitForElementNotPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/waitForElementNotPresent'>;
+}
+declare module 'nightwatch/lib/api/element-commands/waitForElementNotVisible.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/waitForElementNotVisible'>;
+}
+declare module 'nightwatch/lib/api/element-commands/waitForElementPresent.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/waitForElementPresent'>;
+}
+declare module 'nightwatch/lib/api/element-commands/waitForElementVisible.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/element-commands/waitForElementVisible'>;
+}
+declare module 'nightwatch/lib/api/expect.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect'>;
+}
+declare module 'nightwatch/lib/api/expect/_baseAssertion.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/_baseAssertion'>;
+}
+declare module 'nightwatch/lib/api/expect/attribute.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/attribute'>;
+}
+declare module 'nightwatch/lib/api/expect/css.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/css'>;
+}
+declare module 'nightwatch/lib/api/expect/enabled.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/enabled'>;
+}
+declare module 'nightwatch/lib/api/expect/present.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/present'>;
+}
+declare module 'nightwatch/lib/api/expect/selected.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/selected'>;
+}
+declare module 'nightwatch/lib/api/expect/text.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/text'>;
+}
+declare module 'nightwatch/lib/api/expect/type.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/type'>;
+}
+declare module 'nightwatch/lib/api/expect/value.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/value'>;
+}
+declare module 'nightwatch/lib/api/expect/visible.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/expect/visible'>;
+}
+declare module 'nightwatch/lib/api/protocol.js' {
+  declare module.exports: $Exports<'nightwatch/lib/api/protocol'>;
+}
+declare module 'nightwatch/lib/core/api.js' {
+  declare module.exports: $Exports<'nightwatch/lib/core/api'>;
+}
+declare module 'nightwatch/lib/core/assertion.js' {
+  declare module.exports: $Exports<'nightwatch/lib/core/assertion'>;
+}
+declare module 'nightwatch/lib/core/queue.js' {
+  declare module.exports: $Exports<'nightwatch/lib/core/queue'>;
+}
+declare module 'nightwatch/lib/http/request.js' {
+  declare module.exports: $Exports<'nightwatch/lib/http/request'>;
+}
+declare module 'nightwatch/lib/index.js' {
+  declare module.exports: $Exports<'nightwatch/lib/index'>;
+}
+declare module 'nightwatch/lib/page-object/command-wrapper.js' {
+  declare module.exports: $Exports<'nightwatch/lib/page-object/command-wrapper'>;
+}
+declare module 'nightwatch/lib/page-object/element.js' {
+  declare module.exports: $Exports<'nightwatch/lib/page-object/element'>;
+}
+declare module 'nightwatch/lib/page-object/page-utils.js' {
+  declare module.exports: $Exports<'nightwatch/lib/page-object/page-utils'>;
+}
+declare module 'nightwatch/lib/page-object/page.js' {
+  declare module.exports: $Exports<'nightwatch/lib/page-object/page'>;
+}
+declare module 'nightwatch/lib/page-object/section.js' {
+  declare module.exports: $Exports<'nightwatch/lib/page-object/section'>;
+}
+declare module 'nightwatch/lib/runner/cli/child-process.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/cli/child-process'>;
+}
+declare module 'nightwatch/lib/runner/cli/cli.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/cli/cli'>;
+}
+declare module 'nightwatch/lib/runner/cli/clirunner.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/cli/clirunner'>;
+}
+declare module 'nightwatch/lib/runner/cli/errorhandler.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/cli/errorhandler'>;
+}
+declare module 'nightwatch/lib/runner/clientmanager.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/clientmanager'>;
+}
+declare module 'nightwatch/lib/runner/filematcher.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/filematcher'>;
+}
+declare module 'nightwatch/lib/runner/module.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/module'>;
+}
+declare module 'nightwatch/lib/runner/reporter.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/reporter'>;
+}
+declare module 'nightwatch/lib/runner/reporters/junit.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/reporters/junit'>;
+}
+declare module 'nightwatch/lib/runner/run.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/run'>;
+}
+declare module 'nightwatch/lib/runner/selenium.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/selenium'>;
+}
+declare module 'nightwatch/lib/runner/testcase.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/testcase'>;
+}
+declare module 'nightwatch/lib/runner/testsuite.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/testsuite'>;
+}
+declare module 'nightwatch/lib/runner/walk.js' {
+  declare module.exports: $Exports<'nightwatch/lib/runner/walk'>;
+}
+declare module 'nightwatch/lib/util/logger.js' {
+  declare module.exports: $Exports<'nightwatch/lib/util/logger'>;
+}
+declare module 'nightwatch/lib/util/utils.js' {
+  declare module.exports: $Exports<'nightwatch/lib/util/utils'>;
+}
diff --git a/flow-typed/npm/phantomjs-prebuilt_vx.x.x.js b/flow-typed/npm/phantomjs-prebuilt_vx.x.x.js
new file mode 100644
index 0000000..40b8641
--- /dev/null
+++ b/flow-typed/npm/phantomjs-prebuilt_vx.x.x.js
@@ -0,0 +1,389 @@
+// flow-typed signature: 814522ded8f7a40566037440611f8d3b
+// flow-typed version: <<STUB>>/phantomjs-prebuilt_v^2.1.7/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'phantomjs-prebuilt'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'phantomjs-prebuilt' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'phantomjs-prebuilt/install' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/location' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/arguments' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/child_process-examples' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/colorwheel' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/countdown' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/detectsniff' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/echoToFile' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/features' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/fibo' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/hello' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/injectme' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/loadspeed' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/loadurlwithoutcss' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/modernizr' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/module' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/netlog' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/netsniff' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/openurlwithproxy' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/outputEncoding' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/page_events' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/pagecallback' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/phantomwebintro' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/post' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/postjson' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/postserver' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printenv' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printheaderfooter' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printmargins' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/rasterize' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/render_multi_url' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/responsive-screenshot' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-jasmine' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-jasmine2' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-qunit' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/scandir' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/server' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/serverkeepalive' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/simpleserver' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/sleepsort' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/stdin-stdout-stderr' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/universe' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/unrandomize' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/useragent' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/version' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/waitfor' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantom/examples/walk_through_frames' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/phantomjs' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/lib/util' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/test/exit' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/test/loadspeed' {
+  declare module.exports: any;
+}
+
+declare module 'phantomjs-prebuilt/test/tests' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'phantomjs-prebuilt/install.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/install'>;
+}
+declare module 'phantomjs-prebuilt/lib/location.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/location'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/arguments.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/arguments'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/child_process-examples.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/child_process-examples'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/colorwheel.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/colorwheel'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/countdown.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/countdown'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/detectsniff.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/detectsniff'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/echoToFile.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/echoToFile'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/features.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/features'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/fibo.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/fibo'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/hello.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/hello'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/injectme.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/injectme'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/loadspeed.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/loadspeed'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/loadurlwithoutcss.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/loadurlwithoutcss'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/modernizr.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/modernizr'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/module.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/module'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/netlog.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/netlog'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/netsniff.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/netsniff'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/openurlwithproxy.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/openurlwithproxy'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/outputEncoding.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/outputEncoding'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/page_events.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/page_events'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/pagecallback.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/pagecallback'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/phantomwebintro.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/phantomwebintro'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/post.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/post'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/postjson.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/postjson'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/postserver.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/postserver'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printenv.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/printenv'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printheaderfooter.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/printheaderfooter'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/printmargins.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/printmargins'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/rasterize.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/rasterize'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/render_multi_url.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/render_multi_url'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/responsive-screenshot.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/responsive-screenshot'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-jasmine.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/run-jasmine'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-jasmine2.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/run-jasmine2'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/run-qunit.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/run-qunit'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/scandir.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/scandir'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/server.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/server'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/serverkeepalive.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/serverkeepalive'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/simpleserver.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/simpleserver'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/sleepsort.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/sleepsort'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/stdin-stdout-stderr.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/stdin-stdout-stderr'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/universe.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/universe'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/unrandomize.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/unrandomize'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/useragent.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/useragent'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/version.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/version'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/waitfor.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/waitfor'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantom/examples/walk_through_frames.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantom/examples/walk_through_frames'>;
+}
+declare module 'phantomjs-prebuilt/lib/phantomjs.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/phantomjs'>;
+}
+declare module 'phantomjs-prebuilt/lib/util.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/lib/util'>;
+}
+declare module 'phantomjs-prebuilt/test/exit.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/test/exit'>;
+}
+declare module 'phantomjs-prebuilt/test/loadspeed.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/test/loadspeed'>;
+}
+declare module 'phantomjs-prebuilt/test/tests.js' {
+  declare module.exports: $Exports<'phantomjs-prebuilt/test/tests'>;
+}
diff --git a/flow-typed/npm/query-string_vx.x.x.js b/flow-typed/npm/query-string_vx.x.x.js
new file mode 100644
index 0000000..81a2ff4
--- /dev/null
+++ b/flow-typed/npm/query-string_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: 11bcd754a34b4417a48b5edd97591597
+// flow-typed version: <<STUB>>/query-string_v^4.2.3/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'query-string'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'query-string' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'query-string/index' {
+  declare module.exports: $Exports<'query-string'>;
+}
+declare module 'query-string/index.js' {
+  declare module.exports: $Exports<'query-string'>;
+}
diff --git a/flow-typed/npm/reify_vx.x.x.js b/flow-typed/npm/reify_vx.x.x.js
new file mode 100644
index 0000000..6fdeee3
--- /dev/null
+++ b/flow-typed/npm/reify_vx.x.x.js
@@ -0,0 +1,95 @@
+// flow-typed signature: 1e695bf8a2ec6c4dccc754434630cb6c
+// flow-typed version: <<STUB>>/reify_v^0.3.8/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'reify'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'reify' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'reify/lib/compiler' {
+  declare module.exports: any;
+}
+
+declare module 'reify/lib/empty' {
+  declare module.exports: any;
+}
+
+declare module 'reify/lib/entry' {
+  declare module.exports: any;
+}
+
+declare module 'reify/lib/runtime' {
+  declare module.exports: any;
+}
+
+declare module 'reify/lib/utils' {
+  declare module.exports: any;
+}
+
+declare module 'reify/node/caching-compiler' {
+  declare module.exports: any;
+}
+
+declare module 'reify/node/compile-hook' {
+  declare module.exports: any;
+}
+
+declare module 'reify/node/index' {
+  declare module.exports: any;
+}
+
+declare module 'reify/node/runtime' {
+  declare module.exports: any;
+}
+
+declare module 'reify/repl/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'reify/lib/compiler.js' {
+  declare module.exports: $Exports<'reify/lib/compiler'>;
+}
+declare module 'reify/lib/empty.js' {
+  declare module.exports: $Exports<'reify/lib/empty'>;
+}
+declare module 'reify/lib/entry.js' {
+  declare module.exports: $Exports<'reify/lib/entry'>;
+}
+declare module 'reify/lib/runtime.js' {
+  declare module.exports: $Exports<'reify/lib/runtime'>;
+}
+declare module 'reify/lib/utils.js' {
+  declare module.exports: $Exports<'reify/lib/utils'>;
+}
+declare module 'reify/node/caching-compiler.js' {
+  declare module.exports: $Exports<'reify/node/caching-compiler'>;
+}
+declare module 'reify/node/compile-hook.js' {
+  declare module.exports: $Exports<'reify/node/compile-hook'>;
+}
+declare module 'reify/node/index.js' {
+  declare module.exports: $Exports<'reify/node/index'>;
+}
+declare module 'reify/node/runtime.js' {
+  declare module.exports: $Exports<'reify/node/runtime'>;
+}
+declare module 'reify/repl/index.js' {
+  declare module.exports: $Exports<'reify/repl/index'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-buble_vx.x.x.js b/flow-typed/npm/rollup-plugin-buble_vx.x.x.js
new file mode 100644
index 0000000..8cb0d89
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-buble_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: bc76123b8d3835bf9593da423abe04d7
+// flow-typed version: <<STUB>>/rollup-plugin-buble_v^0.14.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-buble'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-buble' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-buble/dist/rollup-plugin-buble.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-buble/dist/rollup-plugin-buble.es' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-buble/dist/rollup-plugin-buble.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-buble/dist/rollup-plugin-buble.cjs'>;
+}
+declare module 'rollup-plugin-buble/dist/rollup-plugin-buble.es.js' {
+  declare module.exports: $Exports<'rollup-plugin-buble/dist/rollup-plugin-buble.es'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-commonjs_vx.x.x.js b/flow-typed/npm/rollup-plugin-commonjs_vx.x.x.js
new file mode 100644
index 0000000..160b39c
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-commonjs_vx.x.x.js
@@ -0,0 +1,81 @@
+// flow-typed signature: 240e95bdb13c3a35f80d872c5f1bfb07
+// flow-typed version: <<STUB>>/rollup-plugin-commonjs_v^5.0.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-commonjs'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-commonjs' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/ast-utils' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/defaultResolver' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/helpers' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/index' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/transform' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-commonjs/src/utils' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.cjs'>;
+}
+declare module 'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/dist/rollup-plugin-commonjs.es'>;
+}
+declare module 'rollup-plugin-commonjs/src/ast-utils.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/ast-utils'>;
+}
+declare module 'rollup-plugin-commonjs/src/defaultResolver.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/defaultResolver'>;
+}
+declare module 'rollup-plugin-commonjs/src/helpers.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/helpers'>;
+}
+declare module 'rollup-plugin-commonjs/src/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/index'>;
+}
+declare module 'rollup-plugin-commonjs/src/transform.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/transform'>;
+}
+declare module 'rollup-plugin-commonjs/src/utils.js' {
+  declare module.exports: $Exports<'rollup-plugin-commonjs/src/utils'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-eslint_vx.x.x.js b/flow-typed/npm/rollup-plugin-eslint_vx.x.x.js
new file mode 100644
index 0000000..e23c687
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-eslint_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: 1f92e6e0e0e9d72d7fdfeeadbb190eb8
+// flow-typed version: <<STUB>>/rollup-plugin-eslint_v^3.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-eslint'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-eslint' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-eslint/dist/rollup-plugin-eslint.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-eslint/dist/rollup-plugin-eslint.es' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-eslint/dist/rollup-plugin-eslint.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-eslint/dist/rollup-plugin-eslint.cjs'>;
+}
+declare module 'rollup-plugin-eslint/dist/rollup-plugin-eslint.es.js' {
+  declare module.exports: $Exports<'rollup-plugin-eslint/dist/rollup-plugin-eslint.es'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-flow-no-whitespace_vx.x.x.js b/flow-typed/npm/rollup-plugin-flow-no-whitespace_vx.x.x.js
new file mode 100644
index 0000000..db4c4ee
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-flow-no-whitespace_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: e3657500c54b43bf9776c7b33d409899
+// flow-typed version: <<STUB>>/rollup-plugin-flow-no-whitespace_v^1.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-flow-no-whitespace'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-flow-no-whitespace' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'rollup-plugin-flow-no-whitespace/index' {
+  declare module.exports: $Exports<'rollup-plugin-flow-no-whitespace'>;
+}
+declare module 'rollup-plugin-flow-no-whitespace/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-flow-no-whitespace'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-flow_vx.x.x.js b/flow-typed/npm/rollup-plugin-flow_vx.x.x.js
new file mode 100644
index 0000000..2ddc51e
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-flow_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: d4695f2a40c4ccdd6528866dd8786915
+// flow-typed version: <<STUB>>/rollup-plugin-flow_v^1.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-flow'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-flow' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'rollup-plugin-flow/index' {
+  declare module.exports: $Exports<'rollup-plugin-flow'>;
+}
+declare module 'rollup-plugin-flow/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-flow'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-json_vx.x.x.js b/flow-typed/npm/rollup-plugin-json_vx.x.x.js
new file mode 100644
index 0000000..ffa9a45
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-json_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: 68c51e9216afd9798d898289d7675b5a
+// flow-typed version: <<STUB>>/rollup-plugin-json_v^2.0.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-json'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-json' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-json/dist/rollup-plugin-json.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-json/dist/rollup-plugin-json.es' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-json/src/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-json/dist/rollup-plugin-json.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-json/dist/rollup-plugin-json.cjs'>;
+}
+declare module 'rollup-plugin-json/dist/rollup-plugin-json.es.js' {
+  declare module.exports: $Exports<'rollup-plugin-json/dist/rollup-plugin-json.es'>;
+}
+declare module 'rollup-plugin-json/src/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-json/src/index'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-node-resolve_vx.x.x.js b/flow-typed/npm/rollup-plugin-node-resolve_vx.x.x.js
new file mode 100644
index 0000000..e439a72
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-node-resolve_vx.x.x.js
@@ -0,0 +1,53 @@
+// flow-typed signature: 77087eb25686219194e4dbba6f9cd202
+// flow-typed version: <<STUB>>/rollup-plugin-node-resolve_v^2.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-node-resolve'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-node-resolve' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es6' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-node-resolve/src/empty' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-node-resolve/src/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.cjs'>;
+}
+declare module 'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es6.js' {
+  declare module.exports: $Exports<'rollup-plugin-node-resolve/dist/rollup-plugin-node-resolve.es6'>;
+}
+declare module 'rollup-plugin-node-resolve/src/empty.js' {
+  declare module.exports: $Exports<'rollup-plugin-node-resolve/src/empty'>;
+}
+declare module 'rollup-plugin-node-resolve/src/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-node-resolve/src/index'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-postcss_vx.x.x.js b/flow-typed/npm/rollup-plugin-postcss_vx.x.x.js
new file mode 100644
index 0000000..3ed88e1
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-postcss_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: ffee129c2c2545168f37519a266d3609
+// flow-typed version: <<STUB>>/rollup-plugin-postcss_v^0.2.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-postcss'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-postcss' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-postcss/src/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-postcss/index' {
+  declare module.exports: $Exports<'rollup-plugin-postcss'>;
+}
+declare module 'rollup-plugin-postcss/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-postcss'>;
+}
+declare module 'rollup-plugin-postcss/src/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-postcss/src/index'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-replace_vx.x.x.js b/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
new file mode 100644
index 0000000..2ed8799
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-replace_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: 35c713a7ab0785b9a67cca4f3f37dded
+// flow-typed version: <<STUB>>/rollup-plugin-replace_v^1.1.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-replace'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-replace' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-plugin-replace/src/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.cjs.js' {
+  declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.cjs'>;
+}
+declare module 'rollup-plugin-replace/dist/rollup-plugin-replace.es.js' {
+  declare module.exports: $Exports<'rollup-plugin-replace/dist/rollup-plugin-replace.es'>;
+}
+declare module 'rollup-plugin-replace/src/index.js' {
+  declare module.exports: $Exports<'rollup-plugin-replace/src/index'>;
+}
diff --git a/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js b/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
new file mode 100644
index 0000000..df86b49
--- /dev/null
+++ b/flow-typed/npm/rollup-plugin-uglify_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: 286d067bccb84f96697e4a34420d54cc
+// flow-typed version: <<STUB>>/rollup-plugin-uglify_v^1.0.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-plugin-uglify'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-plugin-uglify' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-plugin-uglify/dist/rollup-plugin-uglify' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-plugin-uglify/dist/rollup-plugin-uglify.js' {
+  declare module.exports: $Exports<'rollup-plugin-uglify/dist/rollup-plugin-uglify'>;
+}
diff --git a/flow-typed/npm/rollup-watch_vx.x.x.js b/flow-typed/npm/rollup-watch_vx.x.x.js
new file mode 100644
index 0000000..e9f72e5
--- /dev/null
+++ b/flow-typed/npm/rollup-watch_vx.x.x.js
@@ -0,0 +1,67 @@
+// flow-typed signature: 8418ee3b6fd2b08499999b2de0282c95
+// flow-typed version: <<STUB>>/rollup-watch_v^2.5.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup-watch'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup-watch' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup-watch/dist/rollup-watch.cjs' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-watch/dist/rollup-watch.es6' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-watch/src/index' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-watch/src/utils/checkVersion' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-watch/src/utils/object' {
+  declare module.exports: any;
+}
+
+declare module 'rollup-watch/src/utils/promise' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup-watch/dist/rollup-watch.cjs.js' {
+  declare module.exports: $Exports<'rollup-watch/dist/rollup-watch.cjs'>;
+}
+declare module 'rollup-watch/dist/rollup-watch.es6.js' {
+  declare module.exports: $Exports<'rollup-watch/dist/rollup-watch.es6'>;
+}
+declare module 'rollup-watch/src/index.js' {
+  declare module.exports: $Exports<'rollup-watch/src/index'>;
+}
+declare module 'rollup-watch/src/utils/checkVersion.js' {
+  declare module.exports: $Exports<'rollup-watch/src/utils/checkVersion'>;
+}
+declare module 'rollup-watch/src/utils/object.js' {
+  declare module.exports: $Exports<'rollup-watch/src/utils/object'>;
+}
+declare module 'rollup-watch/src/utils/promise.js' {
+  declare module.exports: $Exports<'rollup-watch/src/utils/promise'>;
+}
diff --git a/flow-typed/npm/rollup_vx.x.x.js b/flow-typed/npm/rollup_vx.x.x.js
new file mode 100644
index 0000000..4c81919
--- /dev/null
+++ b/flow-typed/npm/rollup_vx.x.x.js
@@ -0,0 +1,46 @@
+// flow-typed signature: c6010c39145d27c2d057b47ef1938352
+// flow-typed version: <<STUB>>/rollup_v^0.36.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'rollup'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'rollup' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'rollup/dist/rollup.browser' {
+  declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup.es' {
+  declare module.exports: any;
+}
+
+declare module 'rollup/dist/rollup' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'rollup/dist/rollup.browser.js' {
+  declare module.exports: $Exports<'rollup/dist/rollup.browser'>;
+}
+declare module 'rollup/dist/rollup.es.js' {
+  declare module.exports: $Exports<'rollup/dist/rollup.es'>;
+}
+declare module 'rollup/dist/rollup.js' {
+  declare module.exports: $Exports<'rollup/dist/rollup'>;
+}
diff --git a/flow-typed/npm/scroll-to_vx.x.x.js b/flow-typed/npm/scroll-to_vx.x.x.js
new file mode 100644
index 0000000..6810be5
--- /dev/null
+++ b/flow-typed/npm/scroll-to_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: a4f400ae271b6cb6dc34c2bd886055d4
+// flow-typed version: <<STUB>>/scroll-to_v0.0.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'scroll-to'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'scroll-to' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'scroll-to/index' {
+  declare module.exports: $Exports<'scroll-to'>;
+}
+declare module 'scroll-to/index.js' {
+  declare module.exports: $Exports<'scroll-to'>;
+}
diff --git a/flow-typed/npm/selenium-server_vx.x.x.js b/flow-typed/npm/selenium-server_vx.x.x.js
new file mode 100644
index 0000000..78d81c4
--- /dev/null
+++ b/flow-typed/npm/selenium-server_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: 88fccb37f12dc173d61cf0f761f844f4
+// flow-typed version: <<STUB>>/selenium-server_v2.53.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'selenium-server'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'selenium-server' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'selenium-server/lib/runner/app' {
+  declare module.exports: any;
+}
+
+declare module 'selenium-server/lib/selenium-server' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'selenium-server/lib/runner/app.js' {
+  declare module.exports: $Exports<'selenium-server/lib/runner/app'>;
+}
+declare module 'selenium-server/lib/selenium-server.js' {
+  declare module.exports: $Exports<'selenium-server/lib/selenium-server'>;
+}
diff --git a/flow-typed/npm/semver_v5.1.x.js b/flow-typed/npm/semver_v5.1.x.js
new file mode 100644
index 0000000..6331b84
--- /dev/null
+++ b/flow-typed/npm/semver_v5.1.x.js
@@ -0,0 +1,81 @@
+// flow-typed signature: c5f918cd3de18b19a20558e6f3bbcc84
+// flow-typed version: cdd17a64e0/semver_v5.1.x/flow_>=v0.27.0
+
+// List of members taken from here: https://www.npmjs.com/package/semver/#functions
+// TODO support the `loose` parameter
+// TODO support SemVer instances as input parameters
+declare module 'semver' {
+  declare type Release =
+    'major' |
+    'premajor' |
+    'minor' |
+    'preminor' |
+    'patch' |
+    'prepatch' |
+    'prerelease';
+
+  // The supported comparators are taken from the source here:
+  // https://github.com/npm/node-semver/blob/8bd070b550db2646362c9883c8d008d32f66a234/semver.js#L623
+  declare type Comparator =
+    '===' |
+    '!==' |
+    '==' |
+    '=' |
+    '' |  // Not sure why you would want this, but whatever.
+    '!=' |
+    '>' |
+    '>=' |
+    '<' |
+    '<=';
+
+  declare class SemVer {
+    loose: ?boolean,
+    raw: string,
+    major: number,
+    minor: number,
+    patch: number,
+    prerelease: Array<string | number>,
+    build: Array<string>,
+    version: string,
+  }
+
+  // Functions
+  declare function valid(v: string): string | null;
+  declare function inc(v: string, release: Release): string | null;
+  declare function major(v: string): number;
+  declare function minor(v: string): number;
+  declare function patch(v: string): number;
+
+  // Comparison
+  declare function gt(v1: string, v2: string): boolean;
+  declare function gte(v1: string, v2: string): boolean;
+  declare function lt(v1: string, v2: string): boolean;
+  declare function lte(v1: string, v2: string): boolean;
+  declare function eq(v1: string, v2: string): boolean;
+  declare function neq(v1: string, v2: string): boolean;
+  declare function cmp(v1: string, comparator: Comparator, v2: string): boolean;
+  declare function compare(v1: string, v2: string): -1 | 0 | 1;
+  declare function rcompare(v1: string, v2: string): -1 | 0 | 1;
+  declare function diff(v1: string, v2: string): ?Release;
+
+  // Ranges
+  declare function validRange(r: string): string | null;
+  declare function satisfies(version: string, range: string): boolean;
+  declare function maxSatisfying(versions: Array<string>, range: string): string | null;
+  declare function gtr(version: string, range: string): boolean;
+  declare function ltr(version: string, range: string): boolean;
+  declare function outside(version: string, range: string, hilo: '>' | '<'): boolean;
+
+  // Not explicitly documented
+  declare function parse(version: string): ?SemVer;
+
+  declare class Range {
+    set: Array<Array<{semver: SemVer}>>;
+
+    constructor(range: string, loose?: boolean): Range;
+
+    format(): string;
+    test(version: string): boolean;
+    toString(): string;
+  }
+}
diff --git a/flow-typed/npm/serve_vx.x.x.js b/flow-typed/npm/serve_vx.x.x.js
new file mode 100644
index 0000000..4bd9cde
--- /dev/null
+++ b/flow-typed/npm/serve_vx.x.x.js
@@ -0,0 +1,18 @@
+// flow-typed signature: b2a86e0e21523ed6260f76eaf06f7b99
+// flow-typed version: <<STUB>>/serve_v^1.4.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'serve'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'serve' {
+  declare module.exports: any;
+}
diff --git a/flow-typed/npm/sinon-chai_vx.x.x.js b/flow-typed/npm/sinon-chai_vx.x.x.js
new file mode 100644
index 0000000..61cf4b0
--- /dev/null
+++ b/flow-typed/npm/sinon-chai_vx.x.x.js
@@ -0,0 +1,32 @@
+// flow-typed signature: fbafafb5202f0bb33ff57efb91900bbb
+// flow-typed version: <<STUB>>/sinon-chai_v^2.8.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'sinon-chai'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'sinon-chai' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'sinon-chai/lib/sinon-chai' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'sinon-chai/lib/sinon-chai.js' {
+  declare module.exports: $Exports<'sinon-chai/lib/sinon-chai'>;
+}
diff --git a/flow-typed/npm/sinon_vx.x.x.js b/flow-typed/npm/sinon_vx.x.x.js
new file mode 100644
index 0000000..cd8e630
--- /dev/null
+++ b/flow-typed/npm/sinon_vx.x.x.js
@@ -0,0 +1,263 @@
+// flow-typed signature: 6855ff5926bee13f42449072f47a638d
+// flow-typed version: <<STUB>>/sinon_v^1.17.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'sinon'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'sinon' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'sinon/lib/sinon' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/assert' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/behavior' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/call' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/collection' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/extend' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/format' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/log_error' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/match' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/mock' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/sandbox' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/spy' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/stub' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/test_case' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/test' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/times_in_words' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/typeOf' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/core' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/event' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/fake_server_with_clock' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/fake_server' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/fake_timers' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/fake_xdomain_request' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/fake_xml_http_request' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/timers_ie' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/xdr_ie' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/util/xhr_ie' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/lib/sinon/walk' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon-1.17.7' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon-ie-1.17.7' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon-ie' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon-server-1.17.7' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon-server' {
+  declare module.exports: any;
+}
+
+declare module 'sinon/pkg/sinon' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'sinon/lib/sinon.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon'>;
+}
+declare module 'sinon/lib/sinon/assert.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/assert'>;
+}
+declare module 'sinon/lib/sinon/behavior.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/behavior'>;
+}
+declare module 'sinon/lib/sinon/call.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/call'>;
+}
+declare module 'sinon/lib/sinon/collection.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/collection'>;
+}
+declare module 'sinon/lib/sinon/extend.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/extend'>;
+}
+declare module 'sinon/lib/sinon/format.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/format'>;
+}
+declare module 'sinon/lib/sinon/log_error.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/log_error'>;
+}
+declare module 'sinon/lib/sinon/match.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/match'>;
+}
+declare module 'sinon/lib/sinon/mock.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/mock'>;
+}
+declare module 'sinon/lib/sinon/sandbox.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/sandbox'>;
+}
+declare module 'sinon/lib/sinon/spy.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/spy'>;
+}
+declare module 'sinon/lib/sinon/stub.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/stub'>;
+}
+declare module 'sinon/lib/sinon/test_case.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/test_case'>;
+}
+declare module 'sinon/lib/sinon/test.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/test'>;
+}
+declare module 'sinon/lib/sinon/times_in_words.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/times_in_words'>;
+}
+declare module 'sinon/lib/sinon/typeOf.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/typeOf'>;
+}
+declare module 'sinon/lib/sinon/util/core.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/core'>;
+}
+declare module 'sinon/lib/sinon/util/event.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/event'>;
+}
+declare module 'sinon/lib/sinon/util/fake_server_with_clock.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/fake_server_with_clock'>;
+}
+declare module 'sinon/lib/sinon/util/fake_server.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/fake_server'>;
+}
+declare module 'sinon/lib/sinon/util/fake_timers.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/fake_timers'>;
+}
+declare module 'sinon/lib/sinon/util/fake_xdomain_request.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/fake_xdomain_request'>;
+}
+declare module 'sinon/lib/sinon/util/fake_xml_http_request.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/fake_xml_http_request'>;
+}
+declare module 'sinon/lib/sinon/util/timers_ie.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/timers_ie'>;
+}
+declare module 'sinon/lib/sinon/util/xdr_ie.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/xdr_ie'>;
+}
+declare module 'sinon/lib/sinon/util/xhr_ie.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/util/xhr_ie'>;
+}
+declare module 'sinon/lib/sinon/walk.js' {
+  declare module.exports: $Exports<'sinon/lib/sinon/walk'>;
+}
+declare module 'sinon/pkg/sinon-1.17.7.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon-1.17.7'>;
+}
+declare module 'sinon/pkg/sinon-ie-1.17.7.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon-ie-1.17.7'>;
+}
+declare module 'sinon/pkg/sinon-ie.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon-ie'>;
+}
+declare module 'sinon/pkg/sinon-server-1.17.7.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon-server-1.17.7'>;
+}
+declare module 'sinon/pkg/sinon-server.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon-server'>;
+}
+declare module 'sinon/pkg/sinon.js' {
+  declare module.exports: $Exports<'sinon/pkg/sinon'>;
+}
diff --git a/flow-typed/npm/uglify-js_vx.x.x.js b/flow-typed/npm/uglify-js_vx.x.x.js
new file mode 100644
index 0000000..916af8c
--- /dev/null
+++ b/flow-typed/npm/uglify-js_vx.x.x.js
@@ -0,0 +1,116 @@
+// flow-typed signature: 36af0b055ee208eb786e117b4d782a5a
+// flow-typed version: <<STUB>>/uglify-js_v^2.6.4/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'uglify-js'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'uglify-js' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'uglify-js/bin/extract-props' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/ast' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/compress' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/mozilla-ast' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/output' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/parse' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/propmangle' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/scope' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/sourcemap' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/transform' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/lib/utils' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/tools/exports' {
+  declare module.exports: any;
+}
+
+declare module 'uglify-js/tools/node' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'uglify-js/bin/extract-props.js' {
+  declare module.exports: $Exports<'uglify-js/bin/extract-props'>;
+}
+declare module 'uglify-js/lib/ast.js' {
+  declare module.exports: $Exports<'uglify-js/lib/ast'>;
+}
+declare module 'uglify-js/lib/compress.js' {
+  declare module.exports: $Exports<'uglify-js/lib/compress'>;
+}
+declare module 'uglify-js/lib/mozilla-ast.js' {
+  declare module.exports: $Exports<'uglify-js/lib/mozilla-ast'>;
+}
+declare module 'uglify-js/lib/output.js' {
+  declare module.exports: $Exports<'uglify-js/lib/output'>;
+}
+declare module 'uglify-js/lib/parse.js' {
+  declare module.exports: $Exports<'uglify-js/lib/parse'>;
+}
+declare module 'uglify-js/lib/propmangle.js' {
+  declare module.exports: $Exports<'uglify-js/lib/propmangle'>;
+}
+declare module 'uglify-js/lib/scope.js' {
+  declare module.exports: $Exports<'uglify-js/lib/scope'>;
+}
+declare module 'uglify-js/lib/sourcemap.js' {
+  declare module.exports: $Exports<'uglify-js/lib/sourcemap'>;
+}
+declare module 'uglify-js/lib/transform.js' {
+  declare module.exports: $Exports<'uglify-js/lib/transform'>;
+}
+declare module 'uglify-js/lib/utils.js' {
+  declare module.exports: $Exports<'uglify-js/lib/utils'>;
+}
+declare module 'uglify-js/tools/exports.js' {
+  declare module.exports: $Exports<'uglify-js/tools/exports'>;
+}
+declare module 'uglify-js/tools/node.js' {
+  declare module.exports: $Exports<'uglify-js/tools/node'>;
+}
diff --git a/flow-typed/npm/vue-loader_vx.x.x.js b/flow-typed/npm/vue-loader_vx.x.x.js
new file mode 100644
index 0000000..3efda48
--- /dev/null
+++ b/flow-typed/npm/vue-loader_vx.x.x.js
@@ -0,0 +1,122 @@
+// flow-typed signature: 07a43208e87ce65dea47f3bb8ce1805d
+// flow-typed version: <<STUB>>/vue-loader_v^11.3.3/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'vue-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'vue-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'vue-loader/lib/component-normalizer' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/loader' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/parser' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/selector' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/style-compiler/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/style-compiler/load-postcss-config' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/style-compiler/plugins/scope-id' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/style-compiler/plugins/trim' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/template-compiler/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/template-compiler/modules/transform-require' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/template-compiler/preprocessor' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/utils/gen-id' {
+  declare module.exports: any;
+}
+
+declare module 'vue-loader/lib/utils/normalize' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'vue-loader/index' {
+  declare module.exports: $Exports<'vue-loader'>;
+}
+declare module 'vue-loader/index.js' {
+  declare module.exports: $Exports<'vue-loader'>;
+}
+declare module 'vue-loader/lib/component-normalizer.js' {
+  declare module.exports: $Exports<'vue-loader/lib/component-normalizer'>;
+}
+declare module 'vue-loader/lib/loader.js' {
+  declare module.exports: $Exports<'vue-loader/lib/loader'>;
+}
+declare module 'vue-loader/lib/parser.js' {
+  declare module.exports: $Exports<'vue-loader/lib/parser'>;
+}
+declare module 'vue-loader/lib/selector.js' {
+  declare module.exports: $Exports<'vue-loader/lib/selector'>;
+}
+declare module 'vue-loader/lib/style-compiler/index.js' {
+  declare module.exports: $Exports<'vue-loader/lib/style-compiler/index'>;
+}
+declare module 'vue-loader/lib/style-compiler/load-postcss-config.js' {
+  declare module.exports: $Exports<'vue-loader/lib/style-compiler/load-postcss-config'>;
+}
+declare module 'vue-loader/lib/style-compiler/plugins/scope-id.js' {
+  declare module.exports: $Exports<'vue-loader/lib/style-compiler/plugins/scope-id'>;
+}
+declare module 'vue-loader/lib/style-compiler/plugins/trim.js' {
+  declare module.exports: $Exports<'vue-loader/lib/style-compiler/plugins/trim'>;
+}
+declare module 'vue-loader/lib/template-compiler/index.js' {
+  declare module.exports: $Exports<'vue-loader/lib/template-compiler/index'>;
+}
+declare module 'vue-loader/lib/template-compiler/modules/transform-require.js' {
+  declare module.exports: $Exports<'vue-loader/lib/template-compiler/modules/transform-require'>;
+}
+declare module 'vue-loader/lib/template-compiler/preprocessor.js' {
+  declare module.exports: $Exports<'vue-loader/lib/template-compiler/preprocessor'>;
+}
+declare module 'vue-loader/lib/utils/gen-id.js' {
+  declare module.exports: $Exports<'vue-loader/lib/utils/gen-id'>;
+}
+declare module 'vue-loader/lib/utils/normalize.js' {
+  declare module.exports: $Exports<'vue-loader/lib/utils/normalize'>;
+}
diff --git a/flow-typed/npm/vue-template-compiler_vx.x.x.js b/flow-typed/npm/vue-template-compiler_vx.x.x.js
new file mode 100644
index 0000000..486ef59
--- /dev/null
+++ b/flow-typed/npm/vue-template-compiler_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 8217045e197e8302a8b716c6d6a2b70a
+// flow-typed version: <<STUB>>/vue-template-compiler_v^2.2.6/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'vue-template-compiler'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'vue-template-compiler' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'vue-template-compiler/build' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'vue-template-compiler/build.js' {
+  declare module.exports: $Exports<'vue-template-compiler/build'>;
+}
+declare module 'vue-template-compiler/index' {
+  declare module.exports: $Exports<'vue-template-compiler'>;
+}
+declare module 'vue-template-compiler/index.js' {
+  declare module.exports: $Exports<'vue-template-compiler'>;
+}
diff --git a/flow-typed/npm/vue_vx.x.x.js b/flow-typed/npm/vue_vx.x.x.js
new file mode 100644
index 0000000..f732ac3
--- /dev/null
+++ b/flow-typed/npm/vue_vx.x.x.js
@@ -0,0 +1,1089 @@
+// flow-typed signature: d5d72228883a6974bc67491fd2f0fac4
+// flow-typed version: <<STUB>>/vue_v^2.2.6/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'vue'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'vue' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'vue/dist/vue.common' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.common.min' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.esm' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.min' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.runtime.common' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.runtime.esm' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.runtime' {
+  declare module.exports: any;
+}
+
+declare module 'vue/dist/vue.runtime.min' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/codegen/events' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/codegen/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/directives/bind' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/directives/model' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/error-detector' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/helpers' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/optimizer' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/parser/entity-decoder' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/parser/filter-parser' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/parser/html-parser' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/parser/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/compiler/parser/text-parser' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/components/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/components/keep-alive' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/config' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/global-api/assets' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/global-api/extend' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/global-api/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/global-api/mixin' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/global-api/use' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/events' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/init' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/inject' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/lifecycle' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/proxy' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/bind-object-props' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/check-keycodes' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/render-list' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/render-slot' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/render-static' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/resolve-filter' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render-helpers/resolve-slots' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/render' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/instance/state' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/observer/array' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/observer/dep' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/observer/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/observer/scheduler' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/observer/watcher' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/debug' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/env' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/error' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/lang' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/options' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/perf' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/util/props' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/create-component' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/create-element' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/helpers/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/helpers/merge-hook' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/helpers/normalize-children' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/helpers/update-listeners' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/modules/directives' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/modules/ref' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/patch' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/core/vdom/vnode' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/web-compiler' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/web-runtime-with-compiler' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/web-runtime' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/web-server-renderer' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/weex-compiler' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/weex-factory' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/entries/weex-framework' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/directives/html' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/directives/model' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/directives/text' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/modules/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/modules/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/compiler/util' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/class-util' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/components/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/components/transition-group' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/components/transition' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/directives/model' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/directives/show' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/attrs' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/dom-props' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/events' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/modules/transition' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/node-ops' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/patch' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/runtime/transition-util' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/directives/show' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/modules/attrs' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/modules/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/modules/dom-props' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/modules/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/server/util' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/attrs' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/compat' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/element' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/web/util/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/directives/model' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/modules/append' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/modules/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/modules/props' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/compiler/modules/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/framework' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/components/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/components/transition-group' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/components/transition' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/directives/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/attrs' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/class' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/events' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/style' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/modules/transition' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/node-ops' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/patch' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/runtime/text-node' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/platforms/weex/util/index' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/create-bundle-renderer' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/create-bundle-runner' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/create-renderer' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/render-context' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/render-stream' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/render' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/source-map-support' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/server/write' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/sfc/parser' {
+  declare module.exports: any;
+}
+
+declare module 'vue/src/shared/util' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'vue/dist/vue.common.js' {
+  declare module.exports: $Exports<'vue/dist/vue.common'>;
+}
+declare module 'vue/dist/vue.common.min.js' {
+  declare module.exports: $Exports<'vue/dist/vue.common.min'>;
+}
+declare module 'vue/dist/vue.esm.js' {
+  declare module.exports: $Exports<'vue/dist/vue.esm'>;
+}
+declare module 'vue/dist/vue.js' {
+  declare module.exports: $Exports<'vue/dist/vue'>;
+}
+declare module 'vue/dist/vue.min.js' {
+  declare module.exports: $Exports<'vue/dist/vue.min'>;
+}
+declare module 'vue/dist/vue.runtime.common.js' {
+  declare module.exports: $Exports<'vue/dist/vue.runtime.common'>;
+}
+declare module 'vue/dist/vue.runtime.esm.js' {
+  declare module.exports: $Exports<'vue/dist/vue.runtime.esm'>;
+}
+declare module 'vue/dist/vue.runtime.js' {
+  declare module.exports: $Exports<'vue/dist/vue.runtime'>;
+}
+declare module 'vue/dist/vue.runtime.min.js' {
+  declare module.exports: $Exports<'vue/dist/vue.runtime.min'>;
+}
+declare module 'vue/src/compiler/codegen/events.js' {
+  declare module.exports: $Exports<'vue/src/compiler/codegen/events'>;
+}
+declare module 'vue/src/compiler/codegen/index.js' {
+  declare module.exports: $Exports<'vue/src/compiler/codegen/index'>;
+}
+declare module 'vue/src/compiler/directives/bind.js' {
+  declare module.exports: $Exports<'vue/src/compiler/directives/bind'>;
+}
+declare module 'vue/src/compiler/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/compiler/directives/index'>;
+}
+declare module 'vue/src/compiler/directives/model.js' {
+  declare module.exports: $Exports<'vue/src/compiler/directives/model'>;
+}
+declare module 'vue/src/compiler/error-detector.js' {
+  declare module.exports: $Exports<'vue/src/compiler/error-detector'>;
+}
+declare module 'vue/src/compiler/helpers.js' {
+  declare module.exports: $Exports<'vue/src/compiler/helpers'>;
+}
+declare module 'vue/src/compiler/index.js' {
+  declare module.exports: $Exports<'vue/src/compiler/index'>;
+}
+declare module 'vue/src/compiler/optimizer.js' {
+  declare module.exports: $Exports<'vue/src/compiler/optimizer'>;
+}
+declare module 'vue/src/compiler/parser/entity-decoder.js' {
+  declare module.exports: $Exports<'vue/src/compiler/parser/entity-decoder'>;
+}
+declare module 'vue/src/compiler/parser/filter-parser.js' {
+  declare module.exports: $Exports<'vue/src/compiler/parser/filter-parser'>;
+}
+declare module 'vue/src/compiler/parser/html-parser.js' {
+  declare module.exports: $Exports<'vue/src/compiler/parser/html-parser'>;
+}
+declare module 'vue/src/compiler/parser/index.js' {
+  declare module.exports: $Exports<'vue/src/compiler/parser/index'>;
+}
+declare module 'vue/src/compiler/parser/text-parser.js' {
+  declare module.exports: $Exports<'vue/src/compiler/parser/text-parser'>;
+}
+declare module 'vue/src/core/components/index.js' {
+  declare module.exports: $Exports<'vue/src/core/components/index'>;
+}
+declare module 'vue/src/core/components/keep-alive.js' {
+  declare module.exports: $Exports<'vue/src/core/components/keep-alive'>;
+}
+declare module 'vue/src/core/config.js' {
+  declare module.exports: $Exports<'vue/src/core/config'>;
+}
+declare module 'vue/src/core/global-api/assets.js' {
+  declare module.exports: $Exports<'vue/src/core/global-api/assets'>;
+}
+declare module 'vue/src/core/global-api/extend.js' {
+  declare module.exports: $Exports<'vue/src/core/global-api/extend'>;
+}
+declare module 'vue/src/core/global-api/index.js' {
+  declare module.exports: $Exports<'vue/src/core/global-api/index'>;
+}
+declare module 'vue/src/core/global-api/mixin.js' {
+  declare module.exports: $Exports<'vue/src/core/global-api/mixin'>;
+}
+declare module 'vue/src/core/global-api/use.js' {
+  declare module.exports: $Exports<'vue/src/core/global-api/use'>;
+}
+declare module 'vue/src/core/index.js' {
+  declare module.exports: $Exports<'vue/src/core/index'>;
+}
+declare module 'vue/src/core/instance/events.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/events'>;
+}
+declare module 'vue/src/core/instance/index.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/index'>;
+}
+declare module 'vue/src/core/instance/init.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/init'>;
+}
+declare module 'vue/src/core/instance/inject.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/inject'>;
+}
+declare module 'vue/src/core/instance/lifecycle.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/lifecycle'>;
+}
+declare module 'vue/src/core/instance/proxy.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/proxy'>;
+}
+declare module 'vue/src/core/instance/render-helpers/bind-object-props.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/bind-object-props'>;
+}
+declare module 'vue/src/core/instance/render-helpers/check-keycodes.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/check-keycodes'>;
+}
+declare module 'vue/src/core/instance/render-helpers/render-list.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/render-list'>;
+}
+declare module 'vue/src/core/instance/render-helpers/render-slot.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/render-slot'>;
+}
+declare module 'vue/src/core/instance/render-helpers/render-static.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/render-static'>;
+}
+declare module 'vue/src/core/instance/render-helpers/resolve-filter.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/resolve-filter'>;
+}
+declare module 'vue/src/core/instance/render-helpers/resolve-slots.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render-helpers/resolve-slots'>;
+}
+declare module 'vue/src/core/instance/render.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/render'>;
+}
+declare module 'vue/src/core/instance/state.js' {
+  declare module.exports: $Exports<'vue/src/core/instance/state'>;
+}
+declare module 'vue/src/core/observer/array.js' {
+  declare module.exports: $Exports<'vue/src/core/observer/array'>;
+}
+declare module 'vue/src/core/observer/dep.js' {
+  declare module.exports: $Exports<'vue/src/core/observer/dep'>;
+}
+declare module 'vue/src/core/observer/index.js' {
+  declare module.exports: $Exports<'vue/src/core/observer/index'>;
+}
+declare module 'vue/src/core/observer/scheduler.js' {
+  declare module.exports: $Exports<'vue/src/core/observer/scheduler'>;
+}
+declare module 'vue/src/core/observer/watcher.js' {
+  declare module.exports: $Exports<'vue/src/core/observer/watcher'>;
+}
+declare module 'vue/src/core/util/debug.js' {
+  declare module.exports: $Exports<'vue/src/core/util/debug'>;
+}
+declare module 'vue/src/core/util/env.js' {
+  declare module.exports: $Exports<'vue/src/core/util/env'>;
+}
+declare module 'vue/src/core/util/error.js' {
+  declare module.exports: $Exports<'vue/src/core/util/error'>;
+}
+declare module 'vue/src/core/util/index.js' {
+  declare module.exports: $Exports<'vue/src/core/util/index'>;
+}
+declare module 'vue/src/core/util/lang.js' {
+  declare module.exports: $Exports<'vue/src/core/util/lang'>;
+}
+declare module 'vue/src/core/util/options.js' {
+  declare module.exports: $Exports<'vue/src/core/util/options'>;
+}
+declare module 'vue/src/core/util/perf.js' {
+  declare module.exports: $Exports<'vue/src/core/util/perf'>;
+}
+declare module 'vue/src/core/util/props.js' {
+  declare module.exports: $Exports<'vue/src/core/util/props'>;
+}
+declare module 'vue/src/core/vdom/create-component.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/create-component'>;
+}
+declare module 'vue/src/core/vdom/create-element.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/create-element'>;
+}
+declare module 'vue/src/core/vdom/helpers/index.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/helpers/index'>;
+}
+declare module 'vue/src/core/vdom/helpers/merge-hook.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/helpers/merge-hook'>;
+}
+declare module 'vue/src/core/vdom/helpers/normalize-children.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/helpers/normalize-children'>;
+}
+declare module 'vue/src/core/vdom/helpers/update-listeners.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/helpers/update-listeners'>;
+}
+declare module 'vue/src/core/vdom/modules/directives.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/modules/directives'>;
+}
+declare module 'vue/src/core/vdom/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/modules/index'>;
+}
+declare module 'vue/src/core/vdom/modules/ref.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/modules/ref'>;
+}
+declare module 'vue/src/core/vdom/patch.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/patch'>;
+}
+declare module 'vue/src/core/vdom/vnode.js' {
+  declare module.exports: $Exports<'vue/src/core/vdom/vnode'>;
+}
+declare module 'vue/src/entries/web-compiler.js' {
+  declare module.exports: $Exports<'vue/src/entries/web-compiler'>;
+}
+declare module 'vue/src/entries/web-runtime-with-compiler.js' {
+  declare module.exports: $Exports<'vue/src/entries/web-runtime-with-compiler'>;
+}
+declare module 'vue/src/entries/web-runtime.js' {
+  declare module.exports: $Exports<'vue/src/entries/web-runtime'>;
+}
+declare module 'vue/src/entries/web-server-renderer.js' {
+  declare module.exports: $Exports<'vue/src/entries/web-server-renderer'>;
+}
+declare module 'vue/src/entries/weex-compiler.js' {
+  declare module.exports: $Exports<'vue/src/entries/weex-compiler'>;
+}
+declare module 'vue/src/entries/weex-factory.js' {
+  declare module.exports: $Exports<'vue/src/entries/weex-factory'>;
+}
+declare module 'vue/src/entries/weex-framework.js' {
+  declare module.exports: $Exports<'vue/src/entries/weex-framework'>;
+}
+declare module 'vue/src/platforms/web/compiler/directives/html.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/directives/html'>;
+}
+declare module 'vue/src/platforms/web/compiler/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/directives/index'>;
+}
+declare module 'vue/src/platforms/web/compiler/directives/model.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/directives/model'>;
+}
+declare module 'vue/src/platforms/web/compiler/directives/text.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/directives/text'>;
+}
+declare module 'vue/src/platforms/web/compiler/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/index'>;
+}
+declare module 'vue/src/platforms/web/compiler/modules/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/modules/class'>;
+}
+declare module 'vue/src/platforms/web/compiler/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/modules/index'>;
+}
+declare module 'vue/src/platforms/web/compiler/modules/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/modules/style'>;
+}
+declare module 'vue/src/platforms/web/compiler/util.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/compiler/util'>;
+}
+declare module 'vue/src/platforms/web/runtime/class-util.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/class-util'>;
+}
+declare module 'vue/src/platforms/web/runtime/components/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/components/index'>;
+}
+declare module 'vue/src/platforms/web/runtime/components/transition-group.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/components/transition-group'>;
+}
+declare module 'vue/src/platforms/web/runtime/components/transition.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/components/transition'>;
+}
+declare module 'vue/src/platforms/web/runtime/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/directives/index'>;
+}
+declare module 'vue/src/platforms/web/runtime/directives/model.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/directives/model'>;
+}
+declare module 'vue/src/platforms/web/runtime/directives/show.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/directives/show'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/attrs.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/attrs'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/class'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/dom-props.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/dom-props'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/events.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/events'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/index'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/style'>;
+}
+declare module 'vue/src/platforms/web/runtime/modules/transition.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/modules/transition'>;
+}
+declare module 'vue/src/platforms/web/runtime/node-ops.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/node-ops'>;
+}
+declare module 'vue/src/platforms/web/runtime/patch.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/patch'>;
+}
+declare module 'vue/src/platforms/web/runtime/transition-util.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/runtime/transition-util'>;
+}
+declare module 'vue/src/platforms/web/server/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/directives/index'>;
+}
+declare module 'vue/src/platforms/web/server/directives/show.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/directives/show'>;
+}
+declare module 'vue/src/platforms/web/server/modules/attrs.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/modules/attrs'>;
+}
+declare module 'vue/src/platforms/web/server/modules/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/modules/class'>;
+}
+declare module 'vue/src/platforms/web/server/modules/dom-props.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/modules/dom-props'>;
+}
+declare module 'vue/src/platforms/web/server/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/modules/index'>;
+}
+declare module 'vue/src/platforms/web/server/modules/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/modules/style'>;
+}
+declare module 'vue/src/platforms/web/server/util.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/server/util'>;
+}
+declare module 'vue/src/platforms/web/util/attrs.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/attrs'>;
+}
+declare module 'vue/src/platforms/web/util/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/class'>;
+}
+declare module 'vue/src/platforms/web/util/compat.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/compat'>;
+}
+declare module 'vue/src/platforms/web/util/element.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/element'>;
+}
+declare module 'vue/src/platforms/web/util/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/index'>;
+}
+declare module 'vue/src/platforms/web/util/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/web/util/style'>;
+}
+declare module 'vue/src/platforms/weex/compiler/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/directives/index'>;
+}
+declare module 'vue/src/platforms/weex/compiler/directives/model.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/directives/model'>;
+}
+declare module 'vue/src/platforms/weex/compiler/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/index'>;
+}
+declare module 'vue/src/platforms/weex/compiler/modules/append.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/modules/append'>;
+}
+declare module 'vue/src/platforms/weex/compiler/modules/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/modules/class'>;
+}
+declare module 'vue/src/platforms/weex/compiler/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/modules/index'>;
+}
+declare module 'vue/src/platforms/weex/compiler/modules/props.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/modules/props'>;
+}
+declare module 'vue/src/platforms/weex/compiler/modules/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/compiler/modules/style'>;
+}
+declare module 'vue/src/platforms/weex/framework.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/framework'>;
+}
+declare module 'vue/src/platforms/weex/runtime/components/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/components/index'>;
+}
+declare module 'vue/src/platforms/weex/runtime/components/transition-group.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/components/transition-group'>;
+}
+declare module 'vue/src/platforms/weex/runtime/components/transition.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/components/transition'>;
+}
+declare module 'vue/src/platforms/weex/runtime/directives/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/directives/index'>;
+}
+declare module 'vue/src/platforms/weex/runtime/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/index'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/attrs.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/attrs'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/class.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/class'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/events.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/events'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/index'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/style.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/style'>;
+}
+declare module 'vue/src/platforms/weex/runtime/modules/transition.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/modules/transition'>;
+}
+declare module 'vue/src/platforms/weex/runtime/node-ops.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/node-ops'>;
+}
+declare module 'vue/src/platforms/weex/runtime/patch.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/patch'>;
+}
+declare module 'vue/src/platforms/weex/runtime/text-node.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/runtime/text-node'>;
+}
+declare module 'vue/src/platforms/weex/util/index.js' {
+  declare module.exports: $Exports<'vue/src/platforms/weex/util/index'>;
+}
+declare module 'vue/src/server/create-bundle-renderer.js' {
+  declare module.exports: $Exports<'vue/src/server/create-bundle-renderer'>;
+}
+declare module 'vue/src/server/create-bundle-runner.js' {
+  declare module.exports: $Exports<'vue/src/server/create-bundle-runner'>;
+}
+declare module 'vue/src/server/create-renderer.js' {
+  declare module.exports: $Exports<'vue/src/server/create-renderer'>;
+}
+declare module 'vue/src/server/render-context.js' {
+  declare module.exports: $Exports<'vue/src/server/render-context'>;
+}
+declare module 'vue/src/server/render-stream.js' {
+  declare module.exports: $Exports<'vue/src/server/render-stream'>;
+}
+declare module 'vue/src/server/render.js' {
+  declare module.exports: $Exports<'vue/src/server/render'>;
+}
+declare module 'vue/src/server/source-map-support.js' {
+  declare module.exports: $Exports<'vue/src/server/source-map-support'>;
+}
+declare module 'vue/src/server/write.js' {
+  declare module.exports: $Exports<'vue/src/server/write'>;
+}
+declare module 'vue/src/sfc/parser.js' {
+  declare module.exports: $Exports<'vue/src/sfc/parser'>;
+}
+declare module 'vue/src/shared/util.js' {
+  declare module.exports: $Exports<'vue/src/shared/util'>;
+}
diff --git a/flow-typed/npm/webdriver-client_vx.x.x.js b/flow-typed/npm/webdriver-client_vx.x.x.js
new file mode 100644
index 0000000..06f7c94
--- /dev/null
+++ b/flow-typed/npm/webdriver-client_vx.x.x.js
@@ -0,0 +1,129 @@
+// flow-typed signature: 7ac8cb2fe661c731f94f577832a05560
+// flow-typed version: <<STUB>>/webdriver-client_v~1.0.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'webdriver-client'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'webdriver-client' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'webdriver-client/lib/common/initDriver' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/desktop/chrome/index' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/desktop/electron/index' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/helper' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/android/index' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/android/login' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/android/native' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/android/webview' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/ios/index' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/ios/login' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/ios/native' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/mobile/ios/webview' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/lib/webdriver-client' {
+  declare module.exports: any;
+}
+
+declare module 'webdriver-client/test/webdriver-client.test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'webdriver-client/index' {
+  declare module.exports: $Exports<'webdriver-client'>;
+}
+declare module 'webdriver-client/index.js' {
+  declare module.exports: $Exports<'webdriver-client'>;
+}
+declare module 'webdriver-client/lib/common/initDriver.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/common/initDriver'>;
+}
+declare module 'webdriver-client/lib/desktop/chrome/index.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/desktop/chrome/index'>;
+}
+declare module 'webdriver-client/lib/desktop/electron/index.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/desktop/electron/index'>;
+}
+declare module 'webdriver-client/lib/helper.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/helper'>;
+}
+declare module 'webdriver-client/lib/mobile/android/index.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/android/index'>;
+}
+declare module 'webdriver-client/lib/mobile/android/login.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/android/login'>;
+}
+declare module 'webdriver-client/lib/mobile/android/native.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/android/native'>;
+}
+declare module 'webdriver-client/lib/mobile/android/webview.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/android/webview'>;
+}
+declare module 'webdriver-client/lib/mobile/ios/index.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/ios/index'>;
+}
+declare module 'webdriver-client/lib/mobile/ios/login.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/ios/login'>;
+}
+declare module 'webdriver-client/lib/mobile/ios/native.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/ios/native'>;
+}
+declare module 'webdriver-client/lib/mobile/ios/webview.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/mobile/ios/webview'>;
+}
+declare module 'webdriver-client/lib/webdriver-client.js' {
+  declare module.exports: $Exports<'webdriver-client/lib/webdriver-client'>;
+}
+declare module 'webdriver-client/test/webdriver-client.test.js' {
+  declare module.exports: $Exports<'webdriver-client/test/webdriver-client.test'>;
+}
diff --git a/flow-typed/npm/webpack_vx.x.x.js b/flow-typed/npm/webpack_vx.x.x.js
new file mode 100644
index 0000000..3d12a68
--- /dev/null
+++ b/flow-typed/npm/webpack_vx.x.x.js
@@ -0,0 +1,1523 @@
+// flow-typed signature: 8e146dea52794d287a37416ec3386c72
+// flow-typed version: <<STUB>>/webpack_v^1.13.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'webpack'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'webpack' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'webpack/bin/config-optimist' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/bin/convert-argv' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/bin/webpack' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/buildin/amd-define' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/buildin/amd-options' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/buildin/module' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/buildin/return-require' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/hot/dev-server' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/hot/log-apply-result' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/hot/only-dev-server' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/hot/poll' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/hot/signal' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/AbstractPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/AmdMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/APIPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ArrayMap' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/AsyncDependenciesBlock' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/AutomaticPrefetchPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/BannerPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/BasicEvaluatedExpression' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/CachePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/CaseSensitiveModulesWarning' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Chunk' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ChunkRenderError' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ChunkTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/CompatibilityPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Compilation' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Compiler' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ConcatSource' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ConstPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ContextModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ContextModuleFactory' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ContextReplacementPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/CriticalDependenciesWarning' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DefinePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DelegatedModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DelegatedModuleFactoryPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DelegatedPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDDefineDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDDefineDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireArrayDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireContextDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireDependenciesBlock' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireDependenciesBlockParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/AMDRequireItemDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/CommonJsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/CommonJsRequireContextDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/CommonJsRequireDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/CommonJsRequireDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ConstDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ContextDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ContextDependencyHelpers' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ContextDependencyTemplateAsId' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ContextDependencyTemplateAsRequireCall' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ContextElementDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/DelegatedSourceDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/DepBlockHelpers' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/DllEntryDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/getFunctionExpression' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LabeledExportsDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LabeledModuleDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LabeledModuleDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LabeledModulesPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LoaderDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LoaderPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LocalModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LocalModuleDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/LocalModulesHelpers' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ModuleDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ModuleDependencyTemplateAsId' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ModuleDependencyTemplateAsRequireId' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ModuleHotAcceptDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/ModuleHotDeclineDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/MultiEntryDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/NullDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/NullDependencyTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/PrefetchDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireContextDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireContextDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireContextPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireEnsureDependenciesBlock' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireEnsureDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireEnsureItemDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireEnsurePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireHeaderDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireIncludeDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireIncludeDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireIncludePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireResolveContextDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireResolveDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireResolveDependencyParserPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/RequireResolveHeaderDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/SingleEntryDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/TemplateArgumentDependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/dependencies/WebpackMissingModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DependenciesBlock' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DependenciesBlockVariable' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Dependency' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DllEntryPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DllModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DllModuleFactory' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DllPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/DllReferencePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EntryModuleNotFoundError' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EntryOptionPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EnvironmentPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EvalDevToolModulePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EvalDevToolModuleTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EvalSourceMapDevToolModuleTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/EvalSourceMapDevToolPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ExtendedAPIPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ExternalModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ExternalModuleFactoryPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ExternalsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/FunctionModulePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/FunctionModuleTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/HotModuleReplacement.runtime' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/HotModuleReplacementPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/HotUpdateChunkTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/IgnorePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpChunkTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpExportMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpHotUpdateChunkTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpMainTemplate.runtime' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/JsonpTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/LibManifestPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/LibraryTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/LoaderTargetPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MainTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MemoryOutputFileSystem' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Module' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleFilenameHelpers' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleNotFoundError' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleParseError' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleParserHelpers' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleReason' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ModuleTemplate' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MovedToPluginWarningPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MultiCompiler' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MultiEntryPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MultiModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/MultiModuleFactory' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NamedModulesPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NewWatchingPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeChunkTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeEnvironmentPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeHotUpdateChunkTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeMainTemplate.runtime' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeMainTemplateAsync.runtime' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeOutputFileSystem' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeSourcePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeTargetPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/NodeWatchFileSystem' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/node/OldNodeWatchFileSystem' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NodeStuffPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NoErrorsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NormalModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NormalModuleFactory' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NormalModuleReplacementPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/NullFactory' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/OldWatchingPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/AggressiveMergingPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/CommonsChunkPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/DedupePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/FlagIncludedChunksPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/LimitChunkCountPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/MergeDuplicateChunksPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/MinChunkSizePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/OccurenceOrderPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/OccurrenceOrderPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/RemoveEmptyChunksPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/RemoveParentModulesPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/optimize/UglifyJsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/OptionsApply' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/OriginalSource' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Parser' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/PrefetchPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ProgressPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ProvidePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/RawModule' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/RawSource' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/RecordIdsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/removeAndDo' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/RequestShortener' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/RequireJsStuffPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/ResolverPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/SetVarMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/SingleEntryPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Source' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/SourceMapDevToolModuleOptionsPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/SourceMapDevToolPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/SourceMapSource' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Stats' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/Template' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/TemplatedPathPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/UmdMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/UnsupportedFeatureWarning' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/WarnCaseSensitiveModulesPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/WatchIgnorePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/web/WebEnvironmentPlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/webpack' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/webpack.web' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/WebpackOptionsApply' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/WebpackOptionsDefaulter' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/webworker/WebWorkerChunkTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/webworker/WebWorkerMainTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/lib/webworker/WebWorkerTemplatePlugin' {
+  declare module.exports: any;
+}
+
+declare module 'webpack/web_modules/node-libs-browser' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'webpack/bin/config-optimist.js' {
+  declare module.exports: $Exports<'webpack/bin/config-optimist'>;
+}
+declare module 'webpack/bin/convert-argv.js' {
+  declare module.exports: $Exports<'webpack/bin/convert-argv'>;
+}
+declare module 'webpack/bin/webpack.js' {
+  declare module.exports: $Exports<'webpack/bin/webpack'>;
+}
+declare module 'webpack/buildin/amd-define.js' {
+  declare module.exports: $Exports<'webpack/buildin/amd-define'>;
+}
+declare module 'webpack/buildin/amd-options.js' {
+  declare module.exports: $Exports<'webpack/buildin/amd-options'>;
+}
+declare module 'webpack/buildin/module.js' {
+  declare module.exports: $Exports<'webpack/buildin/module'>;
+}
+declare module 'webpack/buildin/return-require.js' {
+  declare module.exports: $Exports<'webpack/buildin/return-require'>;
+}
+declare module 'webpack/hot/dev-server.js' {
+  declare module.exports: $Exports<'webpack/hot/dev-server'>;
+}
+declare module 'webpack/hot/log-apply-result.js' {
+  declare module.exports: $Exports<'webpack/hot/log-apply-result'>;
+}
+declare module 'webpack/hot/only-dev-server.js' {
+  declare module.exports: $Exports<'webpack/hot/only-dev-server'>;
+}
+declare module 'webpack/hot/poll.js' {
+  declare module.exports: $Exports<'webpack/hot/poll'>;
+}
+declare module 'webpack/hot/signal.js' {
+  declare module.exports: $Exports<'webpack/hot/signal'>;
+}
+declare module 'webpack/lib/AbstractPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/AbstractPlugin'>;
+}
+declare module 'webpack/lib/AmdMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/AmdMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/APIPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/APIPlugin'>;
+}
+declare module 'webpack/lib/ArrayMap.js' {
+  declare module.exports: $Exports<'webpack/lib/ArrayMap'>;
+}
+declare module 'webpack/lib/AsyncDependenciesBlock.js' {
+  declare module.exports: $Exports<'webpack/lib/AsyncDependenciesBlock'>;
+}
+declare module 'webpack/lib/AutomaticPrefetchPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/AutomaticPrefetchPlugin'>;
+}
+declare module 'webpack/lib/BannerPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/BannerPlugin'>;
+}
+declare module 'webpack/lib/BasicEvaluatedExpression.js' {
+  declare module.exports: $Exports<'webpack/lib/BasicEvaluatedExpression'>;
+}
+declare module 'webpack/lib/CachePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/CachePlugin'>;
+}
+declare module 'webpack/lib/CaseSensitiveModulesWarning.js' {
+  declare module.exports: $Exports<'webpack/lib/CaseSensitiveModulesWarning'>;
+}
+declare module 'webpack/lib/Chunk.js' {
+  declare module.exports: $Exports<'webpack/lib/Chunk'>;
+}
+declare module 'webpack/lib/ChunkRenderError.js' {
+  declare module.exports: $Exports<'webpack/lib/ChunkRenderError'>;
+}
+declare module 'webpack/lib/ChunkTemplate.js' {
+  declare module.exports: $Exports<'webpack/lib/ChunkTemplate'>;
+}
+declare module 'webpack/lib/CompatibilityPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/CompatibilityPlugin'>;
+}
+declare module 'webpack/lib/Compilation.js' {
+  declare module.exports: $Exports<'webpack/lib/Compilation'>;
+}
+declare module 'webpack/lib/Compiler.js' {
+  declare module.exports: $Exports<'webpack/lib/Compiler'>;
+}
+declare module 'webpack/lib/ConcatSource.js' {
+  declare module.exports: $Exports<'webpack/lib/ConcatSource'>;
+}
+declare module 'webpack/lib/ConstPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ConstPlugin'>;
+}
+declare module 'webpack/lib/ContextModule.js' {
+  declare module.exports: $Exports<'webpack/lib/ContextModule'>;
+}
+declare module 'webpack/lib/ContextModuleFactory.js' {
+  declare module.exports: $Exports<'webpack/lib/ContextModuleFactory'>;
+}
+declare module 'webpack/lib/ContextReplacementPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ContextReplacementPlugin'>;
+}
+declare module 'webpack/lib/CriticalDependenciesWarning.js' {
+  declare module.exports: $Exports<'webpack/lib/CriticalDependenciesWarning'>;
+}
+declare module 'webpack/lib/DefinePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DefinePlugin'>;
+}
+declare module 'webpack/lib/DelegatedModule.js' {
+  declare module.exports: $Exports<'webpack/lib/DelegatedModule'>;
+}
+declare module 'webpack/lib/DelegatedModuleFactoryPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DelegatedModuleFactoryPlugin'>;
+}
+declare module 'webpack/lib/DelegatedPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DelegatedPlugin'>;
+}
+declare module 'webpack/lib/dependencies/AMDDefineDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDDefineDependency'>;
+}
+declare module 'webpack/lib/dependencies/AMDDefineDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDDefineDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/AMDPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDPlugin'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireArrayDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireArrayDependency'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireContextDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireContextDependency'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireDependenciesBlock.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireDependenciesBlock'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireDependenciesBlockParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireDependency'>;
+}
+declare module 'webpack/lib/dependencies/AMDRequireItemDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/AMDRequireItemDependency'>;
+}
+declare module 'webpack/lib/dependencies/CommonJsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/CommonJsPlugin'>;
+}
+declare module 'webpack/lib/dependencies/CommonJsRequireContextDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/CommonJsRequireContextDependency'>;
+}
+declare module 'webpack/lib/dependencies/CommonJsRequireDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/CommonJsRequireDependency'>;
+}
+declare module 'webpack/lib/dependencies/CommonJsRequireDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/CommonJsRequireDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/ConstDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ConstDependency'>;
+}
+declare module 'webpack/lib/dependencies/ContextDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ContextDependency'>;
+}
+declare module 'webpack/lib/dependencies/ContextDependencyHelpers.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ContextDependencyHelpers'>;
+}
+declare module 'webpack/lib/dependencies/ContextDependencyTemplateAsId.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ContextDependencyTemplateAsId'>;
+}
+declare module 'webpack/lib/dependencies/ContextDependencyTemplateAsRequireCall.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ContextDependencyTemplateAsRequireCall'>;
+}
+declare module 'webpack/lib/dependencies/ContextElementDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ContextElementDependency'>;
+}
+declare module 'webpack/lib/dependencies/DelegatedSourceDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/DelegatedSourceDependency'>;
+}
+declare module 'webpack/lib/dependencies/DepBlockHelpers.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/DepBlockHelpers'>;
+}
+declare module 'webpack/lib/dependencies/DllEntryDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/DllEntryDependency'>;
+}
+declare module 'webpack/lib/dependencies/getFunctionExpression.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/getFunctionExpression'>;
+}
+declare module 'webpack/lib/dependencies/LabeledExportsDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LabeledExportsDependency'>;
+}
+declare module 'webpack/lib/dependencies/LabeledModuleDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LabeledModuleDependency'>;
+}
+declare module 'webpack/lib/dependencies/LabeledModuleDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LabeledModuleDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/LabeledModulesPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LabeledModulesPlugin'>;
+}
+declare module 'webpack/lib/dependencies/LoaderDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LoaderDependency'>;
+}
+declare module 'webpack/lib/dependencies/LoaderPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LoaderPlugin'>;
+}
+declare module 'webpack/lib/dependencies/LocalModule.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LocalModule'>;
+}
+declare module 'webpack/lib/dependencies/LocalModuleDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LocalModuleDependency'>;
+}
+declare module 'webpack/lib/dependencies/LocalModulesHelpers.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/LocalModulesHelpers'>;
+}
+declare module 'webpack/lib/dependencies/ModuleDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ModuleDependency'>;
+}
+declare module 'webpack/lib/dependencies/ModuleDependencyTemplateAsId.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ModuleDependencyTemplateAsId'>;
+}
+declare module 'webpack/lib/dependencies/ModuleDependencyTemplateAsRequireId.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ModuleDependencyTemplateAsRequireId'>;
+}
+declare module 'webpack/lib/dependencies/ModuleHotAcceptDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ModuleHotAcceptDependency'>;
+}
+declare module 'webpack/lib/dependencies/ModuleHotDeclineDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/ModuleHotDeclineDependency'>;
+}
+declare module 'webpack/lib/dependencies/MultiEntryDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/MultiEntryDependency'>;
+}
+declare module 'webpack/lib/dependencies/NullDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/NullDependency'>;
+}
+declare module 'webpack/lib/dependencies/NullDependencyTemplate.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/NullDependencyTemplate'>;
+}
+declare module 'webpack/lib/dependencies/PrefetchDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/PrefetchDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireContextDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireContextDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireContextDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireContextDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireContextPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireContextPlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireEnsureDependenciesBlock.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireEnsureDependenciesBlock'>;
+}
+declare module 'webpack/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireEnsureDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireEnsureDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireEnsureItemDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireEnsureItemDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireEnsurePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireEnsurePlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireHeaderDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireHeaderDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireIncludeDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireIncludeDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireIncludeDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireIncludeDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireIncludePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireIncludePlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireResolveContextDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireResolveContextDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireResolveDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireResolveDependency'>;
+}
+declare module 'webpack/lib/dependencies/RequireResolveDependencyParserPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireResolveDependencyParserPlugin'>;
+}
+declare module 'webpack/lib/dependencies/RequireResolveHeaderDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/RequireResolveHeaderDependency'>;
+}
+declare module 'webpack/lib/dependencies/SingleEntryDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/SingleEntryDependency'>;
+}
+declare module 'webpack/lib/dependencies/TemplateArgumentDependency.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/TemplateArgumentDependency'>;
+}
+declare module 'webpack/lib/dependencies/WebpackMissingModule.js' {
+  declare module.exports: $Exports<'webpack/lib/dependencies/WebpackMissingModule'>;
+}
+declare module 'webpack/lib/DependenciesBlock.js' {
+  declare module.exports: $Exports<'webpack/lib/DependenciesBlock'>;
+}
+declare module 'webpack/lib/DependenciesBlockVariable.js' {
+  declare module.exports: $Exports<'webpack/lib/DependenciesBlockVariable'>;
+}
+declare module 'webpack/lib/Dependency.js' {
+  declare module.exports: $Exports<'webpack/lib/Dependency'>;
+}
+declare module 'webpack/lib/DllEntryPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DllEntryPlugin'>;
+}
+declare module 'webpack/lib/DllModule.js' {
+  declare module.exports: $Exports<'webpack/lib/DllModule'>;
+}
+declare module 'webpack/lib/DllModuleFactory.js' {
+  declare module.exports: $Exports<'webpack/lib/DllModuleFactory'>;
+}
+declare module 'webpack/lib/DllPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DllPlugin'>;
+}
+declare module 'webpack/lib/DllReferencePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/DllReferencePlugin'>;
+}
+declare module 'webpack/lib/EntryModuleNotFoundError.js' {
+  declare module.exports: $Exports<'webpack/lib/EntryModuleNotFoundError'>;
+}
+declare module 'webpack/lib/EntryOptionPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EntryOptionPlugin'>;
+}
+declare module 'webpack/lib/EnvironmentPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EnvironmentPlugin'>;
+}
+declare module 'webpack/lib/EvalDevToolModulePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EvalDevToolModulePlugin'>;
+}
+declare module 'webpack/lib/EvalDevToolModuleTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EvalDevToolModuleTemplatePlugin'>;
+}
+declare module 'webpack/lib/EvalSourceMapDevToolModuleTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EvalSourceMapDevToolModuleTemplatePlugin'>;
+}
+declare module 'webpack/lib/EvalSourceMapDevToolPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/EvalSourceMapDevToolPlugin'>;
+}
+declare module 'webpack/lib/ExtendedAPIPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ExtendedAPIPlugin'>;
+}
+declare module 'webpack/lib/ExternalModule.js' {
+  declare module.exports: $Exports<'webpack/lib/ExternalModule'>;
+}
+declare module 'webpack/lib/ExternalModuleFactoryPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ExternalModuleFactoryPlugin'>;
+}
+declare module 'webpack/lib/ExternalsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ExternalsPlugin'>;
+}
+declare module 'webpack/lib/FunctionModulePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/FunctionModulePlugin'>;
+}
+declare module 'webpack/lib/FunctionModuleTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/FunctionModuleTemplatePlugin'>;
+}
+declare module 'webpack/lib/HotModuleReplacement.runtime.js' {
+  declare module.exports: $Exports<'webpack/lib/HotModuleReplacement.runtime'>;
+}
+declare module 'webpack/lib/HotModuleReplacementPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/HotModuleReplacementPlugin'>;
+}
+declare module 'webpack/lib/HotUpdateChunkTemplate.js' {
+  declare module.exports: $Exports<'webpack/lib/HotUpdateChunkTemplate'>;
+}
+declare module 'webpack/lib/IgnorePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/IgnorePlugin'>;
+}
+declare module 'webpack/lib/JsonpChunkTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpChunkTemplatePlugin'>;
+}
+declare module 'webpack/lib/JsonpExportMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpExportMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/JsonpHotUpdateChunkTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpHotUpdateChunkTemplatePlugin'>;
+}
+declare module 'webpack/lib/JsonpMainTemplate.runtime.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpMainTemplate.runtime'>;
+}
+declare module 'webpack/lib/JsonpMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/JsonpTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/JsonpTemplatePlugin'>;
+}
+declare module 'webpack/lib/LibManifestPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/LibManifestPlugin'>;
+}
+declare module 'webpack/lib/LibraryTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/LibraryTemplatePlugin'>;
+}
+declare module 'webpack/lib/LoaderTargetPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/LoaderTargetPlugin'>;
+}
+declare module 'webpack/lib/MainTemplate.js' {
+  declare module.exports: $Exports<'webpack/lib/MainTemplate'>;
+}
+declare module 'webpack/lib/MemoryOutputFileSystem.js' {
+  declare module.exports: $Exports<'webpack/lib/MemoryOutputFileSystem'>;
+}
+declare module 'webpack/lib/Module.js' {
+  declare module.exports: $Exports<'webpack/lib/Module'>;
+}
+declare module 'webpack/lib/ModuleFilenameHelpers.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleFilenameHelpers'>;
+}
+declare module 'webpack/lib/ModuleNotFoundError.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleNotFoundError'>;
+}
+declare module 'webpack/lib/ModuleParseError.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleParseError'>;
+}
+declare module 'webpack/lib/ModuleParserHelpers.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleParserHelpers'>;
+}
+declare module 'webpack/lib/ModuleReason.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleReason'>;
+}
+declare module 'webpack/lib/ModuleTemplate.js' {
+  declare module.exports: $Exports<'webpack/lib/ModuleTemplate'>;
+}
+declare module 'webpack/lib/MovedToPluginWarningPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/MovedToPluginWarningPlugin'>;
+}
+declare module 'webpack/lib/MultiCompiler.js' {
+  declare module.exports: $Exports<'webpack/lib/MultiCompiler'>;
+}
+declare module 'webpack/lib/MultiEntryPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/MultiEntryPlugin'>;
+}
+declare module 'webpack/lib/MultiModule.js' {
+  declare module.exports: $Exports<'webpack/lib/MultiModule'>;
+}
+declare module 'webpack/lib/MultiModuleFactory.js' {
+  declare module.exports: $Exports<'webpack/lib/MultiModuleFactory'>;
+}
+declare module 'webpack/lib/NamedModulesPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/NamedModulesPlugin'>;
+}
+declare module 'webpack/lib/NewWatchingPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/NewWatchingPlugin'>;
+}
+declare module 'webpack/lib/node/NodeChunkTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeChunkTemplatePlugin'>;
+}
+declare module 'webpack/lib/node/NodeEnvironmentPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeEnvironmentPlugin'>;
+}
+declare module 'webpack/lib/node/NodeHotUpdateChunkTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeHotUpdateChunkTemplatePlugin'>;
+}
+declare module 'webpack/lib/node/NodeMainTemplate.runtime.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeMainTemplate.runtime'>;
+}
+declare module 'webpack/lib/node/NodeMainTemplateAsync.runtime.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeMainTemplateAsync.runtime'>;
+}
+declare module 'webpack/lib/node/NodeMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/node/NodeOutputFileSystem.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeOutputFileSystem'>;
+}
+declare module 'webpack/lib/node/NodeSourcePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeSourcePlugin'>;
+}
+declare module 'webpack/lib/node/NodeTargetPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeTargetPlugin'>;
+}
+declare module 'webpack/lib/node/NodeTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeTemplatePlugin'>;
+}
+declare module 'webpack/lib/node/NodeWatchFileSystem.js' {
+  declare module.exports: $Exports<'webpack/lib/node/NodeWatchFileSystem'>;
+}
+declare module 'webpack/lib/node/OldNodeWatchFileSystem.js' {
+  declare module.exports: $Exports<'webpack/lib/node/OldNodeWatchFileSystem'>;
+}
+declare module 'webpack/lib/NodeStuffPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/NodeStuffPlugin'>;
+}
+declare module 'webpack/lib/NoErrorsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/NoErrorsPlugin'>;
+}
+declare module 'webpack/lib/NormalModule.js' {
+  declare module.exports: $Exports<'webpack/lib/NormalModule'>;
+}
+declare module 'webpack/lib/NormalModuleFactory.js' {
+  declare module.exports: $Exports<'webpack/lib/NormalModuleFactory'>;
+}
+declare module 'webpack/lib/NormalModuleReplacementPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/NormalModuleReplacementPlugin'>;
+}
+declare module 'webpack/lib/NullFactory.js' {
+  declare module.exports: $Exports<'webpack/lib/NullFactory'>;
+}
+declare module 'webpack/lib/OldWatchingPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/OldWatchingPlugin'>;
+}
+declare module 'webpack/lib/optimize/AggressiveMergingPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/AggressiveMergingPlugin'>;
+}
+declare module 'webpack/lib/optimize/CommonsChunkPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/CommonsChunkPlugin'>;
+}
+declare module 'webpack/lib/optimize/DedupePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/DedupePlugin'>;
+}
+declare module 'webpack/lib/optimize/FlagIncludedChunksPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/FlagIncludedChunksPlugin'>;
+}
+declare module 'webpack/lib/optimize/LimitChunkCountPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/LimitChunkCountPlugin'>;
+}
+declare module 'webpack/lib/optimize/MergeDuplicateChunksPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/MergeDuplicateChunksPlugin'>;
+}
+declare module 'webpack/lib/optimize/MinChunkSizePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/MinChunkSizePlugin'>;
+}
+declare module 'webpack/lib/optimize/OccurenceOrderPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/OccurenceOrderPlugin'>;
+}
+declare module 'webpack/lib/optimize/OccurrenceOrderPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/OccurrenceOrderPlugin'>;
+}
+declare module 'webpack/lib/optimize/RemoveEmptyChunksPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/RemoveEmptyChunksPlugin'>;
+}
+declare module 'webpack/lib/optimize/RemoveParentModulesPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/RemoveParentModulesPlugin'>;
+}
+declare module 'webpack/lib/optimize/UglifyJsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/optimize/UglifyJsPlugin'>;
+}
+declare module 'webpack/lib/OptionsApply.js' {
+  declare module.exports: $Exports<'webpack/lib/OptionsApply'>;
+}
+declare module 'webpack/lib/OriginalSource.js' {
+  declare module.exports: $Exports<'webpack/lib/OriginalSource'>;
+}
+declare module 'webpack/lib/Parser.js' {
+  declare module.exports: $Exports<'webpack/lib/Parser'>;
+}
+declare module 'webpack/lib/PrefetchPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/PrefetchPlugin'>;
+}
+declare module 'webpack/lib/ProgressPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ProgressPlugin'>;
+}
+declare module 'webpack/lib/ProvidePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ProvidePlugin'>;
+}
+declare module 'webpack/lib/RawModule.js' {
+  declare module.exports: $Exports<'webpack/lib/RawModule'>;
+}
+declare module 'webpack/lib/RawSource.js' {
+  declare module.exports: $Exports<'webpack/lib/RawSource'>;
+}
+declare module 'webpack/lib/RecordIdsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/RecordIdsPlugin'>;
+}
+declare module 'webpack/lib/removeAndDo.js' {
+  declare module.exports: $Exports<'webpack/lib/removeAndDo'>;
+}
+declare module 'webpack/lib/RequestShortener.js' {
+  declare module.exports: $Exports<'webpack/lib/RequestShortener'>;
+}
+declare module 'webpack/lib/RequireJsStuffPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/RequireJsStuffPlugin'>;
+}
+declare module 'webpack/lib/ResolverPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/ResolverPlugin'>;
+}
+declare module 'webpack/lib/SetVarMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/SetVarMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/SingleEntryPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/SingleEntryPlugin'>;
+}
+declare module 'webpack/lib/Source.js' {
+  declare module.exports: $Exports<'webpack/lib/Source'>;
+}
+declare module 'webpack/lib/SourceMapDevToolModuleOptionsPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/SourceMapDevToolModuleOptionsPlugin'>;
+}
+declare module 'webpack/lib/SourceMapDevToolPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/SourceMapDevToolPlugin'>;
+}
+declare module 'webpack/lib/SourceMapSource.js' {
+  declare module.exports: $Exports<'webpack/lib/SourceMapSource'>;
+}
+declare module 'webpack/lib/Stats.js' {
+  declare module.exports: $Exports<'webpack/lib/Stats'>;
+}
+declare module 'webpack/lib/Template.js' {
+  declare module.exports: $Exports<'webpack/lib/Template'>;
+}
+declare module 'webpack/lib/TemplatedPathPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/TemplatedPathPlugin'>;
+}
+declare module 'webpack/lib/UmdMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/UmdMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/UnsupportedFeatureWarning.js' {
+  declare module.exports: $Exports<'webpack/lib/UnsupportedFeatureWarning'>;
+}
+declare module 'webpack/lib/WarnCaseSensitiveModulesPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/WarnCaseSensitiveModulesPlugin'>;
+}
+declare module 'webpack/lib/WatchIgnorePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/WatchIgnorePlugin'>;
+}
+declare module 'webpack/lib/web/WebEnvironmentPlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/web/WebEnvironmentPlugin'>;
+}
+declare module 'webpack/lib/webpack.js' {
+  declare module.exports: $Exports<'webpack/lib/webpack'>;
+}
+declare module 'webpack/lib/webpack.web.js' {
+  declare module.exports: $Exports<'webpack/lib/webpack.web'>;
+}
+declare module 'webpack/lib/WebpackOptionsApply.js' {
+  declare module.exports: $Exports<'webpack/lib/WebpackOptionsApply'>;
+}
+declare module 'webpack/lib/WebpackOptionsDefaulter.js' {
+  declare module.exports: $Exports<'webpack/lib/WebpackOptionsDefaulter'>;
+}
+declare module 'webpack/lib/webworker/WebWorkerChunkTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/webworker/WebWorkerChunkTemplatePlugin'>;
+}
+declare module 'webpack/lib/webworker/WebWorkerMainTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/webworker/WebWorkerMainTemplatePlugin'>;
+}
+declare module 'webpack/lib/webworker/WebWorkerTemplatePlugin.js' {
+  declare module.exports: $Exports<'webpack/lib/webworker/WebWorkerTemplatePlugin'>;
+}
+declare module 'webpack/web_modules/node-libs-browser.js' {
+  declare module.exports: $Exports<'webpack/web_modules/node-libs-browser'>;
+}
diff --git a/flow-typed/npm/weex-components_vx.x.x.js b/flow-typed/npm/weex-components_vx.x.x.js
new file mode 100644
index 0000000..b4615a5
--- /dev/null
+++ b/flow-typed/npm/weex-components_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: 0abd8b99a8e00c7edae8e51805dfb2ab
+// flow-typed version: <<STUB>>/weex-components_v^0.2.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-components'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-components' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'weex-components/index' {
+  declare module.exports: $Exports<'weex-components'>;
+}
+declare module 'weex-components/index.js' {
+  declare module.exports: $Exports<'weex-components'>;
+}
diff --git a/flow-typed/npm/weex-loader_vx.x.x.js b/flow-typed/npm/weex-loader_vx.x.x.js
new file mode 100644
index 0000000..6289da2
--- /dev/null
+++ b/flow-typed/npm/weex-loader_vx.x.x.js
@@ -0,0 +1,108 @@
+// flow-typed signature: 5a371aa0242b941a1b424a58cfca1821
+// flow-typed version: <<STUB>>/weex-loader_v^0.4.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-loader'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-loader' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-loader/lib/config' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/element' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/extract' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/json' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/legacy' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/loader' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/parser' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/script' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/style' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/template' {
+  declare module.exports: any;
+}
+
+declare module 'weex-loader/lib/util' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-loader/index' {
+  declare module.exports: $Exports<'weex-loader'>;
+}
+declare module 'weex-loader/index.js' {
+  declare module.exports: $Exports<'weex-loader'>;
+}
+declare module 'weex-loader/lib/config.js' {
+  declare module.exports: $Exports<'weex-loader/lib/config'>;
+}
+declare module 'weex-loader/lib/element.js' {
+  declare module.exports: $Exports<'weex-loader/lib/element'>;
+}
+declare module 'weex-loader/lib/extract.js' {
+  declare module.exports: $Exports<'weex-loader/lib/extract'>;
+}
+declare module 'weex-loader/lib/json.js' {
+  declare module.exports: $Exports<'weex-loader/lib/json'>;
+}
+declare module 'weex-loader/lib/legacy.js' {
+  declare module.exports: $Exports<'weex-loader/lib/legacy'>;
+}
+declare module 'weex-loader/lib/loader.js' {
+  declare module.exports: $Exports<'weex-loader/lib/loader'>;
+}
+declare module 'weex-loader/lib/parser.js' {
+  declare module.exports: $Exports<'weex-loader/lib/parser'>;
+}
+declare module 'weex-loader/lib/script.js' {
+  declare module.exports: $Exports<'weex-loader/lib/script'>;
+}
+declare module 'weex-loader/lib/style.js' {
+  declare module.exports: $Exports<'weex-loader/lib/style'>;
+}
+declare module 'weex-loader/lib/template.js' {
+  declare module.exports: $Exports<'weex-loader/lib/template'>;
+}
+declare module 'weex-loader/lib/util.js' {
+  declare module.exports: $Exports<'weex-loader/lib/util'>;
+}
diff --git a/flow-typed/npm/weex-picker_vx.x.x.js b/flow-typed/npm/weex-picker_vx.x.x.js
new file mode 100644
index 0000000..c608439
--- /dev/null
+++ b/flow-typed/npm/weex-picker_vx.x.x.js
@@ -0,0 +1,81 @@
+// flow-typed signature: 3483cf46c238a8ded0b47931a93cec11
+// flow-typed version: <<STUB>>/weex-picker_v^0.1.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-picker'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-picker' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-picker/dist/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/examples/build/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/examples/build/main' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/rollup.config' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/src/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/src/Picker' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/src/TimePicker' {
+  declare module.exports: any;
+}
+
+declare module 'weex-picker/webpack.examples.config' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-picker/dist/index.js' {
+  declare module.exports: $Exports<'weex-picker/dist/index'>;
+}
+declare module 'weex-picker/examples/build/index.js' {
+  declare module.exports: $Exports<'weex-picker/examples/build/index'>;
+}
+declare module 'weex-picker/examples/build/main.js' {
+  declare module.exports: $Exports<'weex-picker/examples/build/main'>;
+}
+declare module 'weex-picker/rollup.config.js' {
+  declare module.exports: $Exports<'weex-picker/rollup.config'>;
+}
+declare module 'weex-picker/src/index.js' {
+  declare module.exports: $Exports<'weex-picker/src/index'>;
+}
+declare module 'weex-picker/src/Picker.js' {
+  declare module.exports: $Exports<'weex-picker/src/Picker'>;
+}
+declare module 'weex-picker/src/TimePicker.js' {
+  declare module.exports: $Exports<'weex-picker/src/TimePicker'>;
+}
+declare module 'weex-picker/webpack.examples.config.js' {
+  declare module.exports: $Exports<'weex-picker/webpack.examples.config'>;
+}
diff --git a/flow-typed/npm/weex-rax-framework_vx.x.x.js b/flow-typed/npm/weex-rax-framework_vx.x.x.js
new file mode 100644
index 0000000..62ca293
--- /dev/null
+++ b/flow-typed/npm/weex-rax-framework_vx.x.x.js
@@ -0,0 +1,165 @@
+// flow-typed signature: 4392dc560809ad144be63641bda4cc97
+// flow-typed version: <<STUB>>/weex-rax-framework_v0.1.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-rax-framework'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-rax-framework' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-rax-framework/dist/framework.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/builtin' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/define.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/downgrade.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/emitter' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/fetch.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/require.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/semver' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/lib/timer.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/__tests__/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/builtin' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/define.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/downgrade.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/emitter' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/fetch.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/require.weex' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/semver' {
+  declare module.exports: any;
+}
+
+declare module 'weex-rax-framework/src/timer.weex' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-rax-framework/dist/framework.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/dist/framework.weex'>;
+}
+declare module 'weex-rax-framework/lib/builtin.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/builtin'>;
+}
+declare module 'weex-rax-framework/lib/define.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/define.weex'>;
+}
+declare module 'weex-rax-framework/lib/downgrade.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/downgrade.weex'>;
+}
+declare module 'weex-rax-framework/lib/emitter.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/emitter'>;
+}
+declare module 'weex-rax-framework/lib/fetch.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/fetch.weex'>;
+}
+declare module 'weex-rax-framework/lib/index.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/index'>;
+}
+declare module 'weex-rax-framework/lib/require.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/require.weex'>;
+}
+declare module 'weex-rax-framework/lib/semver.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/semver'>;
+}
+declare module 'weex-rax-framework/lib/timer.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/lib/timer.weex'>;
+}
+declare module 'weex-rax-framework/src/__tests__/index.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/__tests__/index'>;
+}
+declare module 'weex-rax-framework/src/builtin.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/builtin'>;
+}
+declare module 'weex-rax-framework/src/define.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/define.weex'>;
+}
+declare module 'weex-rax-framework/src/downgrade.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/downgrade.weex'>;
+}
+declare module 'weex-rax-framework/src/emitter.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/emitter'>;
+}
+declare module 'weex-rax-framework/src/fetch.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/fetch.weex'>;
+}
+declare module 'weex-rax-framework/src/index.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/index'>;
+}
+declare module 'weex-rax-framework/src/require.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/require.weex'>;
+}
+declare module 'weex-rax-framework/src/semver.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/semver'>;
+}
+declare module 'weex-rax-framework/src/timer.weex.js' {
+  declare module.exports: $Exports<'weex-rax-framework/src/timer.weex'>;
+}
diff --git a/flow-typed/npm/weex-styler_vx.x.x.js b/flow-typed/npm/weex-styler_vx.x.x.js
new file mode 100644
index 0000000..aa35de2
--- /dev/null
+++ b/flow-typed/npm/weex-styler_vx.x.x.js
@@ -0,0 +1,66 @@
+// flow-typed signature: 79823ba3c787ac106412b241663bcbe4
+// flow-typed version: <<STUB>>/weex-styler_v0.1.9/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-styler'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-styler' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-styler/gulpfile' {
+  declare module.exports: any;
+}
+
+declare module 'weex-styler/lib/util' {
+  declare module.exports: any;
+}
+
+declare module 'weex-styler/lib/validator' {
+  declare module.exports: any;
+}
+
+declare module 'weex-styler/test/parse' {
+  declare module.exports: any;
+}
+
+declare module 'weex-styler/test/validate' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-styler/gulpfile.js' {
+  declare module.exports: $Exports<'weex-styler/gulpfile'>;
+}
+declare module 'weex-styler/index' {
+  declare module.exports: $Exports<'weex-styler'>;
+}
+declare module 'weex-styler/index.js' {
+  declare module.exports: $Exports<'weex-styler'>;
+}
+declare module 'weex-styler/lib/util.js' {
+  declare module.exports: $Exports<'weex-styler/lib/util'>;
+}
+declare module 'weex-styler/lib/validator.js' {
+  declare module.exports: $Exports<'weex-styler/lib/validator'>;
+}
+declare module 'weex-styler/test/parse.js' {
+  declare module.exports: $Exports<'weex-styler/test/parse'>;
+}
+declare module 'weex-styler/test/validate.js' {
+  declare module.exports: $Exports<'weex-styler/test/validate'>;
+}
diff --git a/flow-typed/npm/weex-vdom-tester_vx.x.x.js b/flow-typed/npm/weex-vdom-tester_vx.x.x.js
new file mode 100644
index 0000000..791c4fc
--- /dev/null
+++ b/flow-typed/npm/weex-vdom-tester_vx.x.x.js
@@ -0,0 +1,108 @@
+// flow-typed signature: f905b3d333ecfc2f63f26be6398f5726
+// flow-typed version: <<STUB>>/weex-vdom-tester_v^0.2.0/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-vdom-tester'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-vdom-tester' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-vdom-tester/lib/document' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/env/default' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/instance' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/dom' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/index' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/modal' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/storage' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/stream' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/modules/timer' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/runtime' {
+  declare module.exports: any;
+}
+
+declare module 'weex-vdom-tester/lib/util' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-vdom-tester/index' {
+  declare module.exports: $Exports<'weex-vdom-tester'>;
+}
+declare module 'weex-vdom-tester/index.js' {
+  declare module.exports: $Exports<'weex-vdom-tester'>;
+}
+declare module 'weex-vdom-tester/lib/document.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/document'>;
+}
+declare module 'weex-vdom-tester/lib/env/default.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/env/default'>;
+}
+declare module 'weex-vdom-tester/lib/instance.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/instance'>;
+}
+declare module 'weex-vdom-tester/lib/modules/dom.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/dom'>;
+}
+declare module 'weex-vdom-tester/lib/modules/index.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/index'>;
+}
+declare module 'weex-vdom-tester/lib/modules/modal.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/modal'>;
+}
+declare module 'weex-vdom-tester/lib/modules/storage.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/storage'>;
+}
+declare module 'weex-vdom-tester/lib/modules/stream.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/stream'>;
+}
+declare module 'weex-vdom-tester/lib/modules/timer.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/modules/timer'>;
+}
+declare module 'weex-vdom-tester/lib/runtime.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/runtime'>;
+}
+declare module 'weex-vdom-tester/lib/util.js' {
+  declare module.exports: $Exports<'weex-vdom-tester/lib/util'>;
+}
diff --git a/flow-typed/npm/weex-vue-framework_vx.x.x.js b/flow-typed/npm/weex-vue-framework_vx.x.x.js
new file mode 100644
index 0000000..2ce63fe
--- /dev/null
+++ b/flow-typed/npm/weex-vue-framework_vx.x.x.js
@@ -0,0 +1,33 @@
+// flow-typed signature: 0edb1cf34a48fa865c4438f2e1545b18
+// flow-typed version: <<STUB>>/weex-vue-framework_v2.2.1-weex.1/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-vue-framework'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-vue-framework' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+
+
+// Filename aliases
+declare module 'weex-vue-framework/index' {
+  declare module.exports: $Exports<'weex-vue-framework'>;
+}
+declare module 'weex-vue-framework/index.js' {
+  declare module.exports: $Exports<'weex-vue-framework'>;
+}
diff --git a/flow-typed/npm/weex-wd_vx.x.x.js b/flow-typed/npm/weex-wd_vx.x.x.js
new file mode 100644
index 0000000..f6b109b
--- /dev/null
+++ b/flow-typed/npm/weex-wd_vx.x.x.js
@@ -0,0 +1,38 @@
+// flow-typed signature: 8dc478a9fcb63f6a98329f141880527e
+// flow-typed version: <<STUB>>/weex-wd_v^1.0.14/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'weex-wd'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'weex-wd' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'weex-wd/test/index' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'weex-wd/index' {
+  declare module.exports: $Exports<'weex-wd'>;
+}
+declare module 'weex-wd/index.js' {
+  declare module.exports: $Exports<'weex-wd'>;
+}
+declare module 'weex-wd/test/index.js' {
+  declare module.exports: $Exports<'weex-wd/test/index'>;
+}
diff --git a/flow-typed/npm/wwp_vx.x.x.js b/flow-typed/npm/wwp_vx.x.x.js
new file mode 100644
index 0000000..46487f3
--- /dev/null
+++ b/flow-typed/npm/wwp_vx.x.x.js
@@ -0,0 +1,39 @@
+// flow-typed signature: bb6805e77c077ed3ae6a0e2af1b8ea56
+// flow-typed version: <<STUB>>/wwp_v^0.3.5/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'wwp'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'wwp' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'wwp/lib/index' {
+  declare module.exports: any;
+}
+
+declare module 'wwp/lib/log' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'wwp/lib/index.js' {
+  declare module.exports: $Exports<'wwp/lib/index'>;
+}
+declare module 'wwp/lib/log.js' {
+  declare module.exports: $Exports<'wwp/lib/log'>;
+}
diff --git a/flow-typed/npm/xml2map_vx.x.x.js b/flow-typed/npm/xml2map_vx.x.x.js
new file mode 100644
index 0000000..c663a82
--- /dev/null
+++ b/flow-typed/npm/xml2map_vx.x.x.js
@@ -0,0 +1,45 @@
+// flow-typed signature: 75b2ed78c4960551e737e2f3c49b68b2
+// flow-typed version: <<STUB>>/xml2map_v^1.0.2/flow_v0.42.0
+
+/**
+ * This is an autogenerated libdef stub for:
+ *
+ *   'xml2map'
+ *
+ * Fill this stub out by replacing all the `any` types.
+ *
+ * Once filled out, we encourage you to share your work with the 
+ * community by sending a pull request to: 
+ * https://github.com/flowtype/flow-typed
+ */
+
+declare module 'xml2map' {
+  declare module.exports: any;
+}
+
+/**
+ * We include stubs for each file inside this npm package in case you need to
+ * require those files directly. Feel free to delete any files that aren't
+ * needed.
+ */
+declare module 'xml2map/lib/xml2map' {
+  declare module.exports: any;
+}
+
+declare module 'xml2map/test/xml2map.test' {
+  declare module.exports: any;
+}
+
+// Filename aliases
+declare module 'xml2map/index' {
+  declare module.exports: $Exports<'xml2map'>;
+}
+declare module 'xml2map/index.js' {
+  declare module.exports: $Exports<'xml2map'>;
+}
+declare module 'xml2map/lib/xml2map.js' {
+  declare module.exports: $Exports<'xml2map/lib/xml2map'>;
+}
+declare module 'xml2map/test/xml2map.test.js' {
+  declare module.exports: $Exports<'xml2map/test/xml2map.test'>;
+}
diff --git a/html5/frameworks/index.js b/html5/frameworks/index.js
index 1e3d409..8880f75 100644
--- a/html5/frameworks/index.js
+++ b/html5/frameworks/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as Vanilla from './vanilla/index'
 import * as Vue from 'weex-vue-framework'
 import * as Weex from './legacy/index'
diff --git a/html5/frameworks/legacy/api/methods.js b/html5/frameworks/legacy/api/methods.js
index 29449c6..19f1cdc 100644
--- a/html5/frameworks/legacy/api/methods.js
+++ b/html5/frameworks/legacy/api/methods.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview The api for invoking with "$" prefix
  */
diff --git a/html5/frameworks/legacy/api/modules.js b/html5/frameworks/legacy/api/modules.js
index 17b7e29..60123b0 100644
--- a/html5/frameworks/legacy/api/modules.js
+++ b/html5/frameworks/legacy/api/modules.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @deprecated after native register these modules
  */
diff --git a/html5/frameworks/legacy/app/bundle/bootstrap.js b/html5/frameworks/legacy/app/bundle/bootstrap.js
index b6d0cac..8821873 100644
--- a/html5/frameworks/legacy/app/bundle/bootstrap.js
+++ b/html5/frameworks/legacy/app/bundle/bootstrap.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import semver from 'semver'
 import Vm from '../../vm/index'
 import * as downgrade from '../downgrade'
diff --git a/html5/frameworks/legacy/app/bundle/define.js b/html5/frameworks/legacy/app/bundle/define.js
index 5444dcb..aec30f7 100644
--- a/html5/frameworks/legacy/app/bundle/define.js
+++ b/html5/frameworks/legacy/app/bundle/define.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import {
   isWeexComponent,
   isWeexModule,
diff --git a/html5/frameworks/legacy/app/bundle/index.js b/html5/frameworks/legacy/app/bundle/index.js
index 0affb80..40126cf 100644
--- a/html5/frameworks/legacy/app/bundle/index.js
+++ b/html5/frameworks/legacy/app/bundle/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * api that invoked by js bundle code
diff --git a/html5/frameworks/legacy/app/ctrl/index.js b/html5/frameworks/legacy/app/ctrl/index.js
index 395d489..99fb3a7 100644
--- a/html5/frameworks/legacy/app/ctrl/index.js
+++ b/html5/frameworks/legacy/app/ctrl/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * instance controls from native
diff --git a/html5/frameworks/legacy/app/ctrl/init.js b/html5/frameworks/legacy/app/ctrl/init.js
index 0e5d0be..401d614 100644
--- a/html5/frameworks/legacy/app/ctrl/init.js
+++ b/html5/frameworks/legacy/app/ctrl/init.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * instance controls from native
@@ -78,6 +96,7 @@
   // run code and get result
   const { WXEnvironment } = global
   const timerAPIs = {}
+
   /* istanbul ignore if */
   if (WXEnvironment && WXEnvironment.platform !== 'Web') {
     // timer APIs polyfill in native
@@ -88,12 +107,14 @@
           args[0](...args.slice(2))
         }
         timer.setTimeout(handler, args[1])
+        return app.doc.taskCenter.callbackManager.lastCallbackId.toString()
       },
       setInterval: (...args) => {
         const handler = function () {
           args[0](...args.slice(2))
         }
         timer.setInterval(handler, args[1])
+        return app.doc.taskCenter.callbackManager.lastCallbackId.toString()
       },
       clearTimeout: (n) => {
         timer.clearTimeout(n)
@@ -117,7 +138,11 @@
     __weex_viewmodel__: bundleVm,
     weex: weexGlobalObject
   }, timerAPIs, services)
-  callFunction(globalObjects, functionBody)
+  if (!callFunctionNative(globalObjects, functionBody)) {
+    // If failed to compile functionBody on native side,
+    // fallback to callFunction.
+    callFunction(globalObjects, functionBody)
+  }
 
   return result
 }
@@ -140,3 +165,51 @@
   const result = new Function(...globalKeys)
   return result(...globalValues)
 }
+
+/**
+ * Call a new function generated on the V8 native side.
+ * @param  {object} globalObjects
+ * @param  {string} body
+ * @return {boolean} return true if no error occurred.
+ */
+function callFunctionNative (globalObjects, body) {
+  if (typeof compileAndRunBundle !== 'function') {
+    return false
+  }
+
+  let fn = void 0
+  let isNativeCompileOk = false
+  let script = '(function ('
+  const globalKeys = []
+  const globalValues = []
+  for (const key in globalObjects) {
+    globalKeys.push(key)
+    globalValues.push(globalObjects[key])
+  }
+  for (let i = 0; i < globalKeys.length - 1; ++i) {
+    script += globalKeys[i]
+    script += ','
+  }
+  script += globalKeys[globalKeys.length - 1]
+  script += ') {'
+  script += body
+  script += '} )'
+
+  try {
+    const weex = globalObjects.weex || {}
+    const config = weex.config || {}
+    fn = compileAndRunBundle(script,
+                             config.bundleUrl,
+                             config.bundleDigest,
+                             config.codeCachePath)
+    if (fn && typeof fn === 'function') {
+      fn(...globalValues)
+      isNativeCompileOk = true
+    }
+  }
+  catch (e) {
+    console.error(e)
+  }
+
+  return isNativeCompileOk
+}
diff --git a/html5/frameworks/legacy/app/ctrl/misc.js b/html5/frameworks/legacy/app/ctrl/misc.js
index 847cb16..13ab09e 100644
--- a/html5/frameworks/legacy/app/ctrl/misc.js
+++ b/html5/frameworks/legacy/app/ctrl/misc.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * instance controls from native
diff --git a/html5/frameworks/legacy/app/differ.js b/html5/frameworks/legacy/app/differ.js
index f45d59e..9251d9f 100644
--- a/html5/frameworks/legacy/app/differ.js
+++ b/html5/frameworks/legacy/app/differ.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export default class Differ {
   constructor (id) {
     this.id = id
diff --git a/html5/frameworks/legacy/app/downgrade.js b/html5/frameworks/legacy/app/downgrade.js
index 7a1b699..327d70a 100644
--- a/html5/frameworks/legacy/app/downgrade.js
+++ b/html5/frameworks/legacy/app/downgrade.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import semver from 'semver'
 import { isPlainObject, typof } from '../util/index'
 
diff --git a/html5/frameworks/legacy/app/index.js b/html5/frameworks/legacy/app/index.js
index c54d3f4..5ae389d 100644
--- a/html5/frameworks/legacy/app/index.js
+++ b/html5/frameworks/legacy/app/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * Weex instance constructor & definition
diff --git a/html5/frameworks/legacy/app/instance.js b/html5/frameworks/legacy/app/instance.js
index dda49ce..55bb4c5 100644
--- a/html5/frameworks/legacy/app/instance.js
+++ b/html5/frameworks/legacy/app/instance.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * Weex App constructor & definition
diff --git a/html5/frameworks/legacy/app/register.js b/html5/frameworks/legacy/app/register.js
index a7075e3..bd0302e 100644
--- a/html5/frameworks/legacy/app/register.js
+++ b/html5/frameworks/legacy/app/register.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 let nativeModules = {}
 
 // for testing
diff --git a/html5/frameworks/legacy/app/viewport.js b/html5/frameworks/legacy/app/viewport.js
index 3d0a6c1..60f8eff 100644
--- a/html5/frameworks/legacy/app/viewport.js
+++ b/html5/frameworks/legacy/app/viewport.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export function setViewport (app, configs = {}) {
   /* istanbul ignore if */
   if (process.env.NODE_ENV === 'development') {
diff --git a/html5/frameworks/legacy/config.js b/html5/frameworks/legacy/config.js
index 4f55e13..ebf64d2 100644
--- a/html5/frameworks/legacy/config.js
+++ b/html5/frameworks/legacy/config.js
@@ -1,4 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 // @todo: It should be registered by native from `registerComponents()`.
+
 export default {
   nativeComponentMap: {
     text: true,
diff --git a/html5/frameworks/legacy/core/array.js b/html5/frameworks/legacy/core/array.js
index 2728430..e2f89de 100644
--- a/html5/frameworks/legacy/core/array.js
+++ b/html5/frameworks/legacy/core/array.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import { def } from '../util/index'
 
 const arrayProto = Array.prototype
diff --git a/html5/frameworks/legacy/core/dep.js b/html5/frameworks/legacy/core/dep.js
index 5e8dfe9..9796312 100644
--- a/html5/frameworks/legacy/core/dep.js
+++ b/html5/frameworks/legacy/core/dep.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import { remove } from '../util/index'
 
 let uid = 0
diff --git a/html5/frameworks/legacy/core/object.js b/html5/frameworks/legacy/core/object.js
index 8189eec..6b4b392 100644
--- a/html5/frameworks/legacy/core/object.js
+++ b/html5/frameworks/legacy/core/object.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import * as _ from '../util/index'
 var objProto = Object.prototype
 
diff --git a/html5/frameworks/legacy/core/observer.js b/html5/frameworks/legacy/core/observer.js
index 605b2aa..1288824 100644
--- a/html5/frameworks/legacy/core/observer.js
+++ b/html5/frameworks/legacy/core/observer.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import Dep from './dep'
 import { arrayMethods } from './array'
 import {
diff --git a/html5/frameworks/legacy/core/state.js b/html5/frameworks/legacy/core/state.js
index 6e464dc..d17e211 100644
--- a/html5/frameworks/legacy/core/state.js
+++ b/html5/frameworks/legacy/core/state.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import Watcher from './watcher'
 import Dep from './dep'
 import {
diff --git a/html5/frameworks/legacy/core/watcher.js b/html5/frameworks/legacy/core/watcher.js
index a02053b..4bb949b 100644
--- a/html5/frameworks/legacy/core/watcher.js
+++ b/html5/frameworks/legacy/core/watcher.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import Dep, { pushTarget, popTarget } from './dep'
 // import { pushWatcher } from './batcher'
 import {
diff --git a/html5/frameworks/legacy/index.js b/html5/frameworks/legacy/index.js
index 5b050ed..366ecb3 100644
--- a/html5/frameworks/legacy/index.js
+++ b/html5/frameworks/legacy/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview Weex framework entry.
  */
diff --git a/html5/frameworks/legacy/static/bridge.js b/html5/frameworks/legacy/static/bridge.js
index 1824711..665b1ad 100644
--- a/html5/frameworks/legacy/static/bridge.js
+++ b/html5/frameworks/legacy/static/bridge.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { instanceMap } from './map'
 import {
   fireEvent,
diff --git a/html5/frameworks/legacy/static/create.js b/html5/frameworks/legacy/static/create.js
index b81c9d3..ae97d46 100644
--- a/html5/frameworks/legacy/static/create.js
+++ b/html5/frameworks/legacy/static/create.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import App from '../app/index'
 import { instanceMap } from './map'
 import { init as initApp } from '../app/ctrl/index'
@@ -24,7 +42,10 @@
   if (!instance) {
     instance = new App(id, options)
     instanceMap[id] = instance
-    result = initApp(instance, code, data, services)
+    result = initApp(instance,
+                     code,
+                     data,
+                     services)
   }
   else {
     result = new Error(`invalid instance id "${id}"`)
diff --git a/html5/frameworks/legacy/static/life.js b/html5/frameworks/legacy/static/life.js
index 8e9d9bb..9cb8abc 100644
--- a/html5/frameworks/legacy/static/life.js
+++ b/html5/frameworks/legacy/static/life.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import config from '../config'
 import {
   refresh,
@@ -42,6 +60,11 @@
  * @param  {string} id
  */
 export function destroyInstance (id) {
+  // Markup some global state in native side
+  if (typeof markupState === 'function') {
+    markupState()
+  }
+
   resetTarget()
   const instance = instanceMap[id]
   /* istanbul ignore else */
@@ -50,5 +73,19 @@
   }
   destroy(instance)
   delete instanceMap[id]
+  // notifyContextDisposed is used to tell v8 to do a full GC,
+  // but this would have a negative performance impact on weex,
+  // because all the inline cache in v8 would get cleared
+  // during a full GC.
+  // To take care of both memory and performance, just tell v8
+  // to do a full GC every eighteen times.
+  const idNum = Math.round(id)
+  const round = 18
+  if (idNum > 0) {
+    const remainder = idNum % round
+    if (!remainder && typeof notifyTrimMemory === 'function') {
+      notifyTrimMemory()
+    }
+  }
   return instanceMap
 }
diff --git a/html5/frameworks/legacy/static/map.js b/html5/frameworks/legacy/static/map.js
index 9bc1405..8c94ef4 100644
--- a/html5/frameworks/legacy/static/map.js
+++ b/html5/frameworks/legacy/static/map.js
@@ -1 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export const instanceMap = {}
diff --git a/html5/frameworks/legacy/static/misc.js b/html5/frameworks/legacy/static/misc.js
index f638bc4..afbc5e3 100644
--- a/html5/frameworks/legacy/static/misc.js
+++ b/html5/frameworks/legacy/static/misc.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { instanceMap } from './map'
 import {
   getRootElement
diff --git a/html5/frameworks/legacy/static/register.js b/html5/frameworks/legacy/static/register.js
index dba1502..f21df89 100644
--- a/html5/frameworks/legacy/static/register.js
+++ b/html5/frameworks/legacy/static/register.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import Vm from '../vm/index'
 import config from '../config'
 import {
diff --git a/html5/frameworks/legacy/util/index.js b/html5/frameworks/legacy/util/index.js
index 53c8cd9..0d716f4 100644
--- a/html5/frameworks/legacy/util/index.js
+++ b/html5/frameworks/legacy/util/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export {
   extend,
   def,
diff --git a/html5/frameworks/legacy/util/shared.js b/html5/frameworks/legacy/util/shared.js
index 7c5a07a..faf76e1 100644
--- a/html5/frameworks/legacy/util/shared.js
+++ b/html5/frameworks/legacy/util/shared.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * Mix properties into target object.
  *
diff --git a/html5/frameworks/legacy/vm/compiler.js b/html5/frameworks/legacy/vm/compiler.js
index 85c7d4c..ffca01f 100644
--- a/html5/frameworks/legacy/vm/compiler.js
+++ b/html5/frameworks/legacy/vm/compiler.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * ViewModel template parser & data-binding process
diff --git a/html5/frameworks/legacy/vm/directive.js b/html5/frameworks/legacy/vm/directive.js
index b1c2527..42cc04a 100644
--- a/html5/frameworks/legacy/vm/directive.js
+++ b/html5/frameworks/legacy/vm/directive.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * Directive Parser
diff --git a/html5/frameworks/legacy/vm/dom-helper.js b/html5/frameworks/legacy/vm/dom-helper.js
index 9126bf7..6e5a800 100644
--- a/html5/frameworks/legacy/vm/dom-helper.js
+++ b/html5/frameworks/legacy/vm/dom-helper.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview Document & Element Helpers.
  *
diff --git a/html5/frameworks/legacy/vm/events.js b/html5/frameworks/legacy/vm/events.js
index 9380a41..5691472 100644
--- a/html5/frameworks/legacy/vm/events.js
+++ b/html5/frameworks/legacy/vm/events.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * Everything about component event which includes event object, event listener,
diff --git a/html5/frameworks/legacy/vm/index.js b/html5/frameworks/legacy/vm/index.js
index 408f6a9..45a33af 100644
--- a/html5/frameworks/legacy/vm/index.js
+++ b/html5/frameworks/legacy/vm/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * ViewModel Constructor & definition
diff --git a/html5/frameworks/vanilla/index.js b/html5/frameworks/vanilla/index.js
index b5ed952..95027a9 100644
--- a/html5/frameworks/vanilla/index.js
+++ b/html5/frameworks/vanilla/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 const config = {}
 
 const instanceMap = {}
diff --git a/html5/render/browser/base/atomic.js b/html5/render/browser/base/atomic.js
index 062183a..3ce8475 100644
--- a/html5/render/browser/base/atomic.js
+++ b/html5/render/browser/base/atomic.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import Component from './component'
diff --git a/html5/render/browser/base/component/flexbox.js b/html5/render/browser/base/component/flexbox.js
index 6c41fa8..a0c4046 100644
--- a/html5/render/browser/base/component/flexbox.js
+++ b/html5/render/browser/base/component/flexbox.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const boxAlignMap = {
diff --git a/html5/render/browser/base/component/index.js b/html5/render/browser/base/component/index.js
index d2a3cf2..d90733d 100644
--- a/html5/render/browser/base/component/index.js
+++ b/html5/render/browser/base/component/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import { extend } from '../../utils'
diff --git a/html5/render/browser/base/component/lazyload.js b/html5/render/browser/base/component/lazyload.js
index 795afad..05f4c70 100644
--- a/html5/render/browser/base/component/lazyload.js
+++ b/html5/render/browser/base/component/lazyload.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib, HTMLElement */
 
 'use strict'
diff --git a/html5/render/browser/base/component/operate.js b/html5/render/browser/base/component/operate.js
index e2bf7ab..f73f4a3 100644
--- a/html5/render/browser/base/component/operate.js
+++ b/html5/render/browser/base/component/operate.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import { extend, camelToKebab } from '../../utils'
diff --git a/html5/render/browser/base/component/position.js b/html5/render/browser/base/component/position.js
index 6af5fc9..2a961b2 100644
--- a/html5/render/browser/base/component/position.js
+++ b/html5/render/browser/base/component/position.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import Sticky from './sticky'
diff --git a/html5/render/browser/base/component/sticky.js b/html5/render/browser/base/component/sticky.js
index e60754a..b1c6b32 100644
--- a/html5/render/browser/base/component/sticky.js
+++ b/html5/render/browser/base/component/sticky.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global HTMLElement */
 
 import { throttle } from '../../utils'
diff --git a/html5/render/browser/base/component/valueFilter.js b/html5/render/browser/base/component/valueFilter.js
index 21114ee..3be19fe 100644
--- a/html5/render/browser/base/component/valueFilter.js
+++ b/html5/render/browser/base/component/valueFilter.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const NOT_PX_NUMBER_PROPERTIES = ['flex', 'opacity', 'zIndex', 'fontWeight']
diff --git a/html5/render/browser/base/div.js b/html5/render/browser/base/div.js
index a3ba4b5..b717416 100644
--- a/html5/render/browser/base/div.js
+++ b/html5/render/browser/base/div.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 function init (Weex) {
diff --git a/html5/render/browser/base/droot.js b/html5/render/browser/base/droot.js
index dc480cd..cbe43ef 100644
--- a/html5/render/browser/base/droot.js
+++ b/html5/render/browser/base/droot.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const DEFAULT_LOAD_MORE_OFFSET = 0
diff --git a/html5/render/browser/base/moduleEvent.js b/html5/render/browser/base/moduleEvent.js
index f21dfca..8014e34 100644
--- a/html5/render/browser/base/moduleEvent.js
+++ b/html5/render/browser/base/moduleEvent.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 /**
  * save the original listener for 'addEventListener'.
diff --git a/html5/render/browser/base/root.js b/html5/render/browser/base/root.js
index 48a1813..7925660 100644
--- a/html5/render/browser/base/root.js
+++ b/html5/render/browser/base/root.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import ComponentManager from '../dom/componentManager'
diff --git a/html5/render/browser/bridge/index.js b/html5/render/browser/bridge/index.js
index 35a009f..e4e6f77 100644
--- a/html5/render/browser/bridge/index.js
+++ b/html5/render/browser/bridge/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import protocol from './protocol'
diff --git a/html5/render/browser/bridge/protocol.js b/html5/render/browser/bridge/protocol.js
index 5e16d5e..f1a43b3 100644
--- a/html5/render/browser/bridge/protocol.js
+++ b/html5/render/browser/bridge/protocol.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 export default {
diff --git a/html5/render/browser/bridge/receiver.js b/html5/render/browser/bridge/receiver.js
index e55c1b9..1e2a7a4 100644
--- a/html5/render/browser/bridge/receiver.js
+++ b/html5/render/browser/bridge/receiver.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import config from '../render/config'
diff --git a/html5/render/browser/bridge/sender.js b/html5/render/browser/bridge/sender.js
index 86e7531..be11a65 100644
--- a/html5/render/browser/bridge/sender.js
+++ b/html5/render/browser/bridge/sender.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import { extend } from '../utils'
diff --git a/html5/render/browser/dom/appearWatcher.js b/html5/render/browser/dom/appearWatcher.js
index 25ff447..9917c62 100644
--- a/html5/render/browser/dom/appearWatcher.js
+++ b/html5/render/browser/dom/appearWatcher.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import { throttle } from '../utils'
diff --git a/html5/render/browser/dom/componentManager.js b/html5/render/browser/dom/componentManager.js
index 08c25b4..2c7e4e5 100644
--- a/html5/render/browser/dom/componentManager.js
+++ b/html5/render/browser/dom/componentManager.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global Event */
 
 'use strict'
diff --git a/html5/render/browser/dom/index.js b/html5/render/browser/dom/index.js
index 0bc17b2..bd04249 100644
--- a/html5/render/browser/dom/index.js
+++ b/html5/render/browser/dom/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * @fileOverview
  * A simple virtual dom implementation
diff --git a/html5/render/browser/extend/api/animation/index.js b/html5/render/browser/extend/api/animation/index.js
index 8e0bed0..d6076bf 100644
--- a/html5/render/browser/extend/api/animation/index.js
+++ b/html5/render/browser/extend/api/animation/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import { transitionOnce } from './lib'
diff --git a/html5/render/browser/extend/api/animation/lib.js b/html5/render/browser/extend/api/animation/lib.js
index c4c803e..e0dedb5 100644
--- a/html5/render/browser/extend/api/animation/lib.js
+++ b/html5/render/browser/extend/api/animation/lib.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 /**
diff --git a/html5/render/browser/extend/api/clipboard.js b/html5/render/browser/extend/api/clipboard.js
index f727b10..80e7dbc 100644
--- a/html5/render/browser/extend/api/clipboard.js
+++ b/html5/render/browser/extend/api/clipboard.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 /**
diff --git a/html5/render/browser/extend/api/dom.js b/html5/render/browser/extend/api/dom.js
index 8c115c8..47b397d 100644
--- a/html5/render/browser/extend/api/dom.js
+++ b/html5/render/browser/extend/api/dom.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import scroll from 'scroll-to'
diff --git a/html5/render/browser/extend/api/event.js b/html5/render/browser/extend/api/event.js
index 52d5924..e664183 100644
--- a/html5/render/browser/extend/api/event.js
+++ b/html5/render/browser/extend/api/event.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const event = {
diff --git a/html5/render/browser/extend/api/geolocation.js b/html5/render/browser/extend/api/geolocation.js
index c565209..9cf35bf 100644
--- a/html5/render/browser/extend/api/geolocation.js
+++ b/html5/render/browser/extend/api/geolocation.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const supportGeolocation = 'geolocation' in navigator
diff --git a/html5/render/browser/extend/api/globalEvent.js b/html5/render/browser/extend/api/globalEvent.js
index 5248a68..7905d57 100644
--- a/html5/render/browser/extend/api/globalEvent.js
+++ b/html5/render/browser/extend/api/globalEvent.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 // track varies kinds of events and listeners.
diff --git a/html5/render/browser/extend/api/meta.js b/html5/render/browser/extend/api/meta.js
index 1e96466..51dec99 100644
--- a/html5/render/browser/extend/api/meta.js
+++ b/html5/render/browser/extend/api/meta.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const metaModule = {
diff --git a/html5/render/browser/extend/api/modal.js b/html5/render/browser/extend/api/modal.js
index af73358..691174e 100644
--- a/html5/render/browser/extend/api/modal.js
+++ b/html5/render/browser/extend/api/modal.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import modal from 'modals'
diff --git a/html5/render/browser/extend/api/navigator.js b/html5/render/browser/extend/api/navigator.js
index 4c92cf4..8c16a4d 100644
--- a/html5/render/browser/extend/api/navigator.js
+++ b/html5/render/browser/extend/api/navigator.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const navigator = {
diff --git a/html5/render/browser/extend/api/pageInfo.js b/html5/render/browser/extend/api/pageInfo.js
index 4f938f7..dcc074d 100644
--- a/html5/render/browser/extend/api/pageInfo.js
+++ b/html5/render/browser/extend/api/pageInfo.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const pageInfo = {
diff --git a/html5/render/browser/extend/api/storage.js b/html5/render/browser/extend/api/storage.js
index b44b7b3..a1d31be 100644
--- a/html5/render/browser/extend/api/storage.js
+++ b/html5/render/browser/extend/api/storage.js
@@ -1,4 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global localStorage */
+
 'use strict'
 
 const supportLocalStorage = typeof localStorage !== 'undefined'
diff --git a/html5/render/browser/extend/api/stream.js b/html5/render/browser/extend/api/stream.js
index 8a94380..8e27dd7 100644
--- a/html5/render/browser/extend/api/stream.js
+++ b/html5/render/browser/extend/api/stream.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib, XMLHttpRequest */
 /* deps: httpurl */
 
@@ -122,7 +140,7 @@
     })
   }
 
-  xhr.send(config.body)
+  xhr.send(config.body || null)
 }
 
 const stream = {
diff --git a/html5/render/browser/extend/api/timer.js b/html5/render/browser/extend/api/timer.js
index cd078c3..e01092f 100644
--- a/html5/render/browser/extend/api/timer.js
+++ b/html5/render/browser/extend/api/timer.js
@@ -1,4 +1,21 @@
-// 'use strict'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 // const funcIdToTimerIdMap = {}
 // const funcIdToIntervalIdMap = {}
diff --git a/html5/render/browser/extend/api/webSocket.js b/html5/render/browser/extend/api/webSocket.js
index 717c769..481c88f 100644
--- a/html5/render/browser/extend/api/webSocket.js
+++ b/html5/render/browser/extend/api/webSocket.js
@@ -1,4 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global WebSocket */
+
 'use strict'
 
 let instance
diff --git a/html5/render/browser/extend/api/webview.js b/html5/render/browser/extend/api/webview.js
index 279602f..3fff8b2 100644
--- a/html5/render/browser/extend/api/webview.js
+++ b/html5/render/browser/extend/api/webview.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const webview = {
diff --git a/html5/render/browser/extend/components/a.js b/html5/render/browser/extend/components/a.js
index ceb7da8..e8d995f 100644
--- a/html5/render/browser/extend/components/a.js
+++ b/html5/render/browser/extend/components/a.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 function getProto (Weex) {
diff --git a/html5/render/browser/extend/components/countdown.js b/html5/render/browser/extend/components/countdown.js
index 1a94377..9211e21 100644
--- a/html5/render/browser/extend/components/countdown.js
+++ b/html5/render/browser/extend/components/countdown.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import Kountdown from 'kountdown'
diff --git a/html5/render/browser/extend/components/datepicker.js b/html5/render/browser/extend/components/datepicker.js
index 3cf8f55..a3c58b2 100644
--- a/html5/render/browser/extend/components/datepicker.js
+++ b/html5/render/browser/extend/components/datepicker.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const proto = {
diff --git a/html5/render/browser/extend/components/embed.js b/html5/render/browser/extend/components/embed.js
index 2ee2261..0caeea1 100644
--- a/html5/render/browser/extend/components/embed.js
+++ b/html5/render/browser/extend/components/embed.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const ID_PREFIX = 'weex_embed_'
diff --git a/html5/render/browser/extend/components/image/index.js b/html5/render/browser/extend/components/image/index.js
index ab4e6b9..a66e0d6 100644
--- a/html5/render/browser/extend/components/image/index.js
+++ b/html5/render/browser/extend/components/image/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/indicator/index.js b/html5/render/browser/extend/components/indicator/index.js
index d1914cd..3801bc0 100644
--- a/html5/render/browser/extend/components/indicator/index.js
+++ b/html5/render/browser/extend/components/indicator/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import './indicator.css'
diff --git a/html5/render/browser/extend/components/input.js b/html5/render/browser/extend/components/input.js
index f9fb44e..e867f82 100644
--- a/html5/render/browser/extend/components/input.js
+++ b/html5/render/browser/extend/components/input.js
@@ -1,4 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
+import { findEnterKeyType } from '../../utils/index'
 
 let appendStyle
 
@@ -34,9 +53,27 @@
     node.classList.add(this.className)
     node.classList.add('weex-element')
     this.placeholder && (node.placeholder = this.placeholder)
+    this.createKeybordEvent(node)
     return node
   },
 
+  // support enter key envent
+  createKeybordEvent (node) {
+    if (Array.isArray(this.data.event) && this.data.event.indexOf('return') > -1) {
+      node.addEventListener('keyup', (ev) => {
+        const code = ev.keyCode
+        let key = ev.key
+        if (code === 13) {
+          if (key.toLowerCase() === 'tab') {
+            key = 'next'
+          }
+          const rightKeyType = findEnterKeyType(this.data.attr['returnKeyType'])
+          this.dispatchEvent('return', { returnKeyType: rightKeyType })
+        }
+      }, false)
+    }
+  },
+
   focus () {
     this.node.focus()
   },
@@ -68,6 +105,10 @@
     this.node.type = availableTypes.indexOf(val) !== -1
       ? val
       : DEFAULT_TYPE
+  },
+
+  returnKeyType (val) {
+    this.node.returnKeyType = val || ''
   }
 }
 
@@ -110,6 +151,16 @@
         timestamp: Date.now()
       }
     }
+  },
+
+  return: {
+    updator: function (obj) {
+      return {
+        attrs: {
+          value: this.node.value
+        }
+      }
+    }
   }
 }
 
diff --git a/html5/render/browser/extend/components/marquee.js b/html5/render/browser/extend/components/marquee.js
index f08ff50..0e5d659 100644
--- a/html5/render/browser/extend/components/marquee.js
+++ b/html5/render/browser/extend/components/marquee.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const proto = {
diff --git a/html5/render/browser/extend/components/neighbor/index.js b/html5/render/browser/extend/components/neighbor/index.js
index f956992..da06d79 100644
--- a/html5/render/browser/extend/components/neighbor/index.js
+++ b/html5/render/browser/extend/components/neighbor/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/richtext.js b/html5/render/browser/extend/components/richtext.js
index 602777f..cc3ce4f 100644
--- a/html5/render/browser/extend/components/richtext.js
+++ b/html5/render/browser/extend/components/richtext.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const displayMap = {
diff --git a/html5/render/browser/extend/components/scrollable/index.js b/html5/render/browser/extend/components/scrollable/index.js
index b5a6b81..200c1c8 100644
--- a/html5/render/browser/extend/components/scrollable/index.js
+++ b/html5/render/browser/extend/components/scrollable/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import list from './list'
diff --git a/html5/render/browser/extend/components/scrollable/list/hlist.js b/html5/render/browser/extend/components/scrollable/list/hlist.js
index 6a54586..027cc79 100644
--- a/html5/render/browser/extend/components/scrollable/list/hlist.js
+++ b/html5/render/browser/extend/components/scrollable/list/hlist.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import listModule from './list'
diff --git a/html5/render/browser/extend/components/scrollable/list/index.js b/html5/render/browser/extend/components/scrollable/list/index.js
index b778d4b..7d72d74 100644
--- a/html5/render/browser/extend/components/scrollable/list/index.js
+++ b/html5/render/browser/extend/components/scrollable/list/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import Vlist from './vlist'
diff --git a/html5/render/browser/extend/components/scrollable/list/list.js b/html5/render/browser/extend/components/scrollable/list/list.js
index 77c90d4..09235cb 100644
--- a/html5/render/browser/extend/components/scrollable/list/list.js
+++ b/html5/render/browser/extend/components/scrollable/list/list.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import scrollableModule from '../scrollable'
diff --git a/html5/render/browser/extend/components/scrollable/list/vlist.js b/html5/render/browser/extend/components/scrollable/list/vlist.js
index fba69a9..7aae35b 100644
--- a/html5/render/browser/extend/components/scrollable/list/vlist.js
+++ b/html5/render/browser/extend/components/scrollable/list/vlist.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import listModule from './list'
diff --git a/html5/render/browser/extend/components/scrollable/loading/index.js b/html5/render/browser/extend/components/scrollable/loading/index.js
index 6d320f7..bf0270c 100644
--- a/html5/render/browser/extend/components/scrollable/loading/index.js
+++ b/html5/render/browser/extend/components/scrollable/loading/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import './loading.css'
diff --git a/html5/render/browser/extend/components/scrollable/motion.js b/html5/render/browser/extend/components/scrollable/motion.js
index 3427ddc..24ead1b 100644
--- a/html5/render/browser/extend/components/scrollable/motion.js
+++ b/html5/render/browser/extend/components/scrollable/motion.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib: true */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/scrollable/refresh/index.js b/html5/render/browser/extend/components/scrollable/refresh/index.js
index 982e720..6431a3d 100644
--- a/html5/render/browser/extend/components/scrollable/refresh/index.js
+++ b/html5/render/browser/extend/components/scrollable/refresh/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import './refresh.css'
diff --git a/html5/render/browser/extend/components/scrollable/scroll.js b/html5/render/browser/extend/components/scrollable/scroll.js
index e6061a2..ae6f7ab 100644
--- a/html5/render/browser/extend/components/scrollable/scroll.js
+++ b/html5/render/browser/extend/components/scrollable/scroll.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 import './motion'
 
 var doc = window.document
diff --git a/html5/render/browser/extend/components/scrollable/scrollable.js b/html5/render/browser/extend/components/scrollable/scrollable.js
index af35cb6..e6f7700 100644
--- a/html5/render/browser/extend/components/scrollable/scrollable.js
+++ b/html5/render/browser/extend/components/scrollable/scrollable.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/scrollable/scroller/index.js b/html5/render/browser/extend/components/scrollable/scroller/index.js
index 4e90740..0b4f93f 100644
--- a/html5/render/browser/extend/components/scrollable/scroller/index.js
+++ b/html5/render/browser/extend/components/scrollable/scroller/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import scrollableModule from '../scrollable'
diff --git a/html5/render/browser/extend/components/select.js b/html5/render/browser/extend/components/select.js
index 7e2ddeb..990c8af 100644
--- a/html5/render/browser/extend/components/select.js
+++ b/html5/render/browser/extend/components/select.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 let isArray
diff --git a/html5/render/browser/extend/components/slider/carrousel.js b/html5/render/browser/extend/components/slider/carrousel.js
index b63753d..5b2a10b 100644
--- a/html5/render/browser/extend/components/slider/carrousel.js
+++ b/html5/render/browser/extend/components/slider/carrousel.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 'use strict'
 
 // require('./gesture')
diff --git a/html5/render/browser/extend/components/slider/index.js b/html5/render/browser/extend/components/slider/index.js
index 5d85edd..0ea2c3a 100644
--- a/html5/render/browser/extend/components/slider/index.js
+++ b/html5/render/browser/extend/components/slider/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global lib */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/slider/timer.js b/html5/render/browser/extend/components/slider/timer.js
index 4c4d0d3..e7df907 100644
--- a/html5/render/browser/extend/components/slider/timer.js
+++ b/html5/render/browser/extend/components/slider/timer.js
@@ -1,5 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
+
 'use strict'
 
 var _fallback = false
diff --git a/html5/render/browser/extend/components/spinner/index.js b/html5/render/browser/extend/components/spinner/index.js
index 3cfd20b..174eb66 100644
--- a/html5/render/browser/extend/components/spinner/index.js
+++ b/html5/render/browser/extend/components/spinner/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* global CSSRule */
 
 'use strict'
diff --git a/html5/render/browser/extend/components/switch/index.js b/html5/render/browser/extend/components/switch/index.js
index e879ffa..395371f 100644
--- a/html5/render/browser/extend/components/switch/index.js
+++ b/html5/render/browser/extend/components/switch/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import './switch.css'
diff --git a/html5/render/browser/extend/components/tabheader/index.js b/html5/render/browser/extend/components/tabheader/index.js
index 25ff8f4..69e59e8 100644
--- a/html5/render/browser/extend/components/tabheader/index.js
+++ b/html5/render/browser/extend/components/tabheader/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 // TODO: refactor this scss code since this is strongly
diff --git a/html5/render/browser/extend/components/text.js b/html5/render/browser/extend/components/text.js
index 4f519e2..11c1cdc 100644
--- a/html5/render/browser/extend/components/text.js
+++ b/html5/render/browser/extend/components/text.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const DEFAULT_FONT_SIZE = 32
diff --git a/html5/render/browser/extend/components/textarea.js b/html5/render/browser/extend/components/textarea.js
index 648d32e..a149e75 100644
--- a/html5/render/browser/extend/components/textarea.js
+++ b/html5/render/browser/extend/components/textarea.js
@@ -1,4 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
+import { findEnterKeyType } from '../../utils/index'
 
 const DEFAULT_ROWS = 2
 
@@ -14,7 +33,25 @@
     const node = document.createElement('textarea')
     node.classList.add('weex-element')
     node.classList.add('weex-textarea')
+    this.createKeyboardEvent(node)
     return node
+  },
+
+  // support enter key envent
+  createKeyboardEvent (node) {
+    if (Array.isArray(this.data.event) && this.data.event.indexOf('return') > -1) {
+      node.addEventListener('keyup', (ev) => {
+        const code = ev.keyCode
+        let key = ev.key
+        if (code === 13) {
+          if (key.toLowerCase() === 'tab') {
+            key = 'next'
+          }
+          const rightKeyType = findEnterKeyType(this.data.attr['returnKeyType'])
+          this.dispatchEvent('return', { returnKeyType: rightKeyType })
+        }
+      }, false)
+    }
   }
 }
 
@@ -34,6 +71,9 @@
   },
   autofocus (val) {
     this.node.autofocus = !!val
+  },
+  returnKeyType (val) {
+    this.node.returnKeyType = val || ''
   }
 }
 
@@ -69,6 +109,16 @@
         timestamp: Date.now()
       }
     }
+  },
+
+  return: {
+    updator: function (obj) {
+      return {
+        attrs: {
+          value: this.node.value
+        }
+      }
+    }
   }
 }
 
diff --git a/html5/render/browser/extend/components/timepicker.js b/html5/render/browser/extend/components/timepicker.js
index 76dadd3..765aeb3 100644
--- a/html5/render/browser/extend/components/timepicker.js
+++ b/html5/render/browser/extend/components/timepicker.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const proto = {
diff --git a/html5/render/browser/extend/components/video/index.js b/html5/render/browser/extend/components/video/index.js
index d7ead5b..6692523 100644
--- a/html5/render/browser/extend/components/video/index.js
+++ b/html5/render/browser/extend/components/video/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import './video.css'
diff --git a/html5/render/browser/extend/components/web.js b/html5/render/browser/extend/components/web.js
index a9baa07..636e9d3 100644
--- a/html5/render/browser/extend/components/web.js
+++ b/html5/render/browser/extend/components/web.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 let isArray
diff --git a/html5/render/browser/extend/index.js b/html5/render/browser/extend/index.js
index 4ee98ad..ebdb54e 100644
--- a/html5/render/browser/extend/index.js
+++ b/html5/render/browser/extend/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import packages from './packer'
 
 // install the apis and components as packages.
diff --git a/html5/render/browser/index.js b/html5/render/browser/index.js
index 3e887d9..305d76f 100644
--- a/html5/render/browser/index.js
+++ b/html5/render/browser/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 import Weex from './render/index'
diff --git a/html5/render/browser/render/config.js b/html5/render/browser/render/config.js
index bb7d613..e407ef0 100644
--- a/html5/render/browser/render/config.js
+++ b/html5/render/browser/render/config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 const config = {
diff --git a/html5/render/browser/render/gesture.js b/html5/render/browser/render/gesture.js
index 9e6f3f1..24ef581 100644
--- a/html5/render/browser/render/gesture.js
+++ b/html5/render/browser/render/gesture.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
 'use strict'
diff --git a/html5/render/browser/render/index.js b/html5/render/browser/render/index.js
index b782701..f317489 100644
--- a/html5/render/browser/render/index.js
+++ b/html5/render/browser/render/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /* global lib, WebSocket */
 
 'use strict'
diff --git a/html5/render/browser/render/loader.js b/html5/render/browser/render/loader.js
index 900d17d..f05e6ac 100644
--- a/html5/render/browser/render/loader.js
+++ b/html5/render/browser/render/loader.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /* global XMLHttpRequest */
 
 'use strict'
diff --git a/html5/render/browser/render/register.js b/html5/render/browser/render/register.js
index ef77061..ecf71dd 100644
--- a/html5/render/browser/render/register.js
+++ b/html5/render/browser/render/register.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import ComponentManager from '../dom/componentManager'
 import { registerLoader } from './loader'
 import { protocol } from '../bridge'
diff --git a/html5/render/browser/utils/array.js b/html5/render/browser/utils/array.js
index 8e8fe4e..3c12611 100644
--- a/html5/render/browser/utils/array.js
+++ b/html5/render/browser/utils/array.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 export function isArray (arr) {
diff --git a/html5/render/browser/utils/index.js b/html5/render/browser/utils/index.js
index fa031db..57ec1ab 100644
--- a/html5/render/browser/utils/index.js
+++ b/html5/render/browser/utils/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /* global Image */
 
 'use strict'
@@ -213,3 +232,12 @@
     return `${g1.toUpperCase()}`
   })
 }
+
+export function findEnterKeyType (key) {
+  const keys = ['default', 'go', 'next', 'search', 'send']
+  if (keys.indexOf(key) > -1) {
+    return key
+  }
+  return 'done'
+}
+
diff --git a/html5/render/browser/utils/logger.js b/html5/render/browser/utils/logger.js
index c41e930..3ae2ff4 100644
--- a/html5/render/browser/utils/logger.js
+++ b/html5/render/browser/utils/logger.js
@@ -1,5 +1,21 @@
-// import config from './config'
-// import { isArray } from './utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 // let _initialized = false
 
diff --git a/html5/render/native/index.js b/html5/render/native/index.js
index f989ba0..68e44c9 100644
--- a/html5/render/native/index.js
+++ b/html5/render/native/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { subversion } from '../../../package.json'
 import runtime from '../../runtime'
 import frameworks from '../../frameworks/index'
diff --git a/html5/render/vue/README.md b/html5/render/vue/README.md
index 02e0181..d41f777 100644
--- a/html5/render/vue/README.md
+++ b/html5/render/vue/README.md
@@ -2,8 +2,31 @@
 
 This is a group of Vue 2.x components for Weex, which have the same behavior with the Weex built-in components on the native.
 
-It can be run on the browser only based on Vue 2.x (without Weex).
+It can be run on browser only based on Vue 2.x (without Weex).
 
-## Contributing
+## use vue-loader
 
-Please see the [Contributing Guide](https://github.com/Hanks10100/weex/issues/10).
+**NOTE: ** after `v0.11.3` there's no need to add `$processStyle` and `autoprefixer` in your vue-loader config anymore. The runtime render will take care of it once for all.
+
+## component -> dom map
+
+| component | dom element | children | note |
+| --- | --- | ---- | --- |
+| scroller | /main | /main/div/x | - |
+| list | /main | /main/div/x | - |
+| cell | /sect | /sect/x | - |
+| header | /head | /head/x | - |
+| loading | /asid | /aside/x | - |
+| loading-indicator | /mark | /mark/x | - |
+| refresh | /asid | /aside/x | - |
+| slider | /nav | x -> /ul/li/x, indicator -> /nav/nav | - |
+| indicator | /nav | - | indicator points: /nav/mark |
+| a | /a | /a/x | - |
+| div | /div | /div/x | - |
+| image | /figure | - | - |
+| input | /input | - | - |
+| switch | /span | - | round button: /span/small |
+| text | /p | - | - |
+| textarea | /textarea | - | - |
+| video | /video | - | - |
+| web | /iframe | - | - |
diff --git a/html5/render/vue/components/a.js b/html5/render/vue/components/a.js
index de66f52..bf12d21 100644
--- a/html5/render/vue/components/a.js
+++ b/html5/render/vue/components/a.js
@@ -1,24 +1,49 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle, trimTextVNodes, createEventMap } from '../core'
+// import { validateStyles } from '../validator'
+
+const _css = `
+.weex-a {
+  text-decoration: none;
+}
+`
 
 export default {
-  mixins: [base],
+  name: 'weex-a',
   props: {
     href: String
   },
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('a', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('a', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     return createElement('html:a', {
       attrs: {
         'weex-type': 'a',
         href: this.href
       },
-      on: this.createEventMap(),
-      staticClass: 'weex-a'
-    }, this.$slots.default)
-  }
+      on: createEventMap(this),
+      staticClass: 'weex-a weex-ct',
+      staticStyle: extractComponentStyle(this)
+    }, trimTextVNodes(this.$slots.default))
+  },
+  _css
 }
diff --git a/html5/render/vue/components/div.js b/html5/render/vue/components/div.js
index c436df3..9811332 100644
--- a/html5/render/vue/components/div.js
+++ b/html5/render/vue/components/div.js
@@ -1,25 +1,43 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../validator'
+import { extractComponentStyle, trimTextVNodes, createEventMap } from '../core'
 
-function trimTextNode (children) {
-  if (Array.isArray(children)) {
-    return children.filter(vnode => !!vnode.tag)
-  }
-  return children
+const _css = `
+body > .weex-div {
+  min-height: 100%;
 }
+`
 
 export default {
-  mixins: [base],
+  name: 'weex-div',
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('div', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('div', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     return createElement('html:div', {
       attrs: { 'weex-type': 'div' },
-      on: this.createEventMap(),
-      staticClass: 'weex-div'
-    }, trimTextNode(this.$slots.default))
-  }
+      on: createEventMap(this),
+      staticClass: 'weex-div weex-ct',
+      staticStyle: extractComponentStyle(this)
+    }, trimTextVNodes(this.$slots.default))
+  },
+  _css
 }
diff --git a/html5/render/vue/components/image.js b/html5/render/vue/components/image.js
index de16f66..39caa55 100644
--- a/html5/render/vue/components/image.js
+++ b/html5/render/vue/components/image.js
@@ -1,39 +1,94 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { extractComponentStyle, createEventMap } from '../core'
+import { extend } from '../utils'
+
+const _css = `
+.weex-image, .weex-img {
+  background-repeat: no-repeat;
+  background-position: 50% 50%;
+}
+`
+/**
+ * get resize (stetch|cover|contain) related styles.
+ */
+function getResizeStyle (context) {
+  const stretch = '100% 100%'
+  const resize = context.resize || stretch
+  const bgSize = ['cover', 'contain', stretch].indexOf(resize) > -1 ? resize : stretch
+  // compatibility: http://caniuse.com/#search=background-size
+  return { 'background-size': bgSize }
+}
+
+function preProcessSrc (context, url, mergedStyle) {
+  // somehow the merged style in _prerender hook is gone.
+  // just return the original src.
+  if (!mergedStyle || !mergedStyle.width || !mergedStyle.height) {
+    return url
+  }
+  const { width, height } = mergedStyle
+  return context.processImgSrc && context.processImgSrc(url, {
+    width: parseFloat(width),
+    height: parseFloat(height),
+    quality: context.quality,
+    sharpen: context.sharpen,
+    original: context.original
+  }) || url
+}
 
 export default {
-  mixins: [base],
   props: {
-    src: {
-      type: String,
-      required: true
-    },
-    resize: {
-      validator (value) {
-        /* istanbul ignore next */
-        return ['cover', 'contain', 'stretch'].indexOf(value) !== -1
-      }
-    }
+    src: String,
+    placeholder: String,
+    resize: String,
+    quality: String,
+    sharpen: String,
+    original: [String, Boolean]
+  },
+
+  updated () {
+    this._fireLazyload()
+  },
+
+  mounted () {
+    this._fireLazyload()
   },
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('image', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
-    let cssText = `background-image:url("${this.src}");`
-
-    // compatibility: http://caniuse.com/#search=background-size
-    cssText += (this.resize && this.resize !== 'stretch')
-      ? `background-size: ${this.resize};`
-      : `background-size: 100% 100%;`
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('image', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    // const style = this._normalizeInlineStyles(this.$vnode.data)
+    const resizeStyle = getResizeStyle(this)
+    const style = extractComponentStyle(this)
     return createElement('figure', {
-      attrs: { 'weex-type': 'image' },
-      on: this.createEventMap(['load']),
-      staticClass: 'weex-image',
-      style: cssText
+      attrs: {
+        'weex-type': 'image',
+        'img-src': preProcessSrc(this, this.src, style),
+        'img-placeholder': preProcessSrc(this, this.placeholder, style)
+      },
+      on: createEventMap(this, ['load', 'error']),
+      staticClass: 'weex-image weex-el',
+      staticStyle: extend(style, resizeStyle)
     })
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/index.js b/html5/render/vue/components/index.js
index 0924452..3451bc8 100644
--- a/html5/render/vue/components/index.js
+++ b/html5/render/vue/components/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import _switch from './switch'
 export { _switch as switch }
 
@@ -10,27 +28,32 @@
 import cell from './scrollable/list/cell'
 import scroller from './scrollable/scroller'
 import slider from './slider'
-import indicator from './warning'
-import refresh from './warning'
-import loading from './warning'
+import neighbor from './slider/slider-neighbor'
+// import indicator from './warning'
+import indicator from './slider/indicator'
+// import refresh from './warning'
+// import loading from './warning'
+import refresh from './scrollable/refresh'
+import loading from './scrollable/loading'
 import LoadingIndicator from './scrollable/loading-indicator'
 import text from './text'
 import textarea from './textarea'
 import video from './video'
 import web from './web'
 
-export {
+export default {
   a,
   div,
-  div as container,
+  container: div,
   image,
-  image as img,
+  img: image,
   input,
   header,
   list,
   cell,
   scroller,
   slider,
+  'slider-neighbor': neighbor,
   indicator,
   refresh,
   loading,
diff --git a/html5/render/vue/components/input.js b/html5/render/vue/components/input.js
index 39c4777..fc1ac99 100644
--- a/html5/render/vue/components/input.js
+++ b/html5/render/vue/components/input.js
@@ -1,9 +1,42 @@
-import { base } from '../mixins'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @fileOverview Input component.
+ * Support v-model only if vue version is large than 2.2.0
+ */
+import { extractComponentStyle, createEventMap } from '../core'
+import { inputCommon } from '../mixins'
 import { extend, mapFormEvents } from '../utils'
-import { validateStyles } from '../validator'
+// import { validateStyles } from '../validator'
+
+const _css = `
+.weex-input, .weex-textarea {
+  font-size: 0.426667rem;
+}
+.weex-input:focus, .weex-textarea:focus {
+  outline: none;
+}
+`
 
 export default {
-  mixins: [base],
+  mixins: [inputCommon],
   props: {
     type: {
       type: String,
@@ -27,15 +60,16 @@
       type: [String, Boolean],
       default: false
     },
-    maxlength: [String, Number]
+    maxlength: [String, Number],
+    returnKeyType: String
   },
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('input', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('input', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    const events = extend(createEventMap(this), mapFormEvents(this))
     return createElement('html:input', {
       attrs: {
         'weex-type': 'input',
@@ -44,10 +78,16 @@
         disabled: (this.disabled !== 'false' && this.disabled !== false),
         autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
         placeholder: this.placeholder,
-        maxlength: this.maxlength
+        maxlength: this.maxlength,
+        'returnKeyType': this.returnKeyType
       },
-      on: extend(this.createEventMap(), mapFormEvents(this)),
-      staticClass: 'weex-input'
+      domProps: {
+        value: this.value
+      },
+      on: this.createKeyboardEvent(events),
+      staticClass: 'weex-input weex-el',
+      staticStyle: extractComponentStyle(this)
     })
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/scrollable/header.js b/html5/render/vue/components/scrollable/header.js
index b9ba6c5..9753209 100644
--- a/html5/render/vue/components/scrollable/header.js
+++ b/html5/render/vue/components/scrollable/header.js
@@ -1,29 +1,48 @@
-import { base } from '../../mixins'
-import { validateStyles } from '../../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { supportSticky } from '../../utils/style'
+import { extractComponentStyle, createEventMap } from '../../core'
 
 export default {
-  mixins: [base],
-
   data () {
     return {
       sticky: false,
       initTop: 0,
-      initHeight: 0,
-      placeholder: null
+      placeholder: null,
+      supportSticky: supportSticky()
     }
   },
 
   mounted () {
     this.initTop = this.$el.offsetTop
-    this.initHeight = this.$el.offsetHeight
     this.placeholder = window.document.createElement('div')
   },
 
+  updated () {
+    if (!this.sticky) {
+      this.initTop = this.$el.offsetTop
+    }
+  },
+
   methods: {
-    addSticky (offsetY) {
-      this.$el.style.position = ''
+    addSticky () {
       this.sticky = true
-      this.$el.style.top = offsetY + 'px'
       this.placeholder.style.display = 'block'
       this.placeholder.style.width = this.$el.offsetWidth + 'px'
       this.placeholder.style.height = this.$el.offsetHeight + 'px'
@@ -32,32 +51,26 @@
 
     removeSticky () {
       this.sticky = false
-      this.$el.style.top = '0'
       try {
         this.$el.parentNode.removeChild(this.placeholder)
       }
       catch (e) {
       }
-    },
-
-    moveUp (offsetY) {
-      this.$el.style.position = 'absolute'
-      this.$el.style.top = offsetY + 'px'
     }
   },
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('header', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('header', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     return createElement('html:header', {
       attrs: { 'weex-type': 'header' },
-      on: this.createEventMap(),
+      on: createEventMap(this),
       ref: 'header',
-      staticClass: 'weex-header',
-      class: { sticky: this.sticky }
+      staticClass: 'weex-header weex-ct',
+      class: { sticky: this.sticky, iossticky: this.supportSticky },
+      staticStyle: extractComponentStyle(this)
     }, this.$slots.default)
   }
 }
diff --git a/html5/render/vue/components/scrollable/list/cell.js b/html5/render/vue/components/scrollable/list/cell.js
index a4185f3..2f37f4a 100644
--- a/html5/render/vue/components/scrollable/list/cell.js
+++ b/html5/render/vue/components/scrollable/list/cell.js
@@ -1,18 +1,35 @@
-import { base } from '../../../mixins'
-import { validateStyles } from '../../../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../../../validator'
+import { extractComponentStyle, createEventMap } from '../../../core'
 
 export default {
-  mixins: [base],
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('cell', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('cell', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     return createElement('section', {
       attrs: { 'weex-type': 'cell' },
-      on: this.createEventMap(),
-      staticClass: 'weex-cell'
+      on: createEventMap(this),
+      staticClass: 'weex-cell weex-ct',
+      staticStyle: extractComponentStyle(this)
     }, this.$slots.default)
   }
 }
diff --git a/html5/render/vue/components/scrollable/list/index.js b/html5/render/vue/components/scrollable/list/index.js
index 6eec6a6..a5fceff 100644
--- a/html5/render/vue/components/scrollable/list/index.js
+++ b/html5/render/vue/components/scrollable/list/index.js
@@ -1,11 +1,30 @@
-import { base, event, scrollable } from '../../../mixins'
-import { validateStyles } from '../../../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle, createEventMap } from '../../../core'
+import { scrollable } from '../../../mixins'
+// import { validateStyles } from '../../../validator'
 import { extend } from '../../../utils'
-import * as shared from '../shared'
 import listMixin from './listMixin'
 
 export default {
-  mixins: [base, event, scrollable, listMixin],
+  name: 'list',
+  mixins: [scrollable, listMixin],
   props: {
     loadmoreoffset: {
       type: [String, Number],
@@ -15,7 +34,7 @@
 
   computed: {
     wrapperClass () {
-      const classArray = ['weex-list', 'weex-list-wrapper']
+      const classArray = ['weex-list', 'weex-list-wrapper', 'weex-ct']
       this._refresh && classArray.push('with-refresh')
       this._loading && classArray.push('with-loading')
       return classArray.join(' ')
@@ -23,23 +42,20 @@
   },
 
   methods: {
+    resetLoadmore () {
+      this._availableToFireLoadmore = true
+    },
     createChildren (h) {
       const slots = this.$slots.default || []
       this._cells = slots.filter(vnode => {
         if (!vnode.tag || !vnode.componentOptions) return false
-        switch (vnode.componentOptions.tag) {
-          case 'loading': this._loading = shared.createLoading(this, h, vnode); return false
-          case 'refresh': this._refresh = shared.createRefresh(this, h, vnode); return false
-        }
         return true
       })
       return [
-        this._refresh,
         h('html:div', {
           ref: 'inner',
-          staticClass: 'weex-list-inner'
-        }, this._cells),
-        this._loading
+          staticClass: 'weex-list-inner weex-ct'
+        }, this._cells)
       ]
     }
   },
@@ -48,10 +64,9 @@
     this.weexType = 'list'
 
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('list', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('list', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     this.$nextTick(() => {
       this.updateLayout()
     })
@@ -60,12 +75,13 @@
       ref: 'wrapper',
       attrs: { 'weex-type': 'list' },
       staticClass: this.wrapperClass,
-      on: extend(this.createEventMap(), {
+      on: extend(createEventMap(this), {
         scroll: this.handleListScroll,
         touchstart: this.handleTouchStart,
         touchmove: this.handleTouchMove,
         touchend: this.handleTouchEnd
-      })
+      }),
+      staticStyle: extractComponentStyle(this)
     }, this.createChildren(createElement))
   }
 }
diff --git a/html5/render/vue/components/scrollable/list/listMixin.js b/html5/render/vue/components/scrollable/list/listMixin.js
index f91b836..d32d406 100644
--- a/html5/render/vue/components/scrollable/list/listMixin.js
+++ b/html5/render/vue/components/scrollable/list/listMixin.js
@@ -1,115 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { supportSticky } from '../../../utils/style'
+
 export default {
   methods: {
-    moveTo (offsetY = 0, done) {
-      const inner = this.$refs.inner
-      if (inner) {
-        inner.style.willChange = `transform`
-        inner.style.transition = `transform .2s ease-in-out`
-        inner.style.transform = `translate3d(0, ${offsetY}, 0)`
-        setTimeout(() => {
-          inner.style.transition = ''
-          inner.style.willChange = ''
-          done && done()
-        }, 200)
-      }
-    },
-
-    done () {
-      this.moveTo(0)
-      this._refresh && this._refresh.child.reset()
-      this._loading && this._loading.child.reset()
-    },
-
-    showRefresh () {
-      this.moveTo('1.6rem')
-      if (this._refresh && this._refresh.child) {
-        this._refresh.child.show()
-      }
-    },
-
-    showLoading () {
-      this.moveTo('-1.6rem')
-      if (this._loading && this._loading.child) {
-        this._loading.child.show()
-      }
-    },
-
-    handleTouchStart (event) {
-      // event.preventDefault()
-      event.stopPropagation()
-      if (this._loading || this._refresh) {
-        const touch = event.changedTouches[0]
-        this._touchParams = {
-          reachTop: this.reachTop(),
-          reachBottom: this.reachBottom(),
-          startTouchEvent: touch,
-          startX: touch.pageX,
-          startY: touch.pageY,
-          timeStamp: event.timeStamp
-        }
-      }
-    },
-
-    handleTouchMove (event) {
-      // event.preventDefault()
-      event.stopPropagation()
-      if (this._touchParams) {
-        const inner = this.$refs.inner
-        const { startY, reachTop, reachBottom } = this._touchParams
-        if (inner && (reachTop && this._refresh || reachBottom && this._loading)) {
-          const touch = event.changedTouches[0]
-          const offsetY = touch.pageY - startY
-          this._touchParams.offsetY = offsetY
-          if (offsetY) {
-            inner.style.transform = `translate3d(0, ${offsetY}px, 0)`
-          }
-        }
-      }
-    },
-
-    handleTouchEnd (event) {
-      // event.preventDefault()
-      event.stopPropagation()
-      if (this._touchParams) {
-        const inner = this.$refs.inner
-        const { offsetY, reachTop, reachBottom } = this._touchParams
-        if (inner && (reachTop && this._refresh || reachBottom && this._loading)) {
-          if (offsetY > 120) {
-            this.showRefresh()
-          }
-          else if (offsetY < -120) {
-            this.showLoading()
-          }
-          else {
-            this.done(0)
-          }
-        }
-      }
-      delete this._touchParams
-    },
-
     handleListScroll (event) {
       this.handleScroll(event)
-      const scrollTop = this.$el.scrollTop
-      const top = this.$el.offsetTop
 
+      if (supportSticky()) {
+        return
+      }
+
+      const scrollTop = this.$el.scrollTop
       const h = this.$children.filter(vm => vm.$refs.header)
-      if (scrollTop < h[0].initTop) {
-        return h[0].removeSticky()
+
+      if (h.length <= 0) {
+        return
       }
-      if (scrollTop > h[h.length - 1].initTop) {
-        return h[h.length - 1].addSticky(top)
-      }
-      for (let i = 1; i < h.length; i++) {
-        if (h[i - 1].initTop < scrollTop) {
-          if (scrollTop < h[i].initTop && scrollTop + h[i - 1].initHeight > h[i].initTop) {
-            h[i - 1].moveUp(h[i].$refs.header.offsetTop - h[i - 1].initHeight)
-            h[i].removeSticky()
-          }
-          else if (scrollTop + h[i - 1].initHeight < h[i].initTop) {
-            h[i - 1].addSticky(top)
-            h[i].removeSticky()
-          }
+
+      for (let i = 0; i < h.length; i++) {
+        if (h[i].initTop < scrollTop) {
+          h[i].addSticky()
+        }
+        else {
+          h[i].removeSticky()
         }
       }
     }
diff --git a/html5/render/vue/components/scrollable/list/style.js b/html5/render/vue/components/scrollable/list/style.js
new file mode 100644
index 0000000..0a6aec0
--- /dev/null
+++ b/html5/render/vue/components/scrollable/list/style.js
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+export default `
+body > .weex-list {
+  max-height: 100%;
+}
+
+.weex-list-wrapper {
+  -webkit-overflow-scrolling: touch;
+  overflow-y: scroll !important;
+  overflow-x: hidden;
+}
+
+.weex-list-inner {
+  -webkit-overflow-scrolling: touch;
+  width: 100%;
+}
+`
diff --git a/html5/render/vue/components/scrollable/loading-indicator.js b/html5/render/vue/components/scrollable/loading-indicator.js
index 0fd17e9..356236d 100644
--- a/html5/render/vue/components/scrollable/loading-indicator.js
+++ b/html5/render/vue/components/scrollable/loading-indicator.js
@@ -1,10 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle } from '../../core'
+
+const _css = `
+.weex-refresh-indicator,
+.weex-loading-indicator {
+  width: 1.0rem;
+  height: 1.0rem;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  overflow: visible;
+  background: none;
+}
+.weex-refresh-indicator:before,
+.weex-loading-indicator:before {
+  display: block;
+  content: '';
+  font-size: 0.16rem;
+  width: 1em;
+  height: 1em;
+  left: -60%;
+  top: 40%;
+  border-radius: 50%;
+  position: relative;
+  text-indent: -9999em;
+  -webkit-animation: weex-spinner 1.1s infinite ease;
+          animation: weex-spinner 1.1s infinite ease;
+  -webkit-transform: translate3d(1.0rem, 0, 0);
+          transform: translate3d(1.0rem, 0, 0);
+}
+`
+
 export default {
-  name: 'loading-indicator',
   render (createElement) {
     this.weexType = 'loading-indicator'
     return createElement('mark', {
       attrs: { 'weex-type': 'loading-indicator' },
-      staticClass: 'weex-loading-indicator'
+      staticClass: 'weex-loading-indicator weex-ct',
+      staticStyle: extractComponentStyle(this)
     })
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/scrollable/loading.js b/html5/render/vue/components/scrollable/loading.js
index c708789..e8bef52 100644
--- a/html5/render/vue/components/scrollable/loading.js
+++ b/html5/render/vue/components/scrollable/loading.js
@@ -1,7 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle } from '../../core'
 import LoadingIndicator from './loading-indicator'
 
 export default {
-  // name: 'loading',
   components: { LoadingIndicator },
   props: {
     display: {
@@ -14,19 +32,51 @@
   },
   data () {
     return {
-      height: 0
+      height: -1,
+      viewHeight: 0
+    }
+  },
+  mounted () {
+    this.viewHeight = this.$el.offsetHeight
+    if (this.display === 'hide') {
+      this.height = 0
+    }
+    else {
+      this.height = this.viewHeight
+    }
+  },
+  updated () {
+  },
+  watch: {
+    height (val) {
+      this.$el.style.height = val * weex.config.env.scale + 'px'
+    },
+    display (val) {
+      if (val === 'hide') {
+        this.height = 0
+      }
+      else {
+        this.height = this.viewHeight
+      }
     }
   },
   methods: {
-    show () {
-      this.$emit('loading')
-      this.height = '1.6rem'
-      this.visibility = 'visible'
+    pulling (offsetY = 0) {
+      this.height = offsetY
     },
-    reset () {
-      this.height = 0
-      this.visibility = 'hidden'
-      this.$emit('loadingfinish')
+    pullingUp (offsetY) {
+      this.$el.style.transition = `height 0s`
+      this.pulling(offsetY)
+    },
+    pullingEnd () {
+      this.$el.style.transition = `height .2s`
+      if (this.height >= this.viewHeight) {
+        this.pulling(this.viewHeight)
+        this.$emit('loading')
+      }
+      else {
+        this.pulling(0)
+      }
     },
     getChildren () {
       const children = this.$slots.default || []
@@ -40,11 +90,12 @@
     }
   },
   render (createElement) {
+    this.$parent._loading = this
     return createElement('aside', {
       ref: 'loading',
       attrs: { 'weex-type': 'loading' },
-      style: { height: this.height, visibility: this.visibility },
-      staticClass: 'weex-loading'
+      staticClass: 'weex-loading weex-ct',
+      staticStyle: extractComponentStyle(this)
     }, this.getChildren())
   }
 }
diff --git a/html5/render/vue/components/scrollable/refresh.js b/html5/render/vue/components/scrollable/refresh.js
index 8f8d6d6..a770095 100644
--- a/html5/render/vue/components/scrollable/refresh.js
+++ b/html5/render/vue/components/scrollable/refresh.js
@@ -1,7 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle } from '../../core'
 import LoadingIndicator from './loading-indicator'
+import { createEvent } from '../../utils'
 
 export default {
-  // name: 'refresh',
   components: { LoadingIndicator },
   props: {
     display: {
@@ -14,20 +33,58 @@
   },
   data () {
     return {
-      height: 0
+      lastDy: 0,
+      viewHeight: 0,
+      height: -1
+    }
+  },
+  mounted () {
+    this.viewHeight = this.$el.offsetHeight
+    if (this.display === 'hide') {
+      this.height = 0
+    }
+    else {
+      this.height = this.viewHeight
+    }
+  },
+  updated () {
+  },
+  watch: {
+    height (val) {
+      this.$el.style.height = val * weex.config.env.scale + 'px'
+    },
+    display (val) {
+      if (val === 'hide') {
+        this.height = 0
+      }
+      else {
+        this.height = this.viewHeight
+      }
     }
   },
   methods: {
-    show () {
-      // TODO: no fixed height
-      this.$emit('refresh')
-      this.height = '1.6rem'
-      this.visibility = 'visible'
+    pulling (offsetY = 0) {
+      this.height = offsetY
+      this.$emit('pullingdown', createEvent(this, 'pullingdown', {
+        dy: offsetY - this.lastDy,
+        pullingDistance: offsetY,
+        viewHeight: this.viewHeight
+      }))
+      this.lastDy = offsetY
     },
-    reset () {
-      this.height = 0
-      this.visibility = 'hidden'
-      this.$emit('refreshfinish')
+    pullingDown (offsetY) {
+      this.$el.style.transition = `height 0s`
+      this.pulling(offsetY)
+    },
+    pullingEnd () {
+      this.$el.style.transition = `height .2s`
+      if (this.height >= this.viewHeight) {
+        this.pulling(this.viewHeight)
+        this.$emit('refresh')
+      }
+      else {
+        this.pulling(0)
+      }
     },
     getChildren () {
       const children = this.$slots.default || []
@@ -41,11 +98,12 @@
     }
   },
   render (createElement) {
+    this.$parent._refresh = this
     return createElement('aside', {
       ref: 'refresh',
       attrs: { 'weex-type': 'refresh' },
-      style: { height: this.height, visibility: this.visibility },
-      staticClass: 'weex-refresh'
+      staticClass: 'weex-refresh weex-ct',
+      staticStyle: extractComponentStyle(this)
     }, this.getChildren())
   }
 }
diff --git a/html5/render/vue/components/scrollable/scroller.js b/html5/render/vue/components/scrollable/scroller.js
index b5f9c8b..96ebc10 100644
--- a/html5/render/vue/components/scrollable/scroller.js
+++ b/html5/render/vue/components/scrollable/scroller.js
@@ -1,11 +1,29 @@
-import { base, scrollable } from '../../mixins'
-import { validateStyles } from '../../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle, createEventMap } from '../../core'
+import { scrollable } from '../../mixins'
+// import { validateStyles } from '../../validator'
 import { extend } from '../../utils'
-import * as shared from './shared'
 import listMixin from './list/listMixin'
 
 export default {
-  mixins: [base, scrollable, listMixin],
+  mixins: [scrollable, listMixin],
   props: {
     scrollDirection: {
       type: [String],
@@ -27,10 +45,13 @@
 
   computed: {
     wrapperClass () {
-      const classArray = ['weex-scroller', 'weex-scroller-wrapper']
+      const classArray = ['weex-scroller', 'weex-scroller-wrapper', 'weex-ct']
       if (this.scrollDirection === 'horizontal') {
         classArray.push('weex-scroller-horizontal')
       }
+      else {
+        classArray.push('weex-scroller-vertical')
+      }
       return classArray.join(' ')
     }
   },
@@ -40,19 +61,13 @@
       const slots = this.$slots.default || []
       this._cells = slots.filter(vnode => {
         if (!vnode.tag || !vnode.componentOptions) return false
-        switch (vnode.componentOptions.tag) {
-          case 'loading': this._loading = shared.createLoading(this, h, vnode); return false
-          case 'refresh': this._refresh = shared.createRefresh(this, h, vnode); return false
-        }
         return true
       })
       return [
-        this._refresh,
         h('html:div', {
           ref: 'inner',
-          staticClass: 'weex-scroller-inner'
-        }, this._cells),
-        this._loading
+          staticClass: 'weex-scroller-inner weex-ct'
+        }, this._cells)
       ]
     },
     scrollTo (vnode) {
@@ -67,9 +82,9 @@
     this.weexType = 'scroller'
 
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('scroller', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('scroller', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
 
     this._cells = this.$slots.default || []
     this.$nextTick(() => {
@@ -79,13 +94,14 @@
     return createElement('main', {
       ref: 'wrapper',
       attrs: { 'weex-type': 'scroller' },
-      staticClass: this.wrapperClass,
-      on: extend(this.createEventMap(), {
+      on: extend(createEventMap(this), {
         scroll: this.handleScroll,
         touchstart: this.handleTouchStart,
         touchmove: this.handleTouchMove,
         touchend: this.handleTouchEnd
-      })
+      }),
+      staticClass: this.wrapperClass,
+      staticStyle: extractComponentStyle(this)
     }, this.createChildren(createElement))
   }
 }
diff --git a/html5/render/vue/components/scrollable/shared.js b/html5/render/vue/components/scrollable/shared.js
deleted file mode 100644
index 2f02c97..0000000
--- a/html5/render/vue/components/scrollable/shared.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { extend } from '../../utils'
-// import header from './header'
-import refresh from './refresh'
-import loading from './loading'
-
-// export function createHeader (context, createElement) {
-//   return createElement(header)
-// }
-
-export function createLoading (context, createElement, vnode) {
-  const options = vnode.componentOptions
-  return createElement(loading, extend({
-    on: options.listeners
-  }, vnode.data), options.children)
-}
-
-export function createRefresh (context, createElement, vnode) {
-  const options = vnode.componentOptions
-  return createElement(refresh, extend({
-    on: options.listeners
-  }, vnode.data), options.children)
-}
diff --git a/html5/render/vue/components/slider/index.js b/html5/render/vue/components/slider/index.js
index f13fba7..c5a1eeb 100644
--- a/html5/render/vue/components/slider/index.js
+++ b/html5/render/vue/components/slider/index.js
@@ -1,11 +1,55 @@
-import { base, event } from '../../mixins'
-import { validateStyles } from '../../validator'
-import { throttle, bind, extend } from '../../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../../validator'
+import { extractComponentStyle, createEventMap } from '../../core'
+import { throttle, bind, extend, fireLazyload } from '../../utils'
 import indicator from './indicator'
 import slideMixin from './slideMixin'
 
+const _css = `
+.weex-slider-wrapper {
+  overflow: hidden;
+}
+
+.weex-slider-inner {
+  position: absolute;
+  height: 100%;
+  top: 0;
+  left: 0;
+}
+
+.weex-slider-cell {
+  display: block;
+  position: absolute;
+  top: 0;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  overflow: hidden;
+}
+`
+
 export default {
-  mixins: [base, event, slideMixin],
+  mixins: [slideMixin],
   props: {
     'auto-play': {
       type: [String, Boolean],
@@ -14,7 +58,12 @@
     interval: {
       type: [String, Number],
       default: 3000
+    },
+    infinite: {
+      type: [String, Boolean],
+      default: true
     }
+
   },
 
   data () {
@@ -58,14 +107,12 @@
           staticClass: 'weex-slider-cell'
         }, [vnode])
       })
-      this._indicator = createElement(indicator, {
-        staticClass: indicatorVnode.data.staticClass,
-        staticStyle: indicatorVnode.data.staticStyle,
-        attrs: {
-          count: cells.length,
-          active: this.currentIndex
-        }
-      })
+      if (indicatorVnode) {
+        indicatorVnode.data.attrs = indicatorVnode.data.attrs || {}
+        indicatorVnode.data.attrs.count = cells.length
+        indicatorVnode.data.attrs.active = this.currentIndex
+        this._indicator = createElement(indicator, indicatorVnode.data)
+      }
       return cells
     }
   },
@@ -85,6 +132,10 @@
     this.reorder()
   },
 
+  updated () {
+    fireLazyload(this.$el, true)
+  },
+
   mounted () {
     if (this.autoPlay && this.autoPlay !== 'false') {
       const interval = Number(this.interval)
@@ -103,17 +154,15 @@
 
       this._autoPlayTimer = setTimeout(autoPlayFn, interval)
     }
-
     this.reorder()
+    fireLazyload(this.$el, true)
   },
 
   render (createElement) {
-    this.prerender()
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     this._cells = this.formatChildren(createElement)
     this.frameCount = this._cells.length
 
@@ -122,20 +171,23 @@
       {
         ref: 'wrapper',
         attrs: { 'weex-type': 'slider' },
-        staticClass: 'weex-slider weex-slider-wrapper',
-        on: extend(this.createEventMap(), {
+        staticClass: 'weex-slider weex-slider-wrapper weex-ct',
+        on: extend(createEventMap(this, ['scroll', 'scrollstart', 'scrollend']), {
           touchstart: this.handleTouchStart,
           touchmove: throttle(bind(this.handleTouchMove, this), 25),
           touchend: this.handleTouchEnd
-        })
+        }),
+        staticStyle: extractComponentStyle(this)
       },
       [
         createElement('ul', {
           ref: 'inner',
-          staticClass: 'weex-slider-inner'
+          staticClass: 'weex-slider-inner weex-ct'
         }, this._cells),
         this._indicator
       ]
     )
-  }
+  },
+  // export default css styles for this component.
+  _css
 }
diff --git a/html5/render/vue/components/slider/indicator.js b/html5/render/vue/components/slider/indicator.js
index 53d4fa4..97388bb 100644
--- a/html5/render/vue/components/slider/indicator.js
+++ b/html5/render/vue/components/slider/indicator.js
@@ -1,64 +1,171 @@
-import { extend } from '../../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle } from '../../core'
+import { extend, extendKeys } from '../../utils'
+
+const _css = `
+.weex-indicator {
+  position: absolute;
+  z-index: 10;
+  -webkit-flex-direction: row;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-box-orient: horizontal;
+  margin: 0;
+  padding: 0;
+}
+
+.weex-indicator-item {
+  display: inline-block;
+  position: relative;
+  border-radius: 50%;
+  width: 0.266667rem;
+  height: 0.266667rem;
+  background-color: #BBBBBB;
+}
+.weex-indicator-item + .weex-indicator-item {
+  margin-left: 0.133333rem;
+}
+
+.weex-indicator-item-active {
+  background-color: blue;
+}
+`
+
+function getIndicatorItemStyle (spec, isActive) {
+  const style = {}
+  style['background-color'] = spec[isActive ? 'itemSelectedColor' : 'itemColor']
+  style['width'] = style['height'] = spec['itemSize']
+  return style
+}
 
 function _render (context, h) {
   const children = []
+  const mergedStyle = extractComponentStyle(context)
+  // const mergedStyle = context._getComponentStyle(context.$vnode.data)
+  // context.$vnode.data.cached = {}
+  // extendKeys(context.$vnode.data.cached, mergedStyle, ['width', 'height'])
+  const indicatorSpecStyle = extendKeys(
+      {},
+      mergedStyle,
+      ['itemColor', 'itemSelectedColor', 'itemSize']
+    )
   for (let i = 0; i < Number(context.count); ++i) {
-    const classNames = ['weex-indicator-item']
+    const classNames = ['weex-indicator-item weex-el']
+    let isActive = false
     if (i === Number(context.active)) {
       classNames.push('weex-indicator-item-active')
+      isActive = true
     }
     children.push(h('mark', {
-      staticClass: classNames.join(' ')
+      staticClass: classNames.join(' '),
+      staticStyle: getIndicatorItemStyle(indicatorSpecStyle, isActive)
     }))
   }
+  context.$nextTick(function () {
+    _reLayout(this, _getVirtualRect(this, mergedStyle), _getLtbr(this, mergedStyle))
+  })
   return h('nav', {
     attrs: { 'weex-type': 'indicator' },
-    staticClass: 'weex-indicator'
+    staticClass: 'weex-indicator weex-ct',
+    staticStyle: mergedStyle
   }, children)
 }
 
 /**
- * calculate and reset indicator's top and left.
+ * get indicator's virtual rect (width, height), which is the .
  */
-function _reLayout (context) {
-  const el = context.$el
-  const mergedStyle = context.$vnode.data.mergedStyle
-  const ctRect = extend({}, context.getParentRect())
-  extend(ctRect, { left: 0, top: 0 })
-  const { width: ctWidth, height: ctHeight, left, top } = ['width', 'height', 'left', 'top']
-    .reduce((pre, name) => {
-      pre[name] = parseFloat(mergedStyle[name] || ctRect[name])
-      return pre
-    }, {})
-  let width, size
+function _getVirtualRect (context, mergedStyle) {
+  const ct = context._getParentRect()
+  const rect = ['width', 'height'].reduce((pre, key) => {
+    const msv = mergedStyle && mergedStyle[key]
+    pre[key] = msv ? parseFloat(msv) : ct[key]
+    return pre
+  }, {})
+  return rect
+}
 
+/**
+ * get indicator's ltbr values (without units).
+ */
+function _getLtbr (context, mergedStyle) {
+  return ['left', 'top', 'bottom', 'right'].reduce((pre, key) => {
+    const msv = mergedStyle && mergedStyle[key]
+    // undefined, null, or '0px' -> o
+    pre[key] = msv && parseFloat(msv) || 0
+    return pre
+  }, {})
+}
+
+/**
+ * get indicator's rect (width, height).
+ */
+function _getIndicatorRect (el) {
+  let width, height
   if (el.children.length === 1) {
-    width = size = window.getComputedStyle(el.children[0])
+    width = height = window.getComputedStyle(el.children[0])
   }
   else {
     const itemComputedStyle = window.getComputedStyle(el.children[1])
     const padding = parseFloat(itemComputedStyle.marginLeft)
-    size = parseFloat(itemComputedStyle.width)
-    width = el.children.length * (size + padding) - padding
+    height = parseFloat(itemComputedStyle.height)
+    width = el.children.length * (height + padding) - padding
   }
+  return { width, height }
+}
 
-  el.style.width = width + 'px'
-  el.style.height = size + 'px'
-  el.style.left = left + ctWidth / 2 - width / 2 + 'px'
-  el.style.top = top + ctHeight / 2 - size / 2 + 'px'
+/**
+ * calculate and reset indicator's width, height, and ltbr.
+ * @param {object} virtualRect. width and height of indicator's virtual rect box.
+ * @param {object} ltbr. the user specified left, top, bottom, right pixels (without units).
+ */
+function _reLayout (context, virtualRect, ltbr) {
+  const el = context.$el
+  const rect = _getIndicatorRect(el)
+  const rectWithPx = Object.keys(rect).reduce((pre, key) => {
+    pre[key] = rect[key] + 'px'
+    return pre
+  }, {})
+  extend(el.style, rectWithPx)
+  const axisMap = [
+    { dir: ltbr.left ? 'left' : ltbr.right ? 'right' : 'left', scale: 'width' },
+    { dir: ltbr.top ? 'top' : ltbr.bottom ? 'bottom' : 'top', scale: 'height' }
+  ]
+  Object.keys(axisMap).forEach(key => {
+    const { dir, scale } = axisMap[key]
+    el.style[dir] = ltbr[dir] + virtualRect[scale] / 2 - rect[scale] / 2 + 'px'
+  })
 }
 
 export default {
   name: 'indicator',
+  methods: {
+    show: function () {
+      this.$el.style.visibility = 'visible'
+    }
+  },
   props: {
     count: [Number, String],
     active: [Number, String]
   },
-  mounted: function () {
-    _reLayout(this)
-  },
   render (createElement) {
-    this.prerender()
     return _render(this, createElement)
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/slider/slideMixin.js b/html5/render/vue/components/slider/slideMixin.js
index 43efa50..6edb469 100644
--- a/html5/render/vue/components/slider/slideMixin.js
+++ b/html5/render/vue/components/slider/slideMixin.js
@@ -1,5 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { createEvent/*, nextFrame*/, fireLazyload, addTransform } from '../../utils'
+
 const TRANSITION_TIME = 200
 
+const MAIN_SLIDE_SCALE = 0.9
+const MAIN_SLIDE_OPACITY = 1
+
+// trigger scroll event frequency.
+// const scrollDam = 16
+
 export default {
   methods: {
     // get standard index
@@ -9,45 +35,135 @@
     },
 
     slideTo (index) {
-      const newIndex = this.normalizeIndex(index)
-      this.innerOffset += Math.sign(this.currentIndex - index) * this.wrapperWidth
+      if (!this.infinite || this.infinite === 'false') {
+        if (index === -1 || index > (this._cells.length - 1)) {
+          this.slideTo(this.currentIndex)
+          return
+        }
+      }
 
+      const newIndex = this.normalizeIndex(index)
       const inner = this.$refs.inner
+      const step = this._cells.length <= 1 ? 0 : this.currentIndex - index
+      this.innerOffset += Math.sign(step) * this.wrapperWidth
       if (inner) {
+        // const match = (inner.style.transform || inner.style.webkitTransform).match(/(\d+)px/)
+        // const currentOffset = parseFloat(match[1])
         // TODO: will-change | set styles together
+        inner.style.webkitTransition = `-webkit-transform .2s ease-in-out`
         inner.style.transition = `transform .2s ease-in-out`
+        inner.style.webkitTransform = `translate3d(${this.innerOffset}px, 0, 0)`
         inner.style.transform = `translate3d(${this.innerOffset}px, 0, 0)`
         setTimeout(() => {
+          inner.style.webkitTransition = ''
           inner.style.transition = ''
         }, TRANSITION_TIME)
       }
+      // TODO: emit scroll event.
+      // nextFrame()
 
       if (newIndex !== this.currentIndex) {
         this.currentIndex = newIndex
-        this.$emit('change', this.createEvent('change', {
+        // replace $el with { attr, style } is a legacy usage. Is it necessary to
+        // do this ? Or just tell devers to use inline functions to access attrs ?
+        this.$emit('change', createEvent(this.$el, 'change', {
           index: this.currentIndex
         }))
         setTimeout(() => { this.reorder() }, TRANSITION_TIME)
       }
     },
-
-    reorder () {
+    order () {
       this.$nextTick(() => {
+        for (let i = 1, l = this._cells.length; i < l; i++) {
+          const nextElm = this._cells[i].elm
+          const nextOffset = this.wrapperWidth * i
+          nextElm.style.webkitTransform = `translate3d(${nextOffset}px, 0, 0)`
+          nextElm.style.transform = `translate3d(${nextOffset}px, 0, 0)`
+        }
+        // this.reorder()
+      })
+    },
+    reorder () {
+      // dir: 'current' | 'prev' | 'next'
+      const setPosition = (elm, dir) => {
+        const scale = window.weex.config.env.scale
+        let neighborScale = this.neighborScale
+        let opacity = this.neighborAlpha
+        let offsetX = -this.innerOffset
+        let offsetY = 0
+        if (dir === 'current') {
+          elm.style.zIndex = 1
+          neighborScale = MAIN_SLIDE_SCALE
+          opacity = MAIN_SLIDE_OPACITY
+        }
+
+        const origin = dir === 'prev' ? '100% 0' : '0 0'
+        elm.style.webkitTransformOrigin = origin
+        elm.style.transformOrigin = origin
+
+        const sign = dir === 'current' ? 0 : dir === 'prev' ? -1 : 1
+        offsetX = -this.innerOffset + sign * this.wrapperWidth
+        if (this.isNeighbor) {
+          offsetY = (1 - neighborScale) * this.wrapperHeight / 2
+          elm.style.opacity = opacity
+          if (dir === 'current') {
+            offsetX += this.wrapperWidth * (1 - neighborScale) / 2
+          }
+          else {
+            offsetX = offsetX - sign * this.neighborSpace * scale
+          }
+        }
+
+        elm.style.width = this.wrapperWidth + 'px'
+        addTransform(elm, {
+          translate: `translate3d(${offsetX}px, ${offsetY}px, 0)`,
+          scale: this.isNeighbor && `scale(${neighborScale})`
+        })
+      }
+
+      const removeClone = (clone, prevElm) => {
+        // switch current page.
+        setPosition(prevElm, 'current')
+        // const curTransform = `translate3d(${-this.innerOffset}px, 0, 0)`
+        // prevElm.style.transform = curTransform
+        // prevElm.style.webkitTransform = curTransform
+        // remove clone node.
+        clone && clone.parentElement.removeChild(clone)
+      }
+
+      this.$nextTick(() => {
+        if (this._cells.length <= 1) {
+          return
+        }
+        if (!this.infinite || this.infinite === 'false') {
+          this.order()
+          return
+        }
+        const lastPrev = this._prevElm
         const prevIndex = this.normalizeIndex(this.currentIndex - 1)
         const nextIndex = this.normalizeIndex(this.currentIndex + 1)
-        // TODO: clone frame when prevIndex === nextIndex
-        // if (prevIndex !== nextIndex) {
-        // }
-        const prevCell = this._cells[prevIndex]
-        const nextCell = this._cells[nextIndex]
-        if (prevCell && prevCell.elm) {
-          const prevOffset = -this.wrapperWidth - this.innerOffset
-          prevCell.elm.style.transform = `translate3d(${prevOffset}px, 0, 0)`
+        let prevElm = this._prevElm = this._cells[prevIndex].elm
+        const nextElm = this._cells[nextIndex].elm
+        const currentElm = this._cells[this.currentIndex].elm
+
+        // put current slide on the top.
+        setPosition(currentElm, 'current')
+
+        // clone prevCell if there are only tow slides.
+        if (this._cells.length === 2) {
+          this._clonePrev && removeClone(this._clonePrev, lastPrev)
+          this._clonePrev = prevElm.cloneNode(true)
+          this._clonePrev.classList.add('weex-slide-clone-prev')
+          prevElm.parentElement.insertBefore(this._clonePrev, currentElm)
+          if (!this._prevFired) {
+            fireLazyload(this._clonePrev, true)
+            this._prevFired = true
+          }
+          prevElm = this._clonePrev
         }
-        if (nextCell && nextCell.elm) {
-          const nextOffset = this.wrapperWidth - this.innerOffset
-          nextCell.elm.style.transform = `translate3d(${nextOffset}px, 0, 0)`
-        }
+
+        setPosition(prevElm, 'prev')
+        setPosition(nextElm, 'next')
       })
     },
 
@@ -60,14 +176,10 @@
     },
 
     handleTouchStart (event) {
-      event.preventDefault()
       event.stopPropagation()
-      // console.log('touch start', event)
       const touch = event.changedTouches[0]
-      // console.log('touch start', event.target, event.target.pageY)
-      // console.log('touches', touch)
       this._touchParams = {
-        originalTransform: this.$refs.inner.style.transform,
+        originalTransform: this.$refs.inner.style.webkitTransform || this.$refs.inner.style.transform,
         startTouchEvent: touch,
         startX: touch.pageX,
         startY: touch.pageY,
@@ -76,36 +188,56 @@
     },
 
     handleTouchMove (event) {
-      event.preventDefault()
       event.stopPropagation()
-      // console.log('touch move')
-      if (this._touchParams) {
-        const inner = this.$refs.inner
-        const { startX } = this._touchParams
-        const touch = event.changedTouches[0]
-        const offsetX = touch.pageX - startX
-        // console.log('offsetX', offsetX, 'startX', startX, 'pageX', touch.pageX)
-        this._touchParams.offsetX = offsetX
-
-        if (inner && offsetX) {
-          inner.style.transform = `translate3d(${this.innerOffset + offsetX}px, 0, 0)`
+      const tp = this._touchParams
+      if (!tp) { return }
+      const { startX, startY } = this._touchParams
+      const touch = event.changedTouches[0]
+      const offsetX = touch.pageX - startX
+      const offsetY = touch.pageY - startY
+      tp.offsetX = offsetX
+      tp.offsetY = offsetY
+      let isV = tp.isVertical
+      if (typeof isV === 'undefined') {
+        isV = tp.isVertical = Math.abs(offsetX) < Math.abs(offsetY)
+        if (!isV) {
+          this.$emit('scrollstart', createEvent(this.$el, 'scrollstart', {}))
         }
       }
+      // vertical scroll. just ignore it.
+      if (isV) {
+        return
+      }
+      // horizontal scroll. trigger scroll event.
+      event.preventDefault()
+      const inner = this.$refs.inner
+      if (inner && offsetX) {
+        // TODO: add throttle.
+        this.$emit('scroll', createEvent(this.$el, 'scroll', {
+          offsetXRatio: offsetX / this.wrapperWidth
+        }))
+        inner.style.transform = `translate3d(${this.innerOffset + offsetX}px, 0, 0)`
+        inner.style.webkitTransform = `translate3d(${this.innerOffset + offsetX}px, 0, 0)`
+      }
     },
 
     handleTouchEnd (event) {
-      event.preventDefault()
       event.stopPropagation()
-      // console.log('touch end')
+      const tp = this._touchParams
+      if (!tp) { return }
+      const isV = tp.isVertical
+      if (typeof isV === 'undefined') {
+        return
+      }
       const inner = this.$refs.inner
-      if (this._touchParams) {
-        const { offsetX } = this._touchParams
-        if (inner) {
-          const reset = Math.abs(offsetX / this.wrapperWidth) < 0.2
-          const direction = offsetX > 0 ? 1 : -1
-          const newIndex = reset ? this.currentIndex : (this.currentIndex - direction)
-          this.slideTo(newIndex)
-        }
+      const { offsetX } = tp
+      if (inner) {
+        this.$emit('scrollend', createEvent(this.$el, 'scrollend'))
+        // TODO: test the velocity if it's less than 0.2.
+        const reset = Math.abs(offsetX / this.wrapperWidth) < 0.2
+        const direction = offsetX > 0 ? 1 : -1
+        const newIndex = reset ? this.currentIndex : (this.currentIndex - direction)
+        this.slideTo(newIndex)
       }
       delete this._touchParams
     }
diff --git a/html5/render/vue/components/slider/slider-neighbor.css b/html5/render/vue/components/slider/slider-neighbor.css
new file mode 100644
index 0000000..4bd34bf
--- /dev/null
+++ b/html5/render/vue/components/slider/slider-neighbor.css
@@ -0,0 +1,21 @@
+.weex-slider > .weex-slider-inner {
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
+
+.weex-neighbor-item {
+  position: absolute !important;
+  top: 50% !important;
+  left: 50% !important;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  justify-content: center;
+}
diff --git a/html5/render/vue/components/slider/slider-neighbor.js b/html5/render/vue/components/slider/slider-neighbor.js
new file mode 100644
index 0000000..ec118e9
--- /dev/null
+++ b/html5/render/vue/components/slider/slider-neighbor.js
@@ -0,0 +1,182 @@
+// import { validateStyles } from '../../validator'
+import './slider-neighbor.css'
+import { extractComponentStyle, createEventMap } from '../../core'
+import { throttle, bind, extend, fireLazyload } from '../../utils'
+import indicator from './indicator'
+import slideMixin from './slideMixin'
+
+const DEFAULT_NEIGHBOR_SPACE = 20
+const DEFAULT_NEIGHBOR_ALPHA = 0.6
+const DEFAULT_NEIGHBOR_SCALE = 0.8
+
+let id = 0
+export default {
+  mixins: [slideMixin],
+  props: {
+    autoPlay: {
+      type: [String, Boolean],
+      default: false
+    },
+    interval: {
+      type: [String, Number],
+      default: 3000
+    },
+    infinite: {
+      type: [String, Boolean],
+      default: true
+    },
+    neighborSpace: {
+      type: [String, Number],
+      validator: function (val) {
+        val = parseFloat(val)
+        return !isNaN(val) && val > 0
+      },
+      default: DEFAULT_NEIGHBOR_SPACE
+    },
+    neighborAlpha: {
+      type: [String, Number],
+      validator: function (val) {
+        val = parseFloat(val)
+        return !isNaN(val) && val >= 0 && val <= 1
+      },
+      default: DEFAULT_NEIGHBOR_ALPHA
+    },
+    neighborScale: {
+      type: [String, Number],
+      validator: function (val) {
+        val = parseFloat(val)
+        return !isNaN(val) && val >= 0 && val <= 1
+      },
+      default: DEFAULT_NEIGHBOR_SCALE
+    }
+  },
+
+  data () {
+    return {
+      currentIndex: 0,
+      frameCount: 0
+    }
+  },
+
+  methods: {
+    computeWrapperSize () {
+      const wrapper = this.$refs.wrapper
+      if (wrapper) {
+        const rect = wrapper.getBoundingClientRect()
+        this.wrapperWidth = rect.width
+        this.wrapperHeight = rect.height
+      }
+    },
+
+    updateLayout () {
+      this.computeWrapperSize()
+      const inner = this.$refs.inner
+      if (inner) {
+        inner.style.width = this.wrapperWidth * this.frameCount + 'px'
+      }
+    },
+
+    formatChildren (createElement) {
+      const children = this.$slots.default || []
+      let indicatorVnode
+      const cells = children.filter(vnode => {
+        if (!vnode.tag) return false
+        if (vnode.componentOptions && vnode.componentOptions.tag === 'indicator') {
+          indicatorVnode = vnode
+          return false
+        }
+        return true
+      }).map(vnode => {
+        return createElement('li', {
+          ref: 'cells',
+          staticClass: 'weex-slider-cell'
+        }, [vnode])
+      })
+      if (indicatorVnode) {
+        indicatorVnode.data.attrs = indicatorVnode.data.attrs || {}
+        indicatorVnode.data.attrs.count = cells.length
+        indicatorVnode.data.attrs.active = this.currentIndex
+        this._indicator = createElement(indicator, indicatorVnode.data)
+      }
+      return cells
+    }
+  },
+
+  beforeCreate () {
+    this.isNeighbor = true
+  },
+
+  created () {
+    this.weexType = 'slider-neighbor'
+    this.currentIndex = 0
+    this.innerOffset = 0
+    this._indicator = null
+    this.id = id++
+    this.$nextTick(() => {
+      this.updateLayout()
+    })
+  },
+
+  beforeUpdate () {
+    this.updateLayout()
+    this.reorder()
+  },
+
+  updated () {
+    fireLazyload(this.$el, true)
+  },
+
+  mounted () {
+    if (this.autoPlay && this.autoPlay !== 'false') {
+      const interval = Number(this.interval)
+      this._lastSlideTime = Date.now()
+
+      const autoPlayFn = bind(function () {
+        clearTimeout(this._autoPlayTimer)
+        const now = Date.now()
+        let nextTick = interval - now + this._lastSlideTime
+        nextTick = nextTick > 100 ? nextTick : interval
+
+        this.next()
+        this._lastSlideTime = now
+        this._autoPlayTimer = setTimeout(autoPlayFn, nextTick)
+      }, this)
+
+      this._autoPlayTimer = setTimeout(autoPlayFn, interval)
+    }
+
+    this.reorder()
+    fireLazyload(this.$el, true)
+  },
+
+  render (createElement) {
+    /* istanbul ignore next */
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('slider', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    this._cells = this.formatChildren(createElement)
+    this.frameCount = this._cells.length
+
+    return createElement(
+      'nav',
+      {
+        ref: 'wrapper',
+        attrs: { 'weex-type': 'slider-neighbor' },
+        on: extend(createEventMap(this, ['scroll', 'scrollstart', 'scrollend']), {
+          touchstart: this.handleTouchStart,
+          touchmove: throttle(bind(this.handleTouchMove, this), 25),
+          touchend: this.handleTouchEnd
+        }),
+        staticClass: 'weex-slider weex-slider-wrapper weex-ct',
+        staticStyle: extractComponentStyle(this)
+      },
+      [
+        createElement('ul', {
+          ref: 'inner',
+          staticClass: 'weex-slider-inner weex-ct'
+        }, this._cells),
+        this._indicator
+      ]
+    )
+  }
+}
diff --git a/html5/render/vue/components/switch.js b/html5/render/vue/components/switch.js
index b284088..426beb5 100644
--- a/html5/render/vue/components/switch.js
+++ b/html5/render/vue/components/switch.js
@@ -1,8 +1,82 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../validator'
+import { extractComponentStyle } from '../core'
+
+const _css = `
+.weex-switch {
+  border: 0.013333rem solid #dfdfdf;
+  cursor: pointer;
+  display: inline-block;
+  position: relative;
+  vertical-align: middle;
+  -webkit-user-select: none;
+     -moz-user-select: none;
+      -ms-user-select: none;
+          user-select: none;
+  box-sizing: content-box;
+  background-clip: content-box;
+  color: #64bd63;
+  width: 1.333333rem;
+  height: 0.8rem;
+  background-color: white;
+  border-color: #dfdfdf;
+  box-shadow: #dfdfdf 0 0 0 0 inset;
+  border-radius: 0.8rem;
+  -webkit-transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
+          transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
+}
+
+.weex-switch-checked {
+  background-color: #64bd63;
+  border-color: #64bd63;
+  box-shadow: #64bd63 0 0 0 0.533333rem inset;
+}
+
+.weex-switch-checked.weex-switch-disabled {
+  background-color: #A0CCA0;
+  box-shadow: #A0CCA0 0 0 0 0.533333rem inset;
+}
+
+.weex-switch-disabled {
+  background-color: #EEEEEE;
+}
+
+.weex-switch-inner {
+  width: 0.8rem;
+  height: 0.8rem;
+  background: #fff;
+  border-radius: 100%;
+  box-shadow: 0 0.013333rem 0.04rem rgba(0, 0, 0, 0.4);
+  position: absolute;
+  top: 0;
+  left: 0;
+  -webkit-transition: background-color 0.4s, left 0.2s;
+          transition: background-color 0.4s, left 0.2s;
+}
+
+.weex-switch-checked > .weex-switch-inner {
+  left: 0.533333rem;
+}
+`
 
 export default {
-  mixins: [base],
   props: {
     checked: {
       type: [Boolean, String],
@@ -39,19 +113,20 @@
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('switch', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('switch', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
     return createElement('span', {
       attrs: { 'weex-type': 'switch' },
-      staticClass: this.wrapperClass,
       on: {
         click: event => {
           this.$emit('click', event)
           this.toggle()
         }
-      }
+      },
+      staticClass: this.wrapperClass,
+      staticStyle: extractComponentStyle(this)
     }, [createElement('small', { staticClass: 'weex-switch-inner' })])
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/text.js b/html5/render/vue/components/text.js
index 48b2b4f..b93540b 100644
--- a/html5/render/vue/components/text.js
+++ b/html5/render/vue/components/text.js
@@ -1,44 +1,79 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
-import { extend } from '../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 /**
- * Get text styles
+ * @fileOverview Impl of text component.
+ *
+ * Notes about the style 'height' and 'lines':
+ * if the computed value of 'height' is bigger than 'lines', than the text will
+ * be clipped according to the 'lines'. Otherwise, it'll be the 'height'.
  */
-function getTextStyle (context = {}) {
-  const vnode = context.$vnode || {}
-  const staticStyle = vnode.data && vnode.data.staticStyle || {}
-  const mergedStyle = vnode.data && vnode.data.mergedStyle || {}
-  const lines = parseInt(mergedStyle.lines) || 0
+
+import { extractComponentStyle, createEventMap } from '../core'
+import { extend } from '../utils'
+
+const _css = `
+.weex-text {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  position: relative;
+  white-space: pre-wrap;  /* not using 'pre': support auto line feed. */
+  font-size: 0.426667rem;
+  word-wrap: break-word;
+  overflow: hidden; /* it'll be clipped if the height is not high enough. */
+}
+`
+
+/**
+ * Get text special styles (lines and text-overflow).
+ */
+function getTextSpecStyle (ms = {}) {
+  const lines = parseInt(ms.lines) || 0
+  const overflow = ms['text-overflow'] || 'ellipsis'
   if (lines > 0) {
-    return extend(staticStyle, {
+    return {
       overflow: 'hidden',
-      textOverflow: 'ellipsis',
-      webkitLineClamp: lines
-    })
+      'text-overflow': overflow,
+      '-webkit-line-clamp': lines
+    }
   }
-  return staticStyle
 }
 
 export default {
-  mixins: [base],
   props: {
     lines: [Number, String],
     value: [String]
   },
 
   render (createElement) {
-    this.prerender()
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('text', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('text', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    const style = extractComponentStyle(this)
+    const textSpecStyle = getTextSpecStyle(style)
     return createElement('p', {
       attrs: { 'weex-type': 'text' },
-      on: this.createEventMap(),
-      staticClass: 'weex-text',
-      staticStyle: getTextStyle(this)
+      on: createEventMap(this),
+      staticClass: 'weex-text weex-el',
+      staticStyle: extend(style, textSpecStyle)
     }, this.$slots.default || [this.value])
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/components/textarea.js b/html5/render/vue/components/textarea.js
index 7614be0..a1851ee 100644
--- a/html5/render/vue/components/textarea.js
+++ b/html5/render/vue/components/textarea.js
@@ -1,9 +1,38 @@
-import { base } from '../mixins'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle, createEventMap } from '../core'
+import { inputCommon } from '../mixins'
 import { extend, mapFormEvents } from '../utils'
-import { validateStyles } from '../validator'
+
+// import { validateStyles } from '../validator'
+
+const _css = `
+.weex-textarea {
+  font-size: 0.426667rem
+}
+.weex-textarea:focus {
+  outline: none;
+}
+`
 
 export default {
-  mixins: [base],
+  mixins: [inputCommon],
   props: {
     value: String,
     placeholder: String,
@@ -18,15 +47,16 @@
     rows: {
       type: [String, Number],
       default: 2
-    }
+    },
+    returnKeyType: String
   },
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('textarea', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
-
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('textarea', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
+    const events = extend(createEventMap(this), mapFormEvents(this))
     return createElement('html:textarea', {
       attrs: {
         'weex-type': 'textarea',
@@ -34,10 +64,16 @@
         disabled: (this.disabled !== 'false' && this.disabled !== false),
         autofocus: (this.autofocus !== 'false' && this.autofocus !== false),
         placeholder: this.placeholder,
-        rows: this.rows
+        rows: this.rows,
+        'return-key-type': this.returnKeyType
       },
-      on: extend(this.createEventMap(), mapFormEvents(this)),
-      staticClass: 'weex-textarea'
-    }, this.value)
-  }
+      domProps: {
+        value: this.value
+      },
+      on: this.createKeyboardEvent(events),
+      staticClass: 'weex-textarea weex-el',
+      staticStyle: extractComponentStyle(this)
+    })
+  },
+  _css
 }
diff --git a/html5/render/vue/components/video.js b/html5/render/vue/components/video.js
index 97efd1d..b39bf4a 100644
--- a/html5/render/vue/components/video.js
+++ b/html5/render/vue/components/video.js
@@ -1,8 +1,25 @@
-import { base } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// import { validateStyles } from '../validator'
+import { extractComponentStyle, createEventMap } from '../core'
 
 export default {
-  mixins: [base],
   props: {
     src: String,
     playStatus: {
@@ -34,9 +51,9 @@
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('video', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('video', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
 
     // TODO: support playStatus
     return createElement('html:video', {
@@ -47,8 +64,9 @@
         controls: this.controls,
         src: this.src
       },
-      on: this.createEventMap(['start', 'pause', 'finish', 'fail']),
-      staticClass: 'weex-video'
+      on: createEventMap(this, ['start', 'pause', 'finish', 'fail']),
+      staticClass: 'weex-video weex-el',
+      staticStyle: extractComponentStyle(this)
     })
   }
 }
diff --git a/html5/render/vue/components/warning.js b/html5/render/vue/components/warning.js
index 42d29e1..45f9737 100644
--- a/html5/render/vue/components/warning.js
+++ b/html5/render/vue/components/warning.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export default {
   render () {
     // TODO: add tag nesting validation
diff --git a/html5/render/vue/components/web.js b/html5/render/vue/components/web.js
index e4fd2e5..1bf95a6 100644
--- a/html5/render/vue/components/web.js
+++ b/html5/render/vue/components/web.js
@@ -1,8 +1,36 @@
-import { base, event } from '../mixins'
-import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { extractComponentStyle, createEventMap } from '../core'
+import { createEvent } from '../utils'
+// import { validateStyles } from '../validator'
+
+const _css = `
+.weex-web {
+  position: relative;
+  width: 100%;
+  height: 100%;
+  border: none;
+  box-sizing: border-box;
+}
+`
 
 export default {
-  mixins: [base, event],
   props: {
     src: String
   },
@@ -27,26 +55,28 @@
 
   mounted () {
     if (this.$el) {
-      this.$emit('pagefinish', this.createCustomEvent(this, 'pagestart', { url: this.src }))
+      this.$emit('pagestart', createEvent(this.$el, 'pagestart', { url: this.src }))
       this.$el.addEventListener('load', event => {
-        this.$emit('pagefinish', this.createCustomEvent(this, 'pagefinish', { url: this.src }))
+        this.$emit('pagefinish', createEvent(this.$el, 'pagefinish', { url: this.src }))
       })
     }
   },
 
   render (createElement) {
     /* istanbul ignore next */
-    if (process.env.NODE_ENV === 'development') {
-      validateStyles('web', this.$vnode.data && this.$vnode.data.staticStyle)
-    }
+    // if (process.env.NODE_ENV === 'development') {
+    //   validateStyles('web', this.$vnode.data && this.$vnode.data.staticStyle)
+    // }
 
     return createElement('iframe', {
       attrs: {
         'weex-type': 'web',
         src: this.src
       },
-      on: this.createEventMap(['error']),
-      staticClass: 'weex-web'
+      on: createEventMap(this, ['error']),
+      staticClass: 'weex-web weex-el',
+      staticStyle: extractComponentStyle(this)
     })
-  }
+  },
+  _css
 }
diff --git a/html5/render/vue/core/index.js b/html5/render/vue/core/index.js
new file mode 100644
index 0000000..0121da0
--- /dev/null
+++ b/html5/render/vue/core/index.js
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+export * from './style'
+export * from './node'
diff --git a/html5/render/vue/core/node.js b/html5/render/vue/core/node.js
new file mode 100644
index 0000000..e9a28df
--- /dev/null
+++ b/html5/render/vue/core/node.js
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * remove text nodes in the nodes array.
+ * @param  {Array} nodes
+ * @return {Array} nodes without text nodes.
+ */
+export function trimTextVNodes (vnodes) {
+  if (Array.isArray(vnodes)) {
+    return vnodes.filter(vnode => !!vnode.tag)
+  }
+  return vnodes
+}
+
+/**
+ * get listeners from on config and v-on binding.
+ * v-on binding has a priority over on config.
+ * @param {vnode} vnode
+ * @param {String} evt: event name.
+ */
+function getListeners (vnode, evt) {
+  const handlers = []
+  while (vnode) {
+    if (vnode.data && vnode.data.on) {
+      const handler = vnode.data.on[evt]
+      handler && handlers.push(handler)
+    }
+    if (vnode.componentOptions && vnode.componentOptions.listeners) {
+      const handler = vnode.componentOptions.listeners[evt]
+      handler && handlers.push(handler)
+    }
+    vnode = vnode.parent
+  }
+  return handlers
+}
+
+const supportedEvents = [
+  'click', 'longpress', 'appear', 'disappear',
+  // 'touchstart', 'touchmove', 'touchend',
+  'panstart', 'panmove', 'panend', 'swipe', 'longpress'
+]
+/**
+ * emit native events to enable v-on.
+ * @param {VComponent} context: which one to emit a event on.
+ * @param {array} extras: extra events.
+ */
+export function createEventMap (context, extras = []) {
+  const eventMap = {}
+  supportedEvents.concat(extras).forEach(name => {
+    eventMap[name] = function (e) {
+      // no original bubbling.
+      e.stopPropagation()
+      // but should trigger the closest parent which has bound the
+      // event handler.
+      let vm = context
+      while (vm) {
+        const ons = getListeners(vm.$vnode, name)
+        const len = ons.length
+        let idx = 0
+        while (idx < len) {
+          let on = ons[idx]
+          if (on && on.fn) {
+            on = on.fn
+          }
+          on && on.call(vm, e)
+          idx++
+        }
+
+        // once a parent node (or self node) has triggered the handler,
+        // then it stops bubble immediately.
+        if (len > 0) {
+          return
+        }
+        vm = vm.$parent
+      }
+    }
+  })
+  return eventMap
+}
diff --git a/html5/render/vue/core/style.js b/html5/render/vue/core/style.js
new file mode 100644
index 0000000..b324cde
--- /dev/null
+++ b/html5/render/vue/core/style.js
@@ -0,0 +1,261 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import {
+  camelizeKeys,
+  // hyphenateKeys,
+  extend,
+  trimComment,
+  normalizeStyle
+} from '../utils'
+import { tagBegin, tagEnd } from '../utils/perf'
+/* istanbul ignore next */
+import addPrefix from 'inline-style-prefixer/static'
+
+/**
+ * get scoped class style map from stylesheets in <head>.
+ */
+export function getHeadStyleMap () {
+  if (process.env.NODE_ENV === 'development') {
+    tagBegin('getHeadStyleMap')
+  }
+  const needToRemoveStyleSheetNodes = []
+  const res = Array.from(document.styleSheets || [])
+    .reduce((pre, styleSheet) => {
+      /**
+       * why not using styleSheet.rules || styleSheet.cssRules to get css rules ?
+       * because weex's components defined non-standard style attributes, which is
+       * auto ignored when access rule.cssText.
+       */
+      if (!styleSheet.cssRules
+        || (styleSheet.ownerNode.tagName.toLowerCase() === 'link')
+        || !styleSheet.ownerNode.textContent) {
+        /**
+         * no rules, or in a link. just ignore this. probably a link stylesheet.
+         */
+        return pre
+      }
+      const strArr = trimComment(styleSheet.ownerNode.textContent.trim()).split(/}/)
+      const len = strArr.length
+      const rules = []
+      for (let i = 0; i < len; i++) {
+        const str = strArr[i]
+        if (!str || str.match(/^\s*$/)) {
+          continue
+        }
+        /**
+         * should match these cases:
+         * .a[data-v-xxx] { color: red }
+         * .a[data-v-xxx], .b[data-v-xxx] { color: red; }
+         *
+         * should not match these cases:
+         * .a { color: red; }
+         * etc.
+         */
+        const match = str.match(/((?:,?\s*\.[\w-]+\[data-v-\w+\](?::\w+)?)+)\s*({[^}]+)/)
+        if (!match) {
+          // not the vue static class styles map. so acquire no rules for this styleSheet.
+          // just jump through this styleSheet and go to analyzing next.
+          return pre
+        }
+        const clsNms = match[1].split(',').map(n => n.trim())
+        const cssText = match[2].replace(/[{}]/g, '').trim()
+        let clsNmsIdx = 0
+        const clsNmsLen = clsNms.length
+        while (clsNmsIdx < clsNmsLen) {
+          rules.push({
+            selectorText: clsNms[clsNmsIdx],
+            cssText
+          })
+          clsNmsIdx++
+        }
+      }
+      Array.from(rules).forEach(rule => {
+        const selector = rule.selectorText || ''
+        const styleObj = trimComment(rule.cssText).split(';')
+          .reduce((styleObj, statement) => {
+            statement = statement.trim()
+            if (statement && statement.indexOf('/*') <= -1) {
+              const resArr = statement.split(':').map((part) => part.trim())
+              styleObj[resArr[0]] = resArr[1]
+            }
+            return styleObj
+          }, {})
+        const res = pre[selector]
+        if (!res) {
+          pre[selector] = styleObj
+        }
+        else {
+          extend(pre[selector], styleObj)
+        }
+      })
+      /**
+       * remove this styleSheet node since it's in the styleMap already. And this style
+       * should only be fetched and used from styleMap to generate the final combined
+       * component style, not from the stylesheet itself.
+       */
+      needToRemoveStyleSheetNodes.push(styleSheet.ownerNode)
+      return pre
+    }, {})
+  if (!window._no_remove_style_sheets) {
+    needToRemoveStyleSheetNodes.forEach(function (node) {
+      node.parentNode.removeChild(node)
+    })
+  }
+  else if (process.env.NODE_ENV === 'development') {
+    console.warn(`[vue-render] you've defined '_no_remove_style_sheets' and the v-data-xx stylesheets will not be removed.`)
+  }
+  if (process.env.NODE_ENV === 'development') {
+    tagEnd('getHeadStyleMap')
+  }
+  return res
+}
+
+// export function getScopeIds (context) {
+//   const arr = []
+//   let ctx = context
+//   let scopeId
+//   while (ctx) {
+//     scopeId = ctx.$options._scopeId
+//     scopeId && arr.push(scopeId)
+//     ctx = ctx.$options.parent
+//   }
+//   return arr
+// }
+
+export function getScopeId (vnode) {
+  return vnode.context.$options._scopeId
+}
+
+/**
+ * get style in <style scoped> tags for this component.
+ */
+export function getScopeStyle (vnode, classNames) {
+  const scopeId = getScopeId(vnode)
+  const style = {}
+  const styleMap = weex.styleMap
+  let clsNmsIdx = 0
+  const clsNmsLen = classNames.length
+  while (clsNmsIdx < clsNmsLen) {
+    const cls = `.${classNames[clsNmsIdx]}[${scopeId}]`
+    const map = styleMap[cls]
+    map && extend(style, map)
+    clsNmsIdx++
+  }
+  return style
+}
+
+function getStyle (vnode, extract) {
+  const data = vnode.data || {}
+  const staticClassNames = (typeof data.staticClass === 'string') ? data.staticClass.split(' ') : (data.staticClass || [])
+  const classNames = (typeof data.class === 'string') ? data.class.split(' ') : (data.class || [])
+  const clsNms = staticClassNames.concat(classNames)
+  const style = getScopeStyle(vnode, clsNms)
+  if (!data.cached) {
+    // cache staticStyle once in the beginning.
+    data.cached = extend({}, data.staticStyle)
+  }
+  // cache binding style every time since the binding style is variable.
+  extend(data.cached, data.style)
+  extend(style, data.cached)
+  data.staticStyle = style
+  if (extract) {
+    delete data.staticStyle
+    delete data.style
+  }
+  return camelizeKeys(style)
+}
+
+/**
+ * get style merged with static styles, binding styles, and scoped class styles,
+ * with keys in camelcase.
+ */
+export function getComponentStyle (context, extract) {
+  if (!context.$vnode) {
+    if (process.env.NODE_ENV === 'development') {
+      return console.error('[vue-render] getComponentStyle failed: no $vnode in context.')
+    }
+    return {}
+  }
+  let style = {}
+  let vnode = context.$vnode
+  while (vnode) {
+    extend(style, getStyle(vnode, extract))
+    vnode = vnode.parent
+  }
+  style = addPrefix(normalizeStyle(style))
+  /**
+   * when prefixed value is a array, it should be applied to element
+   * during the next tick.
+   * e.g.
+   *  background-image:  linear-gradient(to top,#f5fefd,#ffffff);
+   *  will generate:
+   *  {
+   *    backgroundImage: [
+   *      "-webkit-linear-gradient(to top,#f5fefd,#ffffff)",
+   *      "-moz-linear-gradient(to top,#f5fefd,#ffffff)",
+   *      "linear-gradient(to top,#f5fefd,#ffffff)"]
+   *  }
+   */
+  for (const k in style) {
+    if (Array.isArray(style[k])) {
+      const vals = style[k]
+      context.$nextTick(function () {
+        const el = context.$el
+        if (el) {
+          for (let i = 0; i < vals.length; i++) {
+            el.style[k] = vals[i]
+          }
+        }
+      })
+      delete style[k]
+    }
+  }
+  return style
+  // return addPrefix(normalizeStyle(style))
+}
+
+export function extractComponentStyle (context) {
+  return getComponentStyle(context, true)
+}
+
+/**
+ * get { width, height } (size) of current component from components' styles.
+ */
+export function getSize (context) {
+  if (!context.$vnode) {
+    if (process.env.NODE_ENV === 'development') {
+      return console.error('[vue-render] getComponentStyle failed: no $vnode in context.')
+    }
+    return {}
+  }
+  const data = context.$vnode.data
+  const wh = {}
+  const classes = typeof data.class === 'string' ? data.class.split(' ') : (data.class || [])
+  const staticClass = typeof data.staticClass === 'string' ? data.staticClass.split(' ') : (data.class || [])
+  const clsNms = staticClass.concat(classes)
+  function extendWHFrom (to, from) {
+    if (!from) { return }
+    from.width && (to.width = from.width)
+    from.height && (to.height = from.height)
+  }
+  extendWHFrom(wh, this._getScopeStyle(clsNms))
+  extendWHFrom(wh, data.staticStyle)
+  extendWHFrom(wh, data.style)
+  return wh
+}
diff --git a/html5/render/vue/env/WXEnvironment.js b/html5/render/vue/env/WXEnvironment.js
deleted file mode 100644
index db2833c..0000000
--- a/html5/render/vue/env/WXEnvironment.js
+++ /dev/null
@@ -1,39 +0,0 @@
-import 'envd'
-
-const lib = window.lib
-const env = {
-  platform: 'Web',
-  weexVersion: '0.10.0', // TODO: get version from package.json (not sure)
-  userAgent: navigator.userAgent,
-  appName: lib.env.aliapp ? lib.env.aliapp.appname : navigator.appName,
-  appVersion: lib.env.aliapp ? lib.env.aliapp.version.val : null,
-  osName: lib.env.browser ? lib.env.browser.name : null,
-  osVersion: lib.env.browser ? lib.env.browser.version.val : null,
-  deviceModel: lib.env.os.name || null,
-  deviceWidth: window.innerWidth,
-  deviceHeight: window.innerHeight
-}
-
-// 750 by default currently
-const scale = 2
-
-const units = {
-  REM: 12 * scale,
-  VW: env.deviceWidth / 100,
-  VH: env.deviceHeight / 100,
-  VMIN: Math.min(env.deviceWidth, env.deviceHeight) / 100,
-  VMAX: Math.max(env.deviceWidth, env.deviceHeight) / 100,
-  CM: 96 / 2.54 * scale,
-  MM: 96 / 25.4 * scale,
-  Q: 96 / 25.4 / 4 * scale,
-  IN: 96 * scale,
-  PT: 96 / 72 * scale,
-  PC: 96 / 6 * scale,
-  PX: scale
-}
-
-Object.freeze(units)
-Object.freeze(env)
-
-window.CSS_UNIT = units
-window.WXEnvironment = env
diff --git a/html5/render/vue/env/global.js b/html5/render/vue/env/global.js
new file mode 100644
index 0000000..337244e
--- /dev/null
+++ b/html5/render/vue/env/global.js
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import weex from './weex'
+import * as core from '../core'
+
+window.global = window
+window.weex = weex
+
+; ['getComponentStyle',
+  'extractComponentStyle',
+  'createEventMap',
+  'trimTextVNodes'].forEach(function (method) {
+    weex[method] = core[method].bind(weex)
+  })
diff --git a/html5/render/vue/env/index.js b/html5/render/vue/env/index.js
index 4d336fd..c00b251 100644
--- a/html5/render/vue/env/index.js
+++ b/html5/render/vue/env/index.js
@@ -1,5 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import '../styles/reset.css'
-import '../styles/components.css'
+import '../styles/base.css'
 
 // import 'lazyimg'
 import '../../browser/render/gesture'
@@ -13,12 +31,18 @@
 import 'core-js/modules/web.dom.iterable'
 import 'core-js/modules/es6.promise'
 
-export * from './viewport'
+import modules from '../modules'
+import './global'
 
-import { init } from '../modules'
-import weex from './weex'
+// register built-in modules.
+global.weex.install(modules)
 
-init(weex)
+export function setVue (vue) {
+  if (!vue) {
+    throw new Error('[Vue Render] Vue not found. Please make sure vue 2.x runtime is imported.')
+  }
+  global.weex.__vue__ = vue
+  console.log(`[Vue Render] install Vue ${vue.version}.`)
+}
 
-window.weex = weex
-window.global = window
+export default weex
diff --git a/html5/render/vue/env/viewport.js b/html5/render/vue/env/viewport.js
index f35acff..278dbef 100644
--- a/html5/render/vue/env/viewport.js
+++ b/html5/render/vue/env/viewport.js
@@ -1,44 +1,186 @@
-const DEFAULT_VIEWPORT_WIDTH = process.env.VIEWPORT_WIDTH
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+// @flow
 
-function parseViewportWidth (config) {
-  let width = DEFAULT_VIEWPORT_WIDTH
-  if (config && config.width) {
-    width = Number(config.width) || config.width
-  }
-  return width
+import { extend } from '../utils/func'
+
+/**
+ * viewport priority:
+ *
+ * 1. meta weex-viewport (developer custom)
+ * 2. setViewport(config) := config.width (private code) @deprecated
+ * 3. process.env.VIEWPORT_WIDTH (buid time)
+ *
+ */
+let isInited = false
+const DEFAULT_VIEWPORT_WIDTH = 750
+
+/**
+ * get viewport width from weex-viewport meta.
+ */
+const envViewportWidth = parseInt(process.env.VIEWPORT_WIDTH)
+let width: number = !isNaN(envViewportWidth) && envViewportWidth > 0
+  ? envViewportWidth
+  : DEFAULT_VIEWPORT_WIDTH
+
+let wxViewportMeta = document.querySelector('meta[name="weex-viewport"]')
+const metaWidth = wxViewportMeta && parseInt(wxViewportMeta.getAttribute('content'))
+if (metaWidth && !isNaN(metaWidth) && metaWidth > 0) {
+  width = metaWidth
 }
 
-export function setViewport (config = {}) {
+let dpr: number = 0
+let deRect: mixed = null
+let screenWidth: number = 0
+let screenHeight: number = 0
+
+const info: {
+  dpr: number,
+  scale: number,
+  rem: number,
+  deviceWidth: number,
+  deviceHeight: number
+} = {
+  dpr,
+  scale: 0,
+  rem: 0,
+  deviceWidth: 0,
+  deviceHeight: 0
+}
+
+/**
+ * set root font-size for rem units. If already been set, just skip this.
+ */
+function setRootFont (width: number): void {
   const doc = window.document
+  const rem = width / 10
+  if (!doc.documentElement) { return }
+  const rootFontSize = doc.documentElement.style.fontSize
+  if (!rootFontSize) {
+    doc.documentElement.style.fontSize = rem + 'px'
+    info.rem = rem
+  }
+}
 
-  if (doc) {
-    const viewportWidth = parseViewportWidth(config)
+function setMetaViewport (width: number): void {
+  if (!wxViewportMeta) {
+    wxViewportMeta = document.createElement('meta')
+    wxViewportMeta.setAttribute('name', 'weex-viewport')
+  }
+  else {
+    const metaWidth = parseInt(wxViewportMeta.getAttribute('content'))
+    if (metaWidth === width) {
+      return
+    }
+  }
+  wxViewportMeta.setAttribute('content', width + '')
+}
 
-    // set root font-size
-    doc.documentElement.style.fontSize = viewportWidth / 10 + 'px'
+/**
+ * export viewport info.
+ */
+export function init (viewportWidth: number = width): ?{
+  dpr: number,
+  scale: number,
+  rem: number,
+  deviceWidth: number,
+  deviceHeight: number
+} {
+  if (!isInited) {
+    isInited = true
+
+    const doc = window.document
+    if (!doc) {
+      console.error('[vue-render] window.document is undfined.')
+      return
+    }
+    if (!doc.documentElement) {
+      console.error('[vue-render] document.documentElement is undfined.')
+      return
+    }
+
+    dpr = info.dpr = window.devicePixelRatio
+    deRect = doc.documentElement.getBoundingClientRect()
+    screenWidth = deRect.width
+    screenHeight = deRect.height
+
+    // set root font for rem.
+    setRootFont(screenWidth)
+    setMetaViewport(viewportWidth)
 
     /**
      * why not to use window.screen.width to get screenWidth ? Because in some
      * old webkit browser on android system it get the device pixel width, which
      * is the screenWidth multiply by the device pixel ratio.
+     * e.g. ip6 -> get 375 for virtual screen width.
      */
-    const screenWidth = document.documentElement.getBoundingClientRect().width
     const scale = screenWidth / viewportWidth
-    const contents = [
-      `width=${viewportWidth}`,
-      `initial-scale=${scale}`,
-      `maximum-scale=${scale}`,
-      `minimum-scale=${scale}`,
-      `user-scalable=no`
-    ]
+    /**
+     * 1. if set initial/maximum/mimimum-scale some how the page will have a bounce
+     * effect when user drag the page towards horizontal axis.
+     * 2. Due to compatibility reasons, not to use viewport meta anymore. Just bring
+     * a parameter scale into the style value processing.
+     */
 
-    let meta = doc.querySelector('meta[name="viewport"]')
-    if (!meta) {
-      meta = doc.createElement('meta')
-      meta.setAttribute('name', 'viewport')
-      document.querySelector('head').appendChild(meta)
-    }
+    // const contents = [
+    //   `width=${viewportWidth}`,
+    //   `initial-scale=${scale}`,
+    //   `maximum-scale=${scale}`,
+    //   `minimum-scale=${scale}`,
+    //   `user-scalable=no`
+    // ]
 
-    meta.setAttribute('content', contents.join(','))
+    // let meta = doc.querySelector('meta[name="viewport"]')
+    // if (!meta) {
+    //   meta = doc.createElement('meta')
+    //   meta.setAttribute('name', 'viewport')
+    //   document.querySelector('head').appendChild(meta)
+    // }
+    // meta.setAttribute('content', contents.join(','))
+
+    extend(info, {
+      scale,
+      deviceWidth: screenWidth * dpr,
+      deviceHeight: screenHeight * dpr
+    })
   }
+
+  return info
+}
+
+/**
+ * reset viewport width and scale.
+ * @return new scale.
+ */
+export function resetViewport (viewportWidth: number): number {
+  setMetaViewport(viewportWidth)
+  const newScale = screenWidth / viewportWidth
+  info.scale = newScale
+  return newScale
+}
+
+export function getViewportInfo (): {
+  dpr: number,
+  scale: number,
+  rem: number,
+  deviceWidth: number,
+  deviceHeight: number
+} {
+  return info
 }
diff --git a/html5/render/vue/env/weex.js b/html5/render/vue/env/weex.js
index 793cccf..d884e3d 100644
--- a/html5/render/vue/env/weex.js
+++ b/html5/render/vue/env/weex.js
@@ -1,22 +1,39 @@
-import './WXEnvironment'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/* global Vue */
+
+import './wx-env'
 import * as utils from '../utils'
-import { requireWeexModule } from '../modules'
 
 const weexModules = {}
 
-export default {
+const weex = {
+  __vue__: null,
   utils,
-  units: window.CSS_UNIT,
+  // units: window.CSS_UNIT,
   config: {
     env: window.WXEnvironment,
     bundleUrl: location.href
   },
 
   requireModule (moduleName) {
-    const module = requireWeexModule(moduleName)
-    if (module) {
-      return module
-    }
     return weexModules[moduleName]
   },
 
@@ -43,6 +60,20 @@
     }
   },
 
+  registerComponent (name, component) {
+    if (!this.__vue__) {
+      return console.log('[Vue Render] Vue is not found. Please import Vue.js before register a component.')
+    }
+    if (component._css) {
+      const css = component._css.replace(/\b[+-]?[\d.]+rem;?\b/g, function (m) {
+        return parseFloat(m) * 75 * weex.config.env.scale + 'px'
+      })
+      utils.appendCss(css, `weex-cmp-${name}`)
+      delete component._css
+    }
+    this.__vue__.component(name, component)
+  },
+
   // @deprecated
   getRoot () {},
 
@@ -61,3 +92,14 @@
     module.init(this)
   }
 }
+
+; ['on', 'once', 'off', 'emit'].forEach(function (method) {
+  weex[method] = function (...args) {
+    if (!this._vue) {
+      this._vue = new Vue()
+    }
+    return this._vue[`$${method}`](...args)
+  }
+})
+
+export default weex
diff --git a/html5/render/vue/env/wx-env.js b/html5/render/vue/env/wx-env.js
new file mode 100644
index 0000000..47d1706
--- /dev/null
+++ b/html5/render/vue/env/wx-env.js
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import 'envd'
+
+import { init as initViewport } from './viewport'
+import { extend } from '../utils'
+
+/**
+ * get WXEnvironment info.
+ * @param  {object} viewportInfo: info about viewport.
+ * @param  {object} envInfo: info parsed from lib.env.
+ */
+export function initEnv (viewportInfo, envInfo) {
+  const env = {
+    platform: 'Web',
+    weexVersion: 'process.env.WEEX_VERSION',
+    userAgent: navigator.userAgent,
+    appName: envInfo.aliapp ? envInfo.aliapp.appname : navigator.appName,
+    appVersion: envInfo.aliapp ? envInfo.aliapp.version.val : null,
+    osName: envInfo.browser ? envInfo.browser.name : null,
+    osVersion: envInfo.browser ? envInfo.browser.version.val : null,
+    deviceModel: envInfo.os.name || null
+  }
+  /**
+   * viewportInfo: scale, deviceWidth, deviceHeight. dpr
+   */
+  return extend(env, viewportInfo)
+}
+
+// const viewportInfo = initViewport()
+
+// 750 by default currently
+// const scale = viewportInfo.scale
+
+// const units = {
+//   REM: 12 * scale,
+//   VW: viewportInfo.deviceWidth / 100,
+//   VH: viewportInfo.deviceHeight / 100,
+//   VMIN: Math.min(viewportInfo.deviceWidth, viewportInfo.deviceHeight) / 100,
+//   VMAX: Math.max(viewportInfo.deviceWidth, viewportInfo.deviceHeight) / 100,
+//   CM: 96 / 2.54 * scale,
+//   MM: 96 / 25.4 * scale,
+//   Q: 96 / 25.4 / 4 * scale,
+//   IN: 96 * scale,
+//   PT: 96 / 72 * scale,
+//   PC: 96 / 6 * scale,
+//   PX: scale
+// }
+
+// Object.freeze(units)
+// Object.freeze(env)
+
+// window.CSS_UNIT = units
+window.WXEnvironment = initEnv(initViewport(), window.lib.env)
diff --git a/html5/render/vue/index.js b/html5/render/vue/index.js
index abe35be..7f158dc 100644
--- a/html5/render/vue/index.js
+++ b/html5/render/vue/index.js
@@ -1,43 +1,67 @@
-import semver from 'semver'
-import { setViewport } from './env'
-import * as components from './components'
-import styleMixin from './mixins/style'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import weex from './env'
+import { setVue } from './env'
+import components from './components'
+import { base, style } from './mixins'
+// import styleMixin from './mixins/style'
 
-function install (Vue) {
-  setViewport()
+/**
+ * init weex.
+ * @param  {Vue$2} Vue: Vue Constructor.
+ * @param  {object} options: extend weex plugins.
+ *         - components.
+ *         - modules.
+ */
+function init (Vue/*, options = {}*/) {
+  setVue(Vue)
 
   Vue.prototype.$getConfig = () => {
     console.warn('[Vue Render] "this.$getConfig" is deprecated, please use "weex.config" instead.')
-    return window.weex.config
+    return weex.config
   }
 
   const htmlRegex = /^html:/i
   Vue.config.isReservedTag = tag => htmlRegex.test(tag)
   Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
 
+  // register sdk components.
   for (const name in components) {
-    Vue.component(name, components[name])
+    weex.registerComponent(name, components[name])
   }
 
   /* istanbul ignore next */
-  if (process.env.NODE_ENV === 'development') {
-    if (semver.lt(Vue.version, '2.1.5')) {
-      console.warn(`[Vue Render] The version of Vue should be ` +
-        `greater than 2.1.5, current is ${Vue.version}.`)
-    }
-    console.info(`[Vue Render] Registered components: `
-      + `[${Object.keys(components).join(', ')}].`)
-
-    // merge styles to inline
-    Vue.mixin(styleMixin)
-  }
+  // if (process.env.NODE_ENV === 'development') {
+  //   if (semver.lt(Vue.version, '2.1.5')) {
+  //     console.warn(`[Vue Render] The version of Vue should be ` +
+  //       `greater than 2.1.5, current is ${Vue.version}.`)
+  //   }
+  //   console.info(`[Vue Render] Registered components: `
+  //     + `[${Object.keys(components).join(', ')}].`)
+  Vue.mixin(base)
+  Vue.mixin(style)
+  // }
 }
 
-// auto install in dist mode
+// auto init in dist mode.
 if (typeof window !== 'undefined' && window.Vue) {
-  install(window.Vue)
+  init(window.Vue)
 }
 
-export default {
-  install
-}
+export default weex
diff --git a/html5/render/vue/mixins/base.js b/html5/render/vue/mixins/base.js
index b360874..f2ef32b 100644
--- a/html5/render/vue/mixins/base.js
+++ b/html5/render/vue/mixins/base.js
@@ -1,22 +1,141 @@
-import { watchAppear } from '../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import {
+  getThrottleLazyload,
+  watchAppear,
+  toCSSText
+} from '../utils'
 
-const supportedEvents = [
-  'click', 'longpress', 'appear', 'disappear'
-  // 'touchstart', 'touchmove', 'touchend'
-]
+import {
+  tagBeforeCreate,
+  // tagMounted,
+  tagRootMounted,
+  tagFirstScreen,
+  tagBeforeUpdate,
+  tagUpdated,
+  tagBegin,
+  tagEnd
+} from '../utils/perf'
+
+import { extractComponentStyle } from '../core'
+
+const scrollableTypes = ['scroller', 'list']
+
+let lazyloadWatched = false
+function watchLazyload () {
+  lazyloadWatched = true
+  ; [
+    'scroll'
+    // 'transitionend',
+    // 'webkitTransitionEnd',
+    // 'animationend',
+    // 'webkitAnimationEnd',
+    // 'resize'
+  ].forEach(evt => {
+    window.addEventListener(evt, getThrottleLazyload(25, document.body))
+  })
+}
 
 export default {
+  beforeCreate () {
+    if (!lazyloadWatched) {
+      watchLazyload()
+    }
+    if (process.env.NODE_ENV === 'development') {
+      tagBeforeCreate()
+    }
+  },
+
   mounted () {
+    if (this.$options._componentTag === 'image') {
+      global._has_image_in_first_screen = true
+    }
+    if (this === this.$root) {
+      tagRootMounted()
+      if (!global._has_image_in_first_screen) {
+        tagFirstScreen()
+      }
+    }
+    if (!weex._root) {
+      weex._root = this.$root.$el
+      weex._root.classList.add('weex-root')
+    }
+    watchAppear(this)
+  },
+
+  beforeUpdate () {
+    if (process.env.NODE_ENV === 'development') {
+      tagBeforeUpdate()
+    }
+  },
+
+  updated () {
+    if (process.env.NODE_ENV === 'development') {
+      tagUpdated()
+    }
+    function remergeStyle (vm) {
+      const style = extractComponentStyle(vm)
+      const el = vm.$el
+      if (style && el && el.nodeType !== 8) {
+        vm.$el.style.cssText += toCSSText(style)
+      }
+    }
+    const children = this.$children
+    if (children) {
+      children.forEach((childVm) => {
+        this.$nextTick(function () {
+          remergeStyle(childVm)
+        })
+      })
+    }
     watchAppear(this)
   },
 
   methods: {
-    createEventMap (extras = []) {
-      const eventMap = {}
-      supportedEvents.concat(extras).forEach(name => {
-        eventMap[name] = event => this.$emit(name, event)
-      })
-      return eventMap
+    _getScopeIds () {
+      const arr = []
+      let ctx = this
+      let scopeId
+      while (ctx) {
+        scopeId = ctx.$options._scopeId
+        scopeId && arr.push(scopeId)
+        ctx = ctx.$options.parent
+      }
+      return arr
+    },
+
+    _getParentScroller () {
+      let parent = this
+      while (parent && scrollableTypes.indexOf(parent.$options._componentTag) <= -1) {
+        parent = parent.$options.parent
+      }
+      return parent
+    },
+
+    _fireLazyload (el) {
+      if (process.env.NODE_ENV === 'development') {
+        tagBegin('base._fireLazyload')
+      }
+      getThrottleLazyload(16)()
+      if (process.env.NODE_ENV === 'development') {
+        tagEnd('base._fireLazyload')
+      }
     }
   }
 }
diff --git a/html5/render/vue/mixins/event.js b/html5/render/vue/mixins/event.js
deleted file mode 100644
index 4846d1c..0000000
--- a/html5/render/vue/mixins/event.js
+++ /dev/null
@@ -1,76 +0,0 @@
-import { extend } from '../utils'
-
-export default {
-  methods: {
-    /**
-     * Create Event.
-     * @param {DOMString} type
-     * @param {Object} props
-     */
-    createEvent (context, type, props) {
-      const event = new Event(type, { bubbles: false })
-      // event.preventDefault()
-      event.stopPropagation()
-
-      extend(event, props)
-
-      Object.defineProperty(event, 'target', {
-        enumerable: true,
-        value: context || null
-      })
-
-      return event
-    },
-
-    /**
-     * Create Custom Event.
-     * @param {DOMString} type
-     * @param {Object} props
-     */
-    createCustomEvent (context, type, props) {
-      // compatibility: http://caniuse.com/#search=customevent
-      // const event = new CustomEvent(type)
-      const event = document.createEvent('CustomEvent')
-      event.initCustomEvent(type, false, true, {})
-      // event.preventDefault()
-      event.stopPropagation()
-
-      extend(event, props)
-
-      // TODO: event.target is readonly
-      // Object.defineProperty(event, 'target', {
-      //   enumerable: true,
-      //   value: context || null
-      // })
-
-      return event
-    },
-
-    /**
-     * Check and emit longpress event.
-     * @param {Object} event
-     */
-    handleLongPress (context, event) {
-      // TODO: check the condition
-      context.$emit('longpress', context.createCustomEvent('longpress'))
-    },
-
-    /**
-     * Check and emit appear event.
-     * @param {Object} event
-     */
-    handleAppear (context, event) {
-      // TODO: check the condition
-      context.$emit('appear', context.createCustomEvent('appear'))
-    },
-
-    /**
-     * Check and emit disappear event.
-     * @param {Object} event
-     */
-    handDisappear (context, event) {
-      // TODO: check the condition
-      context.$emit('disappear', context.createCustomEvent('disappear'))
-    }
-  }
-}
diff --git a/html5/render/vue/mixins/index.js b/html5/render/vue/mixins/index.js
index 58bb451..f91bdd4 100644
--- a/html5/render/vue/mixins/index.js
+++ b/html5/render/vue/mixins/index.js
@@ -1,9 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import base from './base'
-import event from './event'
+import style from './style'
 import scrollable from './scrollable'
+import inputCommon from './input-common'
 
 export {
   base,
-  event,
-  scrollable
+  scrollable,
+  style,
+  inputCommon
 }
diff --git a/html5/render/vue/mixins/input-common.js b/html5/render/vue/mixins/input-common.js
new file mode 100644
index 0000000..f5fa18b
--- /dev/null
+++ b/html5/render/vue/mixins/input-common.js
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+
+// input and textare has some common api and event
+import { extend } from '../utils'
+
+const findEnterKeyType = function (key: string): string {
+  const keys = ['default', 'go', 'next', 'search', 'send']
+  if (keys.indexOf(key) > -1) {
+    return key
+  }
+  return 'done'
+}
+
+export default {
+  methods: {
+    focus () {
+      this.$el && this.$el.focus()
+    },
+    blur () {
+      this.$el && this.$el.blur()
+    },
+    // support enter key event
+    createKeyboardEvent (events: {}) {
+      const customKeyType = this.returnKeyType
+      const self = this
+      if (this._events['return']) {
+        const keyboardEvents = {
+          'keyup': function (ev) {
+            const code = ev.keyCode
+            let key = ev.key
+            if (code === 13) {
+              if (key.toLowerCase() === 'tab') {
+                key = 'next'
+              }
+              const rightKeyType = findEnterKeyType(customKeyType)
+              ev.returnKeyType = rightKeyType
+              ev.value = ev.target.value
+              self.$emit('return', ev)
+            }
+          }
+        }
+        events = extend(events, keyboardEvents)
+      }
+      return events
+    }
+  }
+}
diff --git a/html5/render/vue/mixins/scrollable.js b/html5/render/vue/mixins/scrollable.js
index 253348c..45a9853 100644
--- a/html5/render/vue/mixins/scrollable.js
+++ b/html5/render/vue/mixins/scrollable.js
@@ -1,5 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { getThrottleLazyload, throttle } from '../utils'
+
+let throttleScroll
+function getThrottledScroll (context) {
+  if (!throttleScroll) {
+    const wrapper = context.$refs.wrapper
+    const inner = context.$refs.inner
+    let preOffset = (context.scrollDirection === 'horizontal'
+        ? wrapper.scrollLeft
+        : wrapper.scrollTop)
+      || 0
+    throttleScroll = throttle(function (evt) {
+      const offset = context.scrollDirection === 'horizontal'
+        ? wrapper.scrollLeft
+        : wrapper.scrollTop
+      const indent = parseInt(context.offsetAccuracy)
+      function triggerScroll () {
+        const rect = inner.getBoundingClientRect()
+        evt.contentSize = { width: rect.width, height: rect.height }
+        evt.contentOffset = {
+          x: wrapper.scrollLeft,
+          /**
+           * positive direciton for y-axis is down.
+           * so should use negative operation on scrollTop.
+           *
+           *  (0,0)---------------> x
+           *       |
+           *       |
+           *       |
+           *       |
+           *       v y
+           *
+           */
+          y: -wrapper.scrollTop
+        }
+        context.$emit('scroll', evt)
+      }
+      if (indent
+        && !isNaN(indent)
+        && indent > 0
+        && Math.abs(offset - preOffset) >= indent) {
+        triggerScroll()
+        preOffset = offset
+      }
+      else if (!indent || isNaN(indent) || indent <= 0) {
+        triggerScroll()
+      }
+    }, 16, true)
+  }
+  return throttleScroll
+}
 
 export default {
+  props: {
+    offsetAccuracy: [Number, String]
+  },
   methods: {
     updateLayout () {
       const wrapper = this.$refs.wrapper
@@ -11,6 +83,8 @@
     },
 
     handleScroll (event) {
+      getThrottleLazyload(25, this.$el, 'scroll')()
+      getThrottledScroll(this)(event)
       if (this.reachBottom()) {
         this.$emit('loadmore', event)
       }
@@ -32,6 +106,60 @@
         return wrapper.scrollTop >= innerHeight - wrapperHeight - offset
       }
       return false
+    },
+
+    handleTouchStart (event) {
+      // event.preventDefault()
+      event.stopPropagation()
+      if (this._loading || this._refresh) {
+        const touch = event.changedTouches[0]
+        this._touchParams = {
+          reachTop: this.reachTop(),
+          reachBottom: this.reachBottom(),
+          startTouchEvent: touch,
+          startX: touch.pageX,
+          startY: touch.pageY,
+          timeStamp: event.timeStamp
+        }
+      }
+    },
+
+    handleTouchMove (event) {
+      // event.preventDefault()
+      event.stopPropagation()
+      if (this._touchParams) {
+        const inner = this.$refs.inner
+        const { startY, reachTop, reachBottom } = this._touchParams
+        if (inner) {
+          const touch = event.changedTouches[0]
+          const offsetY = touch.pageY - startY
+          this._touchParams.offsetY = offsetY
+          if (reachTop && this._refresh) {
+            this._refresh.pullingDown(offsetY)
+          }
+          else if (reachBottom && this._loading) {
+            this._loading.pullingUp(-offsetY)
+          }
+        }
+      }
+    },
+
+    handleTouchEnd (event) {
+      // event.preventDefault()
+      event.stopPropagation()
+      if (this._touchParams) {
+        const inner = this.$refs.inner
+        const { reachTop, reachBottom } = this._touchParams
+        if (inner) {
+          if (reachTop && this._refresh) {
+            this._refresh.pullingEnd()
+          }
+          else if (reachBottom && this._loading) {
+            this._loading.pullingEnd()
+          }
+        }
+      }
+      delete this._touchParams
     }
   }
 }
diff --git a/html5/render/vue/mixins/style.js b/html5/render/vue/mixins/style.js
index 6c73827..8625537 100644
--- a/html5/render/vue/mixins/style.js
+++ b/html5/render/vue/mixins/style.js
@@ -1,167 +1,66 @@
-import { extend } from '../utils'
-// import { validateStyles } from '../validator'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import {
+  getHeadStyleMap,
+  getComponentStyle,
+  extractComponentStyle
+} from '../core'
 
-// let warned = false
-
-function getHeadStyleMap () {
-  return Array.from(document.styleSheets)
-    .reduce((pre, styleSheet) => {
-      const rules = styleSheet.rules || styleSheet.cssRules
-      Array.from(rules).forEach(rule => {
-        const selector = rule.selectorText || ''
-        const match = selector.match(/^\.([^.]+)$/)
-        if (match && match[1]) {
-          pre[match[1]] = rule.cssText.match(/{([^}]+)}/)[1].trim().split(';')
-            .reduce((styleObj, statement) => {
-              statement = statement.trim()
-              if (statement) {
-                const resArr = statement.split(':').map((part) => part.trim())
-                styleObj[resArr[0]] = resArr[1]
-              }
-              return styleObj
-            }, {})
-        }
-      })
-      return pre
-    }, {})
-}
-
-// function getWarnText (prop) {
-//   return `[Vue Rneder] "${prop}" is not a standard CSS property,`
-//     + 'it may not support very well on weex vue render.'
-// }
-
-// function normalize (styles) {
-//   const realStyle = {}
-//   for (const key in styles) {
-//     let value = styles[key]
-
-//     // TODO: add more reliable check
-//     if (typeof value === 'number') {
-//       value += 'px'
-//     }
-
-//     // warn for unsupported properties
-//     switch (key) {
-//       case 'lines':
-//       case 'item-color':
-//       case 'itemColor':
-//       case 'item-selected-color':
-//       case 'itemSelectedColor':
-//       case 'item-size':
-//       case 'itemSize': console.warn(getWarnText(key)); break
-//     }
-
-//     realStyle[key] = value
-//   }
-//   return realStyle
-// }
-
-// function getStyleMap (component) {
-//   if (component && component.$vnode && component.$vnode.context) {
-//     const $options = component.$vnode.context.$options
-//     if ($options && $options.style) {
-//       if (!warned) {
-//         warned = true
-//         console.error('[Invalid Bundle Format] This bundle format is '
-//           + 'generated for Android and iOS platform, '
-//           + 'please use "vue-loader" to compile the ".vue" file on the web.')
-//       }
-//       return $options.style
-//     }
-//   }
-// }
-
-// function getStaticClass (component) {
-//   if (component && component.$vnode && component.$vnode.data) {
-//     const data = component.$vnode.data
-//     return [].concat(data.staticClass, data.class)
-//   }
-// }
-
-// function getComponentStyle (context) {
-  // const styleMap = getStyleMap(context)
-  // const staticClass = getStaticClass(context)
-
-  // if (styleMap && Array.isArray(staticClass)) {
-  //   const styles = staticClass.reduce((res, name) => {
-  //     return extend(res, styleMap[name])
-  //   }, {})
-
-  //   return normalize(styles)
-  // }
-// }
-
-// function mergeStyles (context) {
-//   const styles = getComponentStyle(context)
-//   if (context.$el && styles) {
-//     validateStyles(context.$options && context.$options._componentTag, styles)
-//     for (const key in styles) {
-//       context.$el.style[key] = styles[key]
-//     }
-//   }
-// }
+let warned = false
+const warnInfo = `[vue-render] after v0.11.3 there's no need to add $processStyle in vue-loader config anymore.`
 
 export default {
   beforeCreate () {
     // get static class style map from document's styleSheets.
     if (!weex.styleMap) {
       weex.styleMap = getHeadStyleMap()
-      Object.freeze(weex)
     }
   },
-  // mounted () {
-  //   console.log('call mounted: merged styles')
-  //   mergeStyles(this)
-  // },
-  // beforeUpdate () {
-  //   console.log('call beforeUpdate: merged styles')
-  //   mergeStyles(this)
-  // },
 
   methods: {
-    prerender () {
-      this.mergeStyles()
-    },
-
-    // get style from staticClass and staticStyle.
-    getComponentStyle () {
-      const style = {}
-      const data = this.$vnode && this.$vnode.data || {}
-      const staticStyle = data.staticStyle || {}
-      const classNames = (data.staticClass || '').split(' ')
-
-      // apply static class styles. This relies on getHeadStyleMap
-      // being already triggered once in the hook beforeCreate.
-      if (weex.styleMap) {
-        classNames.forEach(className => {
-          const styleObj = weex.styleMap[className] || {}
-          extend(style, styleObj)
-        })
+    $processStyle (style) {
+      if (!warned) {
+        warned = true
+        console.warn(warnInfo)
       }
-
-      // apply static inline styles.
-      extend(style, staticStyle)
-
       return style
     },
 
-    // merge static styles and static class styles into $vnode.data.mergedStyles.
-    mergeStyles () {
-      if (this.$vnode && this.$vnode.data) {
-        this.$vnode.data.mergedStyle = this.getComponentStyle()
-      }
+    _extractComponentStyle () {
+      return extractComponentStyle(this)
     },
 
-    getParentRect () {
+    /**
+     * get style from class, staticClass, style and staticStyle.
+     * merge styles priority: high -> low
+     *  1. data.style (bound style).
+     *  2. data.staticStyle (inline styles).
+     *  3. data.class style (bound class names).
+     *  4. data.staticClass style (scoped styles or static classes).
+     */
+    _getComponentStyle (data) {
+      return getComponentStyle(this)
+    },
+
+    _getParentRect () {
       const parentElm = this.$options._parentElm
       return parentElm && parentElm.getBoundingClientRect()
-    },
-
-    getParentRectAsync (cb) {
-      this.$nextTick(function () {
-        return cb && cb.call(this, this.getParentRectSync())
-      })
     }
   }
 }
diff --git a/html5/render/vue/modules/animation.js b/html5/render/vue/modules/animation.js
index 1177827..07542bb 100644
--- a/html5/render/vue/modules/animation.js
+++ b/html5/render/vue/modules/animation.js
@@ -1,8 +1,40 @@
-import { nextFrame, toCSSText } from '../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import {
+  nextFrame,
+  toCSSText,
+  autoPrefix,
+  camelizeKeys,
+  normalizeStyle,
+  isArray
+} from '../utils'
 
 function transitionOnce (vnode, config, callback) {
-  const duration = config.duration || 1000 // ms
-  const timing = config.timingFunction || 'ease'
+  if (isArray(vnode)) {
+    if (process.env.NODE_ENV === 'development') {
+      console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+    }
+    vnode = vnode[0]
+  }
+
+  const duration = config.duration || 0 // ms
+  const timing = config.timingFunction || 'linear'
   const delay = config.delay || 0  // ms
 
   // TODO: parse transition properties
@@ -24,7 +56,8 @@
   dom.addEventListener('transitionend', transitionEndHandler)
 
   nextFrame(() => {
-    dom.style.cssText += toCSSText(config.styles || {})
+    dom.style.cssText
+      += toCSSText(autoPrefix(normalizeStyle(camelizeKeys(config.styles))) || {})
   })
 }
 
@@ -36,7 +69,7 @@
    * @param  {String} callback
    */
   transition (vnode, config, callback) {
-    // TODO: Make sure the transition is only run once
+    if (!config.styles) { return }
     return transitionOnce(vnode, config, () => {
       callback && callback()
     })
diff --git a/html5/render/vue/modules/dom.js b/html5/render/vue/modules/dom.js
index 76affd5..43db8a6 100644
--- a/html5/render/vue/modules/dom.js
+++ b/html5/render/vue/modules/dom.js
@@ -1,4 +1,22 @@
-import { camelToKebab, appendStyle } from '../utils'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { camelToKebab, appendCss, isArray } from '../utils'
 
 function getParentScroller (vnode) {
   if (!vnode) return null
@@ -8,6 +26,55 @@
   return getParentScroller(vnode.$parent)
 }
 
+function now () {
+  const now = window.performance && window.performance.now
+      ? window.performance.now.bind(window.performance) : Date.now
+  return now()
+}
+
+function scrollElement (dSuffix, position) {
+  this[`scroll${dSuffix}`] = position
+}
+
+/**
+ * self invoked function that, given a context, steps through scrolling
+ * @method step
+ * @param {Object} context
+ */
+function step (context) {
+  // call method again on next available frame
+  context.frame = window.requestAnimationFrame(step.bind(window, context))
+
+  const time = now()
+  let elapsed = (time - context.startTime) / 468
+
+  // avoid elapsed times higher than one
+  elapsed = elapsed > 1 ? 1 : elapsed
+
+  // apply easing to elapsed time
+  const value = ease(elapsed)
+
+  const currentPosition = context.startPosition + (context.position - context.startPosition) * value
+
+  context.method.call(context.scrollable, context.dSuffix, currentPosition)
+
+  // return when end points have been reached
+  if (currentPosition === context.position) {
+    window.cancelAnimationFrame(context.frame)
+    return
+  }
+}
+
+/**
+ * returns result of applying ease math function to a number
+ * @method ease
+ * @param {Number} k
+ * @returns {Number}
+ */
+function ease (k) {
+  return 0.5 * (1 - Math.cos(Math.PI * k))
+}
+
 export default {
   /**
    * scrollToElement
@@ -16,21 +83,57 @@
    *   ps: scroll-to has 'ease' and 'duration'(ms) as options.
    */
   scrollToElement: function (vnode, options) {
-    const scroller = getParentScroller(vnode)
+    if (isArray(vnode)) {
+      if (process.env.NODE_ENV === 'development') {
+        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+      }
+      vnode = vnode[0]
+    }
 
-    if (scroller && scroller.$el && vnode.$el) {
-      let offset = vnode.$el.offsetTop
+    const scroller = getParentScroller(vnode)
+    const scrollDirection = scroller && scroller.scrollDirection || 'vertical'
+
+    const isWindow = !scroller
+    const ct = isWindow ? document.body : scroller.$el
+    const el = vnode.$el
+
+    if (ct && el) {
+      // if it's a list, then the listVnode.scrollDirection is undefined. just
+      // assum it is the default value 'vertical'.
+      const dSuffix = ({
+        horizontal: 'Left',
+        vertical: 'Top'
+      })[scrollDirection]
+
+      const ctRect = ct.getBoundingClientRect()
+      const elRect = el.getBoundingClientRect()
+
+      const dir = dSuffix.toLowerCase()
+      let offset = el[`scroll${dSuffix}`] + elRect[dir] - ctRect[dir]
+      // let offset = el[`offset${dSuffix}`]
 
       if (options) {
-        offset += Number(options.offset) || 0
+        offset += options.offset && options.offset * weex.config.env.scale || 0
+        // offset *= weex.config.env.scale /* adapt offset to different screen scales. */
       }
       else if (process.env.NODE_ENV === 'development') {
         console.warn('[Vue Render] The second parameter of "scrollToElement" is required, '
           + 'otherwise it may not works well on native.')
       }
 
-      // TODO: add animation
-      scroller.$el.scrollTop = offset
+      if (options && options.animated === false) {
+        return scrollElement.call(ct, dSuffix, offset)
+      }
+
+      step({
+        scrollable: ct,
+        startTime: now(),
+        frame: null,
+        startPosition: ct[`scroll${dSuffix}`],
+        position: offset,
+        method: scrollElement,
+        dSuffix: dSuffix
+      })
     }
   },
 
@@ -40,6 +143,13 @@
    * @param {Function} callback
    */
   getComponentRect: function (vnode, callback) {
+    if (isArray(vnode)) {
+      if (process.env.NODE_ENV === 'development') {
+        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+      }
+      vnode = vnode[0]
+    }
+
     const info = { result: false }
 
     if (vnode && vnode === 'viewport') {
@@ -81,6 +191,6 @@
       }
     }
     const styleText = `@${key}{${stylesText}}`
-    appendStyle(styleText, 'dom-added-rules')
+    appendCss(styleText, 'dom-added-rules')
   }
 }
diff --git a/html5/render/vue/modules/index.js b/html5/render/vue/modules/index.js
index a9fb718..b937cc7 100644
--- a/html5/render/vue/modules/index.js
+++ b/html5/render/vue/modules/index.js
@@ -1,10 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 // modules from render/browesr
-import Event from '../../browser/extend/api/event'
-import Geolocation from '../../browser/extend/api/geolocation'
-import PageInfo from '../../browser/extend/api/pageInfo'
-import Storage from '../../browser/extend/api/storage'
-import Stream from '../../browser/extend/api/stream'
-import Clipboard from '../../browser/extend/api/clipboard'
+
+import event from '../../browser/extend/api/event'
+import geolocation from '../../browser/extend/api/geolocation'
+import pageInfo from '../../browser/extend/api/pageInfo'
+import storage from '../../browser/extend/api/storage'
+import stream from '../../browser/extend/api/stream'
+import clipboard from '../../browser/extend/api/clipboard'
 
 // custom modules
 import animation from './animation'
@@ -13,26 +33,30 @@
 import navigator from './navigator'
 import webview from './webview'
 
+const legacyModules = {
+  event,
+  geolocation,
+  pageInfo,
+  storage,
+  stream,
+  clipboard
+}
+
 const modules = {
   animation,
   dom,
-  modal,
   navigator,
   webview
 }
 
-export function requireWeexModule (name) {
-  if (modules[name]) {
-    return modules[name]
+export default {
+  init (weex) {
+    for (const k in legacyModules) {
+      weex.install(legacyModules[k])
+    }
+    weex.install(modal)
+    for (const k in modules) {
+      weex.registerModule(k, modules[k])
+    }
   }
-  return null
-}
-
-export function init (weex) {
-  weex.install(Event)
-  weex.install(Geolocation)
-  weex.install(PageInfo)
-  weex.install(Storage)
-  weex.install(Stream)
-  weex.install(Clipboard)
 }
diff --git a/html5/render/vue/modules/modal/alert.js b/html5/render/vue/modules/modal/alert.js
index aac1e86..41626ee 100644
--- a/html5/render/vue/modules/modal/alert.js
+++ b/html5/render/vue/modules/modal/alert.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import Modal from './modal'
 
 const CONTENT_CLASS = 'content'
diff --git a/html5/render/vue/modules/modal/confirm.js b/html5/render/vue/modules/modal/confirm.js
index 652cfa1..efd7628 100644
--- a/html5/render/vue/modules/modal/confirm.js
+++ b/html5/render/vue/modules/modal/confirm.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import Modal from './modal'
 
 const CONTENT_CLASS = 'content'
diff --git a/html5/render/vue/modules/modal/index.js b/html5/render/vue/modules/modal/index.js
index 4551800..26d7486 100644
--- a/html5/render/vue/modules/modal/index.js
+++ b/html5/render/vue/modules/modal/index.js
@@ -1,10 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import toast from './toast'
 import Alert from './alert'
 import Confirm from './confirm'
 import Prompt from './prompt'
+import _css from './style'
 
 // TODO: rewrite the modal styles
-export default {
+const modal = {
 
   // duration: default is 0.8 seconds.
   toast: function (config) {
@@ -46,3 +65,10 @@
     new Prompt(config).show()
   }
 }
+
+export default {
+  init: function (Weex) {
+    Weex.utils.appendCss(_css, 'weex-mud-modal')
+    Weex.registerModule('modal', modal)
+  }
+}
diff --git a/html5/render/vue/modules/modal/modal.js b/html5/render/vue/modules/modal/modal.js
index ca28408..36261c5 100644
--- a/html5/render/vue/modules/modal/modal.js
+++ b/html5/render/vue/modules/modal/modal.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 // there will be only one instance of modal.
 const MODAL_WRAP_CLASS = 'weex-modal-wrap'
diff --git a/html5/render/vue/modules/modal/prompt.js b/html5/render/vue/modules/modal/prompt.js
index d93ebc4..9820fa6 100644
--- a/html5/render/vue/modules/modal/prompt.js
+++ b/html5/render/vue/modules/modal/prompt.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import Modal from './modal'
 
 const CONTENT_CLASS = 'content'
diff --git a/html5/render/vue/modules/modal/style.js b/html5/render/vue/modules/modal/style.js
new file mode 100644
index 0000000..d6bb4fa
--- /dev/null
+++ b/html5/render/vue/modules/modal/style.js
@@ -0,0 +1,164 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+export default `
+.weex-toast {
+  font-size: 0.426667rem;
+  line-height: 0.426667rem;
+  position: fixed;
+  z-index: 1999999999;
+  box-sizing: border-box;
+  max-width: 80%;
+  bottom: 50%;
+  left: 50%;
+  padding: 0.213333rem;
+  background-color: #000;
+  color: #fff;
+  text-align: center;
+  opacity: 0.6;
+  -webkit-transition: all 0.4s ease-in-out;
+          transition: all 0.4s ease-in-out;
+  border-radius: 0.066667rem;
+  -webkit-transform: translateX(-50%);
+  -ms-transform: translateX(-50%);
+      transform: translateX(-50%);
+}
+
+.weex-toast.hide {
+  opacity: 0;
+}
+
+.weex-alert .weex-alert-ok {
+  width: 100%;
+}
+
+.weex-confirm .btn-group .btn {
+  float: left;
+  width: 50%;
+}
+
+.weex-confirm .btn-group .btn.btn-ok {
+  border-right: 0.013333rem solid #ddd;
+}
+
+.weex-modal-wrap {
+  display: none;
+  position: fixed;
+  z-index: 999999999;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background-color: #000;
+  opacity: 0.5;
+}
+
+.weex-modal-node {
+  position: fixed;
+  z-index: 9999999999;
+  top: 50%;
+  left: 50%;
+  width: 6.666667rem;
+  min-height: 2.666667rem;
+  border-radius: 0.066667rem;
+  -webkit-transform: translate(-50%, -50%);
+  -ms-transform: translate(-50%, -50%);
+      transform: translate(-50%, -50%);
+  background-color: #fff;
+}
+
+.weex-modal-node.hide {
+  display: none;
+}
+
+.weex-modal-node .content {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: -ms-flexbox;
+  display: flex;
+  -webkit-box-orient: vertical;
+  -webkit-flex-direction: column;
+  -ms-flex-direction: column;
+      flex-direction: column;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+      align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+  -ms-flex-pack: center;
+      justify-content: center;
+  width: 100%;
+  min-height: 1.866667rem;
+  box-sizing: border-box;
+  font-size: 0.426667rem;
+  line-height: 0.426667rem;
+  padding: 0.213333rem;
+  border-bottom: 0.013333rem solid #ddd;
+}
+
+.weex-modal-node .btn-group {
+  width: 100%;
+  height: 0.8rem;
+  font-size: 0.373333rem;
+  text-align: center;
+  margin: 0;
+  padding: 0;
+  border: none;
+}
+
+.weex-modal-node .btn-group .btn {
+  text-align: center;
+}
+
+.weex-modal-node .btn-group .btn {
+  box-sizing: border-box;
+  height: 0.8rem;
+  line-height: 0.8rem;
+  margin: 0;
+  padding: 0;
+  border: none;
+  background: none;
+  text-align: center;
+}
+
+.weex-prompt .input-wrap {
+  box-sizing: border-box;
+  width: 100%;
+  margin-top: 0.133333rem;
+  height: 0.96rem;
+}
+
+.weex-prompt .input-wrap .input {
+  box-sizing: border-box;
+  width: 100%;
+  height: 0.56rem;
+  line-height: 0.56rem;
+  font-size: 0.426667rem;
+  border: 0.013333rem solid #999;
+}
+
+.weex-prompt .btn-group .btn {
+  float: left;
+  width: 50%;
+}
+
+.weex-prompt .btn-group .btn.btn-ok {
+  border-right: 0.013333rem solid #ddd;
+}
+`
diff --git a/html5/render/vue/modules/modal/toast.js b/html5/render/vue/modules/modal/toast.js
index 4703dd9..789a463 100644
--- a/html5/render/vue/modules/modal/toast.js
+++ b/html5/render/vue/modules/modal/toast.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 const queue = []
 let isProcessing = false
 let toastWin
diff --git a/html5/render/vue/modules/navigator.js b/html5/render/vue/modules/navigator.js
index b14b249..2b1fd5b 100644
--- a/html5/render/vue/modules/navigator.js
+++ b/html5/render/vue/modules/navigator.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * Navigator module
  */
diff --git a/html5/render/vue/modules/webview.js b/html5/render/vue/modules/webview.js
index 5738507..f4aec49 100644
--- a/html5/render/vue/modules/webview.js
+++ b/html5/render/vue/modules/webview.js
@@ -1,19 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * Webview module
  */
-
+import { isArray } from '../utils'
 export default {
   goBack (vnode) {
+    if (isArray(vnode)) {
+      if (process.env.NODE_ENV === 'development') {
+        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+      }
+      vnode = vnode[0]
+    }
     if (vnode && typeof vnode.goBack === 'function') {
       vnode.goBack()
     }
   },
   goForward (vnode) {
+    if (isArray(vnode)) {
+      if (process.env.NODE_ENV === 'development') {
+        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+      }
+      vnode = vnode[0]
+    }
     if (vnode && typeof vnode.goForward === 'function') {
       vnode.goForward()
     }
   },
   reload (vnode) {
+    if (isArray(vnode)) {
+      if (process.env.NODE_ENV === 'development') {
+        console.warn('[vue-render] the ref passed to animation.transitionOnce is a array.')
+      }
+      vnode = vnode[0]
+    }
     if (vnode && typeof vnode.reload === 'function') {
       vnode.reload()
     }
diff --git a/html5/render/vue/styles/base.css b/html5/render/vue/styles/base.css
new file mode 100644
index 0000000..17d0738
--- /dev/null
+++ b/html5/render/vue/styles/base.css
@@ -0,0 +1,194 @@
+.weex-root * {
+  border-width: 0;
+  border-color: inherit;
+  border-style: solid;
+}
+
+.weex-flex-ct {
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+}
+
+.weex-ct {
+  box-sizing: border-box;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
+  position: relative;
+  -webkit-box-orient: vertical;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  -webkit-flex-grow: 0;
+  -ms-flex-grow: 0;
+  flex-grow: 0;
+  -webkit-flex-basis: auto;
+  flex-basis: auto;
+  -webkit-box-align: stretch;
+  -webkit-align-items: stretch;
+  -ms-flex-align: stretch;
+  align-items: stretch;
+  -webkit-align-content: flex-start;
+  -ms-flex-line-pack: start;
+  align-content: flex-start;
+  border: 0 solid black;
+  margin: 0;
+  padding: 0;
+  min-width: 0;
+}
+
+.weex-ct.horizontal {
+  -webkit-box-orient: horizontal;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+}
+
+.weex-el {
+  display: block;
+  box-sizing: border-box;
+  position: relative;
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  -webkit-flex-grow: 0;
+  -ms-flex-grow: 0;
+  flex-grow: 0;
+  -webkit-flex-basis: auto;
+  flex-basis: auto;
+  border: 0 solid black;
+  margin: 0;
+  padding: 0;
+  min-width: 0;
+}
+
+body > .weex-list,
+body > .weex-scroller {
+  max-height: 100%;
+}
+
+.weex-list-wrapper,
+.weex-scroller-wrapper {
+  -webkit-overflow-scrolling: touch;
+}
+
+.weex-list-wrapper {
+  overflow-y: scroll !important;
+}
+
+.weex-list-inner,
+.weex-scroller-inner {
+  -webkit-overflow-scrolling: touch;
+  width: 100%;
+}
+
+.weex-scroller-inner::-webkit-scrollbar {
+    width: 0;
+}
+
+.weex-scroller-wrapper.weex-scroller-vertical {
+  overflow-x: hidden;
+  overflow-y: scroll;
+}
+
+.weex-scroller-wrapper.weex-scroller-horizontal {
+  overflow-x: scroll;
+  overflow-y: hidden;
+}
+
+.weex-scroller-horizontal .weex-scroller-inner {
+  -webkit-flex-direction: row;
+      -ms-flex-direction: row;
+          flex-direction: row;
+  -webkit-box-orient: horizontal;
+  height: 100%;
+}
+
+.iossticky {
+  position: -webkit-sticky !important;
+  position: sticky !important;
+  z-index: 9999;
+  top: 0;
+}
+
+.sticky {
+  position: fixed;
+  top: 0;
+  z-index: 9999;
+}
+
+.weex-cell {
+  width: 100%;
+}
+
+.weex-refresh,
+.weex-loading {
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+      -ms-flex-align: center;
+          align-items: center;
+  -webkit-box-pack: center;
+  -webkit-justify-content: center;
+      -ms-flex-pack: center;
+          justify-content: center;
+  width: 100%;
+  overflow: hidden;
+}
+
+@-webkit-keyframes weex-spinner {
+  0%,
+  100% {
+    box-shadow: 0em -2.6em 0em 0em #ffffff, 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.5), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7);
+  }
+  12.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.7), 1.8em -1.8em 0 0em #ffffff, 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5);
+  }
+  25% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.5), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7), 2.5em 0em 0 0em #ffffff, 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  37.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5), 2.5em 0em 0 0em rgba(255, 255, 255, 0.7), 1.75em 1.75em 0 0em #ffffff, 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  50% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.5), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.7), 0em 2.5em 0 0em #ffffff, -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  62.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.5), 0em 2.5em 0 0em rgba(255, 255, 255, 0.7), -1.8em 1.8em 0 0em #ffffff, -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  75% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.5), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.7), -2.6em 0em 0 0em #ffffff, -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  87.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.5), -2.6em 0em 0 0em rgba(255, 255, 255, 0.7), -1.8em -1.8em 0 0em #ffffff;
+  }
+}
+
+@keyframes weex-spinner {
+  0%,
+  100% {
+    box-shadow: 0em -2.6em 0em 0em #ffffff, 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.5), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7);
+  }
+  12.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.7), 1.8em -1.8em 0 0em #ffffff, 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5);
+  }
+  25% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.5), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.7), 2.5em 0em 0 0em #ffffff, 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  37.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.5), 2.5em 0em 0 0em rgba(255, 255, 255, 0.7), 1.75em 1.75em 0 0em #ffffff, 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  50% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.5), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.7), 0em 2.5em 0 0em #ffffff, -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.2), -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  62.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.5), 0em 2.5em 0 0em rgba(255, 255, 255, 0.7), -1.8em 1.8em 0 0em #ffffff, -2.6em 0em 0 0em rgba(255, 255, 255, 0.2), -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  75% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.5), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.7), -2.6em 0em 0 0em #ffffff, -1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2);
+  }
+  87.5% {
+    box-shadow: 0em -2.6em 0em 0em rgba(255, 255, 255, 0.2), 1.8em -1.8em 0 0em rgba(255, 255, 255, 0.2), 2.5em 0em 0 0em rgba(255, 255, 255, 0.2), 1.75em 1.75em 0 0em rgba(255, 255, 255, 0.2), 0em 2.5em 0 0em rgba(255, 255, 255, 0.2), -1.8em 1.8em 0 0em rgba(255, 255, 255, 0.5), -2.6em 0em 0 0em rgba(255, 255, 255, 0.7), -1.8em -1.8em 0 0em #ffffff;
+  }
+}
diff --git a/html5/render/vue/styles/reset.css b/html5/render/vue/styles/reset.css
index e761524..563a2ef 100644
--- a/html5/render/vue/styles/reset.css
+++ b/html5/render/vue/styles/reset.css
@@ -1,4 +1,5 @@
-* {
+.weex-root,
+.weex-root * {
   color: initial;
   cursor: initial;
   direction: initial;
@@ -17,48 +18,43 @@
   font-family: BlinkMacSystemFont, 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
 }
 
-*,
-*::before,
-*::after {
+.weex-root,
+.weex-root *,
+.weex-root *::before,
+.weex-root *::after {
   box-sizing: border-box;
   -webkit-text-size-adjust: none;
       -ms-text-size-adjust: none;
           text-size-adjust: none;
 }
 
-html, body {
-  -ms-overflow-style: scrollbar;
-  -webkit-tap-highlight-color: transparent;
-  padding: 0;
-  margin: 0;
-  width: 100%;
-  height: 100%;
-}
-
-a,
-button,
-[role="button"],
-input,
-label,
-select,
-textarea {
+.weex-root a,
+.weex-root button,
+.weex-root [role="button"],
+.weex-root input,
+.weex-root label,
+.weex-root select,
+.weex-root textarea {
   -ms-touch-action: manipulation;
       touch-action: manipulation;
 }
 
-p, ol, ul, dl {
+.weex-root p,
+.weex-root ol,
+.weex-root ul,
+.weex-root dl {
   margin: 0;
   padding: 0;
 }
 
-li {
+.weex-root li {
   list-style: none;
 }
 
-figure {
+.weex-root figure {
   margin: 0;
 }
 
-textarea {
+.weex-root textarea {
   resize: none;
 }
diff --git a/html5/render/vue/utils/component.js b/html5/render/vue/utils/component.js
index 29a3d67..989499e 100644
--- a/html5/render/vue/utils/component.js
+++ b/html5/render/vue/utils/component.js
@@ -1,4 +1,23 @@
-import { throttle } from './func'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { throttle, extend } from './func'
+import { createEvent } from './event'
 
 export function getParentScroller (vnode) {
   if (!vnode) return null
@@ -13,48 +32,105 @@
     && (rect.top < ctRect.bottom && rect.bottom > ctRect.top)
 }
 
+/**
+ * isElementVisible
+ * @param  {HTMLElement}  el    a dom element.
+ * @param  {HTMLElement}  container  optional, the container of this el.
+ */
+export function isElementVisible (el, container) {
+  if (!el.getBoundingClientRect) { return false }
+  const bodyRect = {
+    top: 0,
+    left: 0,
+    bottom: window.innerHeight,
+    right: window.innerWidth
+  }
+  const ctRect = (container === document.body)
+    ? bodyRect : container
+    ? container.getBoundingClientRect() : bodyRect
+  return hasIntersection(
+    el.getBoundingClientRect(),
+    ctRect)
+}
+
 export function isComponentVisible (component) {
   if (component.$el) {
     const scroller = getParentScroller(component)
     if (scroller && scroller.$el) {
-      const visible = hasIntersection(
+      return hasIntersection(
         component.$el.getBoundingClientRect(),
         scroller.$el.getBoundingClientRect()
       )
-      return visible
+    }
+    else {
+      return isElementVisible(component.$el)
     }
   }
   return false
 }
 
-// TODO: improve the efficiency
+// to trigger the appear/disappear event.
+function triggerEvent (elm, handlers, isShow, dir) {
+  const evt = isShow ? 'appear' : 'disappear'
+  let listener = handlers[evt]
+  if (listener && listener.fn) {
+    listener = listener.fn
+  }
+  if (listener) {
+    listener(createEvent(elm, evt, {
+      direction: dir
+    }))
+  }
+}
+
 export function watchAppear (context) {
-  if (!context) return null
-
+  if (!context || !context.$el) return null
+  const el = context.$el
   context.$nextTick(() => {
-    if (context.$options && context.$options._parentListeners) {
-      const on = context.$options._parentListeners
+    if ((context.$options && context.$options._parentListeners)
+      || (context.$vnode && context.$vnode.data && context.$vnode.data.on)) {
+      const on = extend({}, context.$options._parentListeners, context.$vnode.data.on)
       if (on.appear || on.disappear) {
-        context._visible = isComponentVisible(context)
-        if (context._visible) {
-          // TODO: create custom event object
-          on.appear && on.appear.fn({})
-        }
-        const handler = throttle(event => {
-          const visible = isComponentVisible(context)
-          if (visible !== context._visible) {
-            context._visible = visible
-            const listener = visible ? on.appear : on.disappear
-            if (listener && listener.fn) {
-              listener.fn(event)
-            }
-          }
-        }, 100)
-
-        // TODO: more reliable
         const scroller = getParentScroller(context)
-        const element = (scroller && scroller.$el) || window
-        element.addEventListener('scroll', handler, false)
+        let isWindow = false
+        let container = window
+        if (scroller && scroller.$el) {
+          container = scroller.$el
+        }
+        else {
+          isWindow = true
+        }
+        const visible = isElementVisible(el, isWindow ? document.body : container)
+        context._visible = visible
+        // if the component hasn't appeared for once yet, then it shouldn't trigger
+        // a disappear event at all.
+        if (context._appearedOnce) {
+          triggerEvent(el, on, visible, null)
+        }
+        else if (visible) {
+          context._appearedOnce = true
+          triggerEvent(el, on, true, null)
+        }
+
+        let lastScrollTop = container.scrollTop || window.pageYOffset
+        // no need to watch the same vComponent again.
+        if (!context._scrollWatched) {
+          context._scrollWatched = true
+          const handler = throttle(event => {
+            const visible = isElementVisible(el, isWindow ? document.body : container)
+            if (visible !== context._visible) {
+              context._visible = visible
+              const scrollTop = container.scrollTop || window.pageYOffset
+              const dir = scrollTop < lastScrollTop
+                ? 'down' : scrollTop > lastScrollTop
+                ? 'up' : null
+              triggerEvent(el, on, visible, dir)
+              lastScrollTop = scrollTop
+            }
+          }, 25, true)
+
+          container.addEventListener('scroll', handler, false)
+        }
       }
     }
   })
diff --git a/html5/render/vue/utils/event.js b/html5/render/vue/utils/event.js
index 53adadb..ac84c87 100644
--- a/html5/render/vue/utils/event.js
+++ b/html5/render/vue/utils/event.js
@@ -1,53 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+function extend (to, ...args) {
+  if (!args || args.length <= 0) { return to }
+  args.forEach(from => {
+    if (typeof from !== 'object') { return }
+    for (const key in from) {
+      to[key] = from[key]
+    }
+  })
+  return to
+}
+
 /**
  * Create Event.
  * @param {DOMString} type
  * @param {Object} props
  */
-// export function createEvent (context, type, props) {
-//   const event = new Event(type, { bubbles: false })
-//   // event.preventDefault()
-//   event.stopPropagation()
-//
-//   extend(event, props)
-//
-//   Object.defineProperty(event, 'target', {
-//     enumerable: true,
-//     value: context || null
-//   })
-//
-//   return event
-// }
+export function createEvent (target, type, props) {
+  const event = new Event(type, { bubbles: false })
+  // event.preventDefault()
+  // event.stopPropagation()
+
+  extend(event, props)
+
+  try {
+    Object.defineProperty(event, 'target', {
+      enumerable: true,
+      value: target || null
+    })
+  }
+  catch (err) {
+    return extend({}, event, { target: target || null })
+  }
+
+  return event
+}
 
 /**
  * Create Custom Event.
  * @param {DOMString} type
  * @param {Object} props
  */
-// export function createCustomEvent (context, type, props) {
-//   // compatibility: http://caniuse.com/#search=customevent
-//   // const event = new CustomEvent(type)
-//   const event = document.createEvent('CustomEvent')
-//   event.initCustomEvent(type, false, true, {})
-//   // event.preventDefault()
-//   event.stopPropagation()
-//
-//   extend(event, props)
-//
-//   // TODO: event.target is readonly
-//   // Object.defineProperty(event, 'target', {
-//   //   enumerable: true,
-//   //   value: context || null
-//   // })
-//
-//   return event
-// }
+export function createCustomEvent (target, type, props) {
+  // compatibility: http://caniuse.com/#search=customevent
+  // const event = new CustomEvent(type)
+  const event = document.createEvent('CustomEvent')
+  event.initCustomEvent(type, false, true, {})
+  // event.preventDefault()
+  // event.stopPropagation()
+
+  extend(event, props)
+
+  // event.target is readonly
+  try {
+    Object.defineProperty(event, 'target', {
+      enumerable: true,
+      value: target || null
+    })
+  }
+  catch (err) {
+    return extend({}, event, { target: target || null })
+  }
+
+  return event
+}
+
+/**
+ * dispatch a event on a dom element.
+ * @param  {HTMLElement} dom
+ * @param  {Event} event
+ */
+export function dispatchEvent (dom, event) {
+  dom.dispatchEvent(event)
+}
 
 export function mapFormEvents (context) {
   const eventMap = {}
   ;['input', 'change', 'focus', 'blur'].forEach(type => {
     eventMap[type] = event => {
       if (context.$el) {
-        context.value = context.$el.value
         event.value = context.$el.value
       }
       context.$emit(type, event)
@@ -55,3 +103,7 @@
   })
   return eventMap
 }
+
+export default {
+  mapFormEvents
+}
diff --git a/html5/render/vue/utils/func.js b/html5/render/vue/utils/func.js
index 6935346..9ea3db4 100644
--- a/html5/render/vue/utils/func.js
+++ b/html5/render/vue/utils/func.js
@@ -1,3 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+
+/**
+ * Mix properties into target object.
+ * the rightest object's value has the highest priority.
+ */
+export function extend (to: {}, ...args: Array<{}>): {} {
+  if (!args || args.length <= 0) { return to }
+  args.forEach(from => {
+    if (typeof from !== 'object') { return }
+    for (const key in from) {
+      to[key] = from[key]
+    }
+  })
+  return to
+}
+
+/**
+ * Mix specified properties into target object.
+ */
+export function extendKeys (to: {}, from: {} = {}, keys: Array<string>): {} {
+  (keys || []).forEach(key => {
+    from && (to[key] = from[key])
+  })
+  return to
+}
+
+/**
+ * Extract specified properties from src to target object.
+ */
+export function extractKeys (to: {}, from: {} = {}, keys: Array<string>) {
+  if (!from) { return to }
+  (keys || []).forEach(key => {
+    from && (to[key] = from[key])
+    from && (delete from[key])
+  })
+  return to
+}
+
 /**
  * Simple bind, faster than native
  *
@@ -5,8 +63,8 @@
  * @param {Object} ctx
  * @return {Function}
  */
-export function bind (fn, ctx) {
-  return function (a) {
+export function bind (fn: Function, ctx: mixed) {
+  return function (a: mixed) {
     const l = arguments.length
     return l
       ? l > 1
@@ -16,7 +74,10 @@
   }
 }
 
-export function debounce (func, wait) {
+/**
+ * Only call the func the last time before it's not that frequently called.
+ */
+export function debounce (func: Function, wait: number) {
   let timerId
   function later () {
     timerId = null
@@ -28,12 +89,41 @@
   }
 }
 
-export function throttle (func, wait) {
+/**
+ * Only call the func the first time before a series frequently function calls happen.
+ */
+export function depress (func: Function, wait: number) {
+  let timerId
+  function later () {
+    timerId = null
+  }
+  return function () {
+    if (!timerId) {
+      func.apply()
+    }
+    clearTimeout(timerId)
+    timerId = setTimeout(later, wait)
+  }
+}
+
+/**
+ * Only call the func every time after a wait milliseconds if it's too frequently called.
+ */
+export function throttle (func: Function, wait: number, callLastTime: boolean) {
   let last = 0
-  return function (...args) {
+  let lastTimer = null
+  const lastTimeDuration = wait + (wait > 25 ? wait : 25)  // plus half wait time.
+  return function (...args: Array<mixed>) {
     const context = this
     const time = new Date().getTime()
     if (time - last > wait) {
+      if (callLastTime) {
+        lastTimer && clearTimeout(lastTimer)
+        lastTimer = setTimeout(function () {
+          lastTimer = null
+          func.apply(context, args)
+        }, lastTimeDuration)
+      }
       func.apply(context, args)
       last = time
     }
diff --git a/html5/render/vue/utils/index.js b/html5/render/vue/utils/index.js
index 7a2e9e0..032c472 100644
--- a/html5/render/vue/utils/index.js
+++ b/html5/render/vue/utils/index.js
@@ -1,6 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 export * from './func'
 export * from './event'
 export * from './component'
+export * from './lazyload'
+export * from './style'
+export * from './type'
 
 /**
  * Create a cached version of a pure function.
@@ -21,6 +42,14 @@
   return str.replace(camelizeRE, (_, c) => c.toUpperCase())
 })
 
+export function camelizeKeys (obj) {
+  const res = {}
+  for (const key in obj) {
+    res[camelize(key)] = obj[key]
+  }
+  return res
+}
+
 /**
  * Capitalize a string.
  */
@@ -39,6 +68,26 @@
     .toLowerCase()
 })
 
+export function hyphenateKeys (obj) {
+  const res = {}
+  for (const key in obj) {
+    res[hyphenate(key)] = obj[key]
+  }
+  return res
+}
+
+const vendorsReg = /webkit-|moz-|o-|ms-/
+export function hyphenateStyleKeys (obj) {
+  const res = {}
+  for (const key in obj) {
+    const hk = hyphenate(key).replace(vendorsReg, function ($0) {
+      return '-' + $0
+    })
+    res[hk] = obj[key]
+  }
+  return res
+}
+
 export function camelToKebab (name) {
   if (!name) { return '' }
   return name.replace(/([A-Z])/g, function (g, g1) {
@@ -46,18 +95,8 @@
   })
 }
 
-/**
- * Mix properties into target object.
- */
-export function extend (to, _from) {
-  for (const key in _from) {
-    to[key] = _from[key]
-  }
-  return to
-}
-
-export function appendStyle (css, styleId, replace) {
-  let style = document.getElementById(styleId)
+export function appendCss (css, cssId, replace) {
+  let style = document.getElementById(cssId)
   if (style && replace) {
     style.parentNode.removeChild(style)
     style = null
@@ -65,26 +104,12 @@
   if (!style) {
     style = document.createElement('style')
     style.type = 'text/css'
-    styleId && (style.id = styleId)
+    cssId && (style.id = cssId)
     document.getElementsByTagName('head')[0].appendChild(style)
   }
   style.appendChild(document.createTextNode(css))
 }
 
-/**
- * Strict object type check. Only returns true
- * for plain JavaScript objects.
- *
- * @param {*} obj
- * @return {Boolean}
- */
-
-const toString = Object.prototype.toString
-const OBJECT_STRING = '[object Object]'
-export function isPlainObject (obj) {
-  return toString.call(obj) === OBJECT_STRING
-}
-
 export function nextFrame (callback) {
   const runner = window.requestAnimationFrame
     || window.webkitRequestAnimationFrame
@@ -93,11 +118,11 @@
 }
 
 export function toCSSText (object) {
+  if (!object) { return }
+  const obj = hyphenateStyleKeys(object)
   let cssText = ''
-  if (object) {
-    for (const key in object) {
-      cssText += `${hyphenate(key)}:${object[key]};`
-    }
+  for (const key in obj) {
+    cssText += `${key}:${obj[key]};`
   }
   return cssText
 }
diff --git a/html5/render/vue/utils/lazyload.js b/html5/render/vue/utils/lazyload.js
new file mode 100644
index 0000000..04ff7c6
--- /dev/null
+++ b/html5/render/vue/utils/lazyload.js
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+
+import { isElementVisible } from './component'
+import { createEvent, dispatchEvent } from './event'
+import { throttle } from './func'
+import { tagImg } from './perf'
+
+const SCREEN_REC_LIMIT = 3  // just record the first 3 times for screen-render finishing.
+let doRecord = true
+
+function preLoadImg (src: string,
+    loadCallback: ?(Event) => void,
+    errorCallback: ?(Event) => void): void {
+  const img = new Image()
+  img.onload = loadCallback ? loadCallback.bind(img) : null
+  img.onerror = errorCallback ? errorCallback.bind(img) : null
+  img.src = src
+}
+
+export function applySrc (item: any, src: ?string, placeholderSrc: ?string): void {
+  if (!src) { return }
+  function finallCb () {
+    item.removeAttribute('img-src')
+    delete item._src_loading
+    item._src_loaded = true
+    if (doRecord) {
+      if (window._weex_perf.renderTime.length < SCREEN_REC_LIMIT) {
+        tagImg() // tag lastest img onload time.
+      }
+      else {
+        doRecord = false
+      }
+    }
+  }
+  if (item._src_loading || item._src_loaded) {
+    return
+  }
+  item._src_loading = true
+  preLoadImg(src, function (evt) {
+    item.style.backgroundImage = `url(${src || ''})`
+    const { width: naturalWidth, height: naturalHeight } = this
+    const params = {
+      success: true,
+      size: { naturalWidth, naturalHeight }
+    }
+    dispatchEvent(item, createEvent(item, 'load', params))
+    finallCb()
+  }, function (evt) {
+    const params = {
+      success: false,
+      size: { naturalWidth: 0, naturalHeight: 0 }
+    }
+    dispatchEvent(item, createEvent(item, 'load', params))
+    if (placeholderSrc) {
+      preLoadImg(placeholderSrc, function () {
+        item.style.backgroundImage = `url(${placeholderSrc || ''})`
+      })
+    }
+    finallCb()
+  })
+}
+
+export function fireLazyload (el: Array<any> | any | null, ignoreVisibility: ?boolean): void {
+  if (Array.isArray(el)) {
+    return el.forEach(ct => fireLazyload(ct))
+  }
+  el = el || document.body
+  if (!el) { return }
+  const imgs: NodeList = (el || document.body).querySelectorAll('[img-src]')
+  for (let i: number = 0; i < imgs.length; i++) {
+    const img = imgs[i]
+    if (typeof ignoreVisibility === 'boolean' && ignoreVisibility) {
+      applySrc(img, img.getAttribute('img-src'), img.getAttribute('img-placeholder'))
+    }
+    else if (isElementVisible(img, el)) {
+      applySrc(img, img.getAttribute('img-src'), img.getAttribute('img-placeholder'))
+    }
+    // In somecases there are images out of the screen in x-axis. There
+    // should not be a break point in these cases.
+    // else {
+    //   // alreay out of view, no need to compare any more.
+    //   break
+    // }
+  }
+}
+
+/**
+ * cache a throttle lazyload function for every container element
+ * once for different wait times separate.
+ *   the architecture of this cache:
+ *      cache: {
+ *        el.id: {
+ *          wait: throttledFunction () { ... }
+ *        }
+ *      }
+ */
+const cache = {}
+let _uid: number = 1
+export function getThrottleLazyload (wait: number = 16, el: any | null = document.body) {
+  let id: number = +(el && el.dataset.throttleId)
+  if (isNaN(id) || id <= 0) {
+    id = _uid++
+    el && el.setAttribute('data-throttle-id', id + '')
+  }
+
+  !cache[id] && (cache[id] = {})
+  const throttled = cache[id][wait] ||
+    (cache[id][wait] = throttle(
+      fireLazyload.bind(this, el),
+      parseFloat(wait),
+      // true for callLastTime.
+      // to trigger once more time after the last throttled function called with a little more delay.
+      true)
+    )
+  return throttled
+}
diff --git a/html5/render/vue/utils/perf.js b/html5/render/vue/utils/perf.js
new file mode 100644
index 0000000..13be79f
--- /dev/null
+++ b/html5/render/vue/utils/perf.js
@@ -0,0 +1,225 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+/**
+ * @fileOverview: perf data recorder.
+ */
+
+import { debounce, depress } from './func'
+
+// performance tracker for weex.
+const perf: {
+  earliestBeforeCreates: Array<number>,
+  latestMounts: Array<number>,
+  earliestBeforeUpdates: Array<number>,
+  latestUpdates: Array<number>,
+  latestRenderFinishes: Array<number>,
+  // createTime: earliest beforeCreate -> latest mounted.
+  createTime: Array<{ start: number, end: number, duration: number }>,
+  // updateTime: earliest beforeUpdate -> latest updated.
+  updateTime: Array<{ start: number, end: number, duration: number }>,
+  // renderTime: earliest beforeCreate/beforeUpdate -> latest img loaded.
+  renderTime: Array<{ start: number, end: number, duration: number }>,
+  entries: Array<{ requestStart: number, responseEnd: number }>,
+  time: {},
+  firstAllMountedTime: ?number
+} = window._weex_perf = {
+  earliestBeforeCreates: [],
+  latestMounts: [],
+  earliestBeforeUpdates: [],
+  latestUpdates: [],
+  latestRenderFinishes: [],
+  createTime: [],
+  updateTime: [],
+  renderTime: [],
+  entries: [],
+  time: {},
+  firstAllMountedTime: null
+}
+
+const tmp = {}
+
+const IMG_REC_INDENT: number = 500  // record loading events after 500ms towards last recording.
+
+let earliestBeforeUpdateTime: number = 0
+let earliestBeforeCreateTime: number = 0
+
+let isFirstScreenDetected = false
+
+function getNow (): number {
+  return performance.now ? performance.now() : new Date().getTime()
+}
+
+function getEntries (): Array<any> {
+  return performance.getEntries
+    ? performance.getEntries()
+    : [{ responseEnd: getNow() - IMG_REC_INDENT }]
+}
+
+function _d (func: Function, wait: number) {
+  let timerId
+  let now
+  function later (now) {
+    timerId = null
+    func(now)
+  }
+  return function () {
+    now = getNow()
+    clearTimeout(timerId)
+    timerId = setTimeout(later.bind(null, now), wait)
+  }
+}
+
+export function tagFirstScreen (time?: number): void {
+  if (!time) {
+    time = getNow()
+  }
+  perf.latestRenderFinishes.push(time)
+  const start = Math.max(earliestBeforeCreateTime, earliestBeforeUpdateTime)
+  perf.renderTime.push({
+    start,
+    end: time,
+    duration: time - start
+  })
+
+  const num = perf.renderTime.length
+  perf[`screenTime${num}`] = time
+  window.weex.emit('renderfinish', time)
+  if (!isFirstScreenDetected) {
+    isFirstScreenDetected = true
+    window.weex.emit('firstscreenfinish', time)
+  }
+  if (process.env.NODE_ENV === 'development') {
+    console.log(`screenTime[${num}]: ${time} ms.`)
+    console.log('_weex_perf:', window._weex_perf)
+  }
+}
+
+/**
+ * get first screen time.
+ */
+const debouncedTagImg = debounce(function () {
+  const entries = getEntries()
+  const len = entries.length
+  let i = 0
+  let end = 0
+  while (i < len) {
+    const responseEnd = entries[i].responseEnd
+    end = end < responseEnd ? responseEnd : end
+    perf.entries.push({
+      requestStart: entries[i].requestStart,
+      responseEnd
+    })
+    i++
+  }
+  tagFirstScreen(end)
+}, IMG_REC_INDENT)
+
+export function tagImg (): void {
+  debouncedTagImg()
+}
+
+/**
+ * recording the earliest 'beforeCreate' time.
+ */
+const depressedTagBeforeCreate = depress(function () {
+  const now = getNow()
+  earliestBeforeCreateTime = now
+  perf.earliestBeforeCreates.push(now)
+}, 25)
+
+export function tagBeforeCreate (): void {
+  depressedTagBeforeCreate()
+}
+
+export function tagRootMounted (): void {
+  const now = getNow()
+  perf.latestMounts.push(now)
+  if (!perf.firstAllMountedTime) {
+    perf.firstAllMountedTime = now
+    if (process.env.NODE_ENV === 'development') {
+      console.log(`first all mounted time: ${now} ms.`)
+    }
+  }
+}
+
+/**
+ * recording the latest 'mounted' time.
+ */
+const debouncedTagMounted = _d(function (now) {
+  perf.latestMounts.push(now)
+  perf.createTime.push({
+    start: earliestBeforeCreateTime,
+    end: now,
+    duration: now - earliestBeforeCreateTime
+  })
+
+  if (!perf.firstAllMountedTime) {
+    perf.firstAllMountedTime = now
+    if (process.env.NODE_ENV === 'development') {
+      console.log(`first all mounted time: ${now} ms.`)
+    }
+  }
+}, 25)
+
+export function tagMounted (): void {
+  debouncedTagMounted()
+}
+
+/**
+ * recording the earliest 'beforeUpdate' time.
+ */
+const depressedTagBeforeUpdate = depress(function () {
+  const now = getNow()
+  earliestBeforeUpdateTime = now
+  perf.earliestBeforeUpdates.push(now)
+}, 25)
+
+export function tagBeforeUpdate (): void {
+  depressedTagBeforeUpdate()
+}
+
+/**
+ * recording the latest 'updated' time.
+ */
+const debouncedTagUpdated = _d(function (now) {
+  perf.latestUpdates.push(now)
+  perf.updateTime.push({
+    start: earliestBeforeUpdateTime,
+    end: now,
+    duration: now - earliestBeforeUpdateTime
+  })
+}, 25)
+
+export function tagUpdated (): void {
+  debouncedTagUpdated()
+}
+
+export function tagBegin (name: string): void {
+  tmp[name] = getNow()
+}
+
+export function tagEnd (name: string): void {
+  let pre = perf.time[name]
+  if (!pre) {
+    pre = 0
+  }
+  perf.time[name] = pre + getNow() - tmp[name]
+}
diff --git a/html5/render/vue/utils/style.js b/html5/render/vue/utils/style.js
new file mode 100644
index 0000000..7b51f29
--- /dev/null
+++ b/html5/render/vue/utils/style.js
@@ -0,0 +1,191 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+
+import { getViewportInfo } from '../env/viewport'
+import addPrefix from 'inline-style-prefixer/static/index'
+
+const noUnitsNumberKeys = [
+  'flex',
+  'opacity',
+  'zIndex',
+  'fontWeight',
+  'lines'
+]
+
+/**
+ * remove comments from a cssText.
+ */
+export function trimComment (cssText: string): string {
+  return cssText.replace(/(?:\/\*).*\*\//g, '')
+}
+
+let support: boolean | null = null
+
+export function supportSticky (): boolean {
+  if (support !== null) {
+    return support
+  }
+  const element = window.document.createElement('div')
+  const elementStyle = element.style
+  elementStyle.cssText = 'position:-webkit-sticky;position:sticky;'
+  support = elementStyle.position.indexOf('sticky') !== -1
+  return support
+}
+
+const regPercentage = /^[+-]?\d+(\.\d+)?%$/
+export function isPercentage (val: string) {
+  return regPercentage.test(val)
+}
+
+const regUnitsNum = /^([+-]?\d+(?:\.\d+)?)([p,w]x)?$/ // support units: px, wx.
+export function normalizeUnitsNum (val: string): string {
+  const match = val.match(regUnitsNum)
+  if (!match) { return '' }
+  let unit = 'px' // px by default.
+  if (match[2]) {
+    unit = match[2]
+  }
+  return parseScale(parseFloat(match[1]), unit)
+}
+
+function parseScale (val: number, unit: string): string {
+  const { scale, dpr } = getViewportInfo()
+  const unitScaleMap = {
+    px: scale,
+    wx: scale * dpr
+  }
+  return val * unitScaleMap[unit] + 'px'
+}
+
+export function normalizeString (styleKey: string, styleVal: string): string {
+  if (isPercentage(styleVal)) {
+    return styleVal
+  }
+
+  // 1. test if is a regular scale css. e.g. `width: 100px;`
+  const unitsNum = normalizeUnitsNum(styleVal)
+  if (unitsNum) { return unitsNum }
+
+  // 2. test if is a translate scale. e.g. `transform: translate2d(1px, 2px);`
+  const regTranslateString = /translate[^(]*\([\d ,.pwx]+\)/i // unit support: wx, px.
+  if (styleKey.match(/transform/i) && regTranslateString.test(styleVal)) {
+    const val = styleVal.replace(regTranslateString, function (translate) {
+      const reg = /([+-]?\d+(?:\.\d+)?)([p,w]x)?(?![dD])/g
+      return translate.replace(reg, function (m, $1, $2) {
+        const unit = $2 || 'px'
+        return parseScale($1, unit)
+      })
+    })
+    return val
+  }
+
+  // 3. test if is a border style. e.g. `border: 1px solid red;`
+  const regBorderKey = /^border(?:-(?:top|bottom|left|right))?$/
+  const regBorderVal = /^([+-]?\d+(?:\.\d+)?)([p ,w]x)?\s+/
+  if (regBorderKey.test(styleKey) && regBorderVal.test(styleVal)) {
+    const reg = /^([+-]?\d+(?:\.\d+)?)([p,w]x)?/
+    const val = styleVal.replace(reg, function (m, $1, $2) {
+      const unit = $2 || 'px'
+      return parseScale($1, unit)
+    })
+    return val
+  }
+
+  // otherwise
+  return styleVal
+}
+
+export function autoPrefix (style: {}): {} {
+  return addPrefix(style)
+}
+
+export function normalizeNumber (styleKey: string, styleVal: number): string {
+  const { scale } = getViewportInfo()
+  return styleVal * scale + 'px'
+}
+
+/**
+ * normalize style to adapte to current viewport by multiply current scale.
+ * @param  {object} style: should be camelCase.
+ */
+export function normalizeStyle (style: {}) {
+  const res = {}
+  for (const key in style) {
+    const val = style[key]
+    if (noUnitsNumberKeys.indexOf(key) > -1) {
+      res[key] = val
+      continue
+    }
+    switch (typeof val) {
+      case 'string':
+        res[key] = normalizeString(key, val)
+        break
+      case 'number':
+        res[key] = normalizeNumber(key, val)
+        break
+      default:
+        res[key] = val
+        break
+    }
+  }
+  return res
+}
+
+/**
+ * add transform style to element.
+ * @param {HTMLElement} elm
+ * @param {object} style: transform object, format is like this:
+ *   {
+ *     translate: 'translate3d(2px, 2px, 2px)',
+ *     scale: 'scale(0.2)',
+ *     rotate: 'rotate(30deg)'
+ *   }
+ * @param {boolean} replace: whether to replace all transform properties.
+ */
+export function addTransform (elm: HTMLElement, style: {}, replace: boolean): void {
+  if (!style) { return }
+  const transformStr = elm.style.webkitTransform || elm.style.transform
+  let styleObj = {}
+  if (
+    transformStr
+    && !replace
+    && transformStr.match(/(?: *(?:translate|rotate|scale)[^(]*\([^(]+\))+/i)) {
+    styleObj = transformStr.trim().split(' ').reduce(function (pre, str) {
+      ['translate', 'scale', 'rotate'].forEach(function (name) {
+        if (new RegExp(name, 'i').test(str)) {
+          pre[name] = str
+        }
+      })
+      return pre
+    }, {})
+  }
+  for (const key in style) {
+    const val = style[key]
+    if (val) {
+      styleObj[key] = val
+    }
+  }
+  const resStr = Object.keys(style).reduce(function (pre, key) {
+    return pre + style[key] + ' '
+  }, '')
+  elm.style.webkitTransform = resStr
+  elm.style.transform = resStr
+}
diff --git a/html5/render/vue/utils/type.js b/html5/render/vue/utils/type.js
new file mode 100644
index 0000000..32216a6
--- /dev/null
+++ b/html5/render/vue/utils/type.js
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+// @flow
+
+const toString = Object.prototype.toString
+
+/**
+ * Strict object type check. Only returns true
+ * for plain JavaScript objects.
+ *
+ * @param {*} obj
+ * @return {Boolean}
+ */
+const OBJECT_STRING = '[object Object]'
+export function isPlainObject (obj?: mixed): boolean {
+  return toString.call(obj) === OBJECT_STRING
+}
+
+const ARRAY_STRING = '[object Array]'
+export function isArray (arr?: mixed): boolean {
+  return toString.call(arr) === ARRAY_STRING
+}
diff --git a/html5/render/vue/validator/check.js b/html5/render/vue/validator/check.js
index 1d9d829..5a85006 100644
--- a/html5/render/vue/validator/check.js
+++ b/html5/render/vue/validator/check.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 const supportedProperties = {
   '@common': [
     'id', 'ref', 'style', 'class', 'append'
diff --git a/html5/render/vue/validator/index.js b/html5/render/vue/validator/index.js
index 132b980..d17c9dc 100644
--- a/html5/render/vue/validator/index.js
+++ b/html5/render/vue/validator/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as styleValidator from './style'
 import * as propValidator from './prop'
 import { hyphenate, camelize, isPlainObject } from '../utils'
diff --git a/html5/render/vue/validator/prop.js b/html5/render/vue/validator/prop.js
index 7568f8c..f2eb1ba 100644
--- a/html5/render/vue/validator/prop.js
+++ b/html5/render/vue/validator/prop.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 export function isString (value) {
   return Object.prototype.toString.call(value) === '[object String]'
diff --git a/html5/render/vue/validator/style.js b/html5/render/vue/validator/style.js
index 90997af..2e6b128 100644
--- a/html5/render/vue/validator/style.js
+++ b/html5/render/vue/validator/style.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 /**
  * Validate the CSS color value.
diff --git a/html5/runtime/callback-manager.js b/html5/runtime/callback-manager.js
index 3dad20d..a83f034 100644
--- a/html5/runtime/callback-manager.js
+++ b/html5/runtime/callback-manager.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * For general callback management of a certain Weex instance.
  * Because function can not passed into native, so we create callback
diff --git a/html5/runtime/config.js b/html5/runtime/config.js
index d69d44e..4a8fd58 100644
--- a/html5/runtime/config.js
+++ b/html5/runtime/config.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { Document, Element, Comment } from './vdom'
 import Listener from './listener'
 import { TaskCenter } from './task-center'
diff --git a/html5/runtime/handler.js b/html5/runtime/handler.js
index 21a68bd..71bf4c5 100644
--- a/html5/runtime/handler.js
+++ b/html5/runtime/handler.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Task handler for communication between javascript and native.
diff --git a/html5/runtime/index.js b/html5/runtime/index.js
index aaa3423..25810ac 100644
--- a/html5/runtime/index.js
+++ b/html5/runtime/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Register framework(s) in JS runtime. Weex supply two layers for 3rd-party
diff --git a/html5/runtime/init.js b/html5/runtime/init.js
index ad44460..ad46a3e 100644
--- a/html5/runtime/init.js
+++ b/html5/runtime/init.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { init as initTaskHandler } from './task-center'
 import { registerElement } from './vdom/element-types'
 import { services, register, unregister } from './service'
diff --git a/html5/runtime/listener.js b/html5/runtime/listener.js
index 30255a2..4b5b270 100644
--- a/html5/runtime/listener.js
+++ b/html5/runtime/listener.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Listen virtual-dom operations and create corresponding actions.
diff --git a/html5/runtime/service.js b/html5/runtime/service.js
index 0773ed6..6f2e72e 100644
--- a/html5/runtime/service.js
+++ b/html5/runtime/service.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 // JS Services
 
 export const services = []
diff --git a/html5/runtime/task-center.js b/html5/runtime/task-center.js
index c39192a..7fe6096 100644
--- a/html5/runtime/task-center.js
+++ b/html5/runtime/task-center.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import CallbackManager from './callback-manager'
 import Element from './vdom/element'
 
diff --git a/html5/runtime/vdom/comment.js b/html5/runtime/vdom/comment.js
index 16f3fb9..687b4cb 100644
--- a/html5/runtime/vdom/comment.js
+++ b/html5/runtime/vdom/comment.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Virtual-DOM Comment.
diff --git a/html5/runtime/vdom/document.js b/html5/runtime/vdom/document.js
index 34e8936..77d146b 100644
--- a/html5/runtime/vdom/document.js
+++ b/html5/runtime/vdom/document.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Virtual-DOM Document.
diff --git a/html5/runtime/vdom/element-types.js b/html5/runtime/vdom/element-types.js
index a4a24cc..369fc2d 100644
--- a/html5/runtime/vdom/element-types.js
+++ b/html5/runtime/vdom/element-types.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { getTaskCenter } from './operation'
 
 let Element
diff --git a/html5/runtime/vdom/element.js b/html5/runtime/vdom/element.js
index e7a7526..8a78198 100644
--- a/html5/runtime/vdom/element.js
+++ b/html5/runtime/vdom/element.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Virtual-DOM Element.
diff --git a/html5/runtime/vdom/index.js b/html5/runtime/vdom/index.js
index e2f0ad7..119a761 100644
--- a/html5/runtime/vdom/index.js
+++ b/html5/runtime/vdom/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import Node from './node'
 import Element from './element'
 import Comment from './comment'
diff --git a/html5/runtime/vdom/node.js b/html5/runtime/vdom/node.js
index 84e1dc0..559d210 100644
--- a/html5/runtime/vdom/node.js
+++ b/html5/runtime/vdom/node.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Virtual-DOM Node. It's the supper class of Element and Comment.
diff --git a/html5/runtime/vdom/operation.js b/html5/runtime/vdom/operation.js
index 7f8c65f..a29ac4c 100644
--- a/html5/runtime/vdom/operation.js
+++ b/html5/runtime/vdom/operation.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 const docMap = {}
 
diff --git a/html5/services/amd/index.js b/html5/services/amd/index.js
index dd5a0eb..3a7a491 100644
--- a/html5/services/amd/index.js
+++ b/html5/services/amd/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * A simple implementation of AMD for weex.
diff --git a/html5/services/broadcast-channel/index.js b/html5/services/broadcast-channel/index.js
index 2e04e30..cc7524e 100644
--- a/html5/services/broadcast-channel/index.js
+++ b/html5/services/broadcast-channel/index.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * The polyfill of BroadcastChannel API.
diff --git a/html5/services/broadcast-channel/message-event.js b/html5/services/broadcast-channel/message-event.js
index 437728e..00fa36a 100644
--- a/html5/services/broadcast-channel/message-event.js
+++ b/html5/services/broadcast-channel/message-event.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * Mock MessageEvent type
  * @param {string} type
diff --git a/html5/services/index.js b/html5/services/index.js
index 266a4d3..52cd97d 100644
--- a/html5/services/index.js
+++ b/html5/services/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import BroadcastChannel from './broadcast-channel/index'
 
 export default {
diff --git a/html5/shared/arrayFrom.js b/html5/shared/arrayFrom.js
index 2c424a1..af5e78c 100644
--- a/html5/shared/arrayFrom.js
+++ b/html5/shared/arrayFrom.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /* eslint-disable */
 
 // Production steps of ECMA-262, Edition 6, 22.1.2.1
diff --git a/html5/shared/console.js b/html5/shared/console.js
index d18da18..fdbee58 100644
--- a/html5/shared/console.js
+++ b/html5/shared/console.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * This file will hack `console` methods by `WXEnvironment.logLevel`.
diff --git a/html5/shared/freeze.js b/html5/shared/freeze.js
index 44fb283..f997a5f 100644
--- a/html5/shared/freeze.js
+++ b/html5/shared/freeze.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /**
  * Freeze the prototype of javascript build-in objects.
  */
@@ -6,13 +24,67 @@
   Object.freeze(Object)
   Object.freeze(Array)
 
-  Object.freeze(Object.prototype)
+  // Object.freeze(Object.prototype)
+  freezeObjectProto()
   Object.freeze(Array.prototype)
   Object.freeze(String.prototype)
   Object.freeze(Number.prototype)
   Object.freeze(Boolean.prototype)
 
-  Object.freeze(Error.prototype)
+  // Object.freeze(Error.prototype)
+  freezeErrorProto()
   Object.freeze(Date.prototype)
   Object.freeze(RegExp.prototype)
 }
+
+function freezeObjectProto () {
+  const proto = Object.prototype
+  const protoName = 'Object.prototype'
+  freezeProtoProperty(proto, '__defineGetter__', protoName)
+  freezeProtoProperty(proto, '__defineSetter__', protoName)
+  freezeProtoProperty(proto, '__lookupGetter__', protoName)
+  freezeProtoProperty(proto, '__lookupSetter__', protoName)
+  freezeProtoProperty(proto, 'constructor', protoName)
+  freezeProtoProperty(proto, 'hasOwnProperty', protoName)
+  freezeProtoProperty(proto, 'isPrototypeOf', protoName)
+  freezeProtoProperty(proto, 'propertyIsEnumerable', protoName)
+  freezeProtoProperty(proto, 'toLocaleString', protoName)
+  freezeProtoProperty(proto, 'toString', protoName)
+  freezeProtoProperty(proto, 'valueOf', protoName)
+  Object.seal(proto)
+}
+
+function freezeErrorProto () {
+  const proto = Error.prototype
+  const protoName = 'Error.prototype'
+  freezeProtoProperty(proto, 'name', protoName)
+  freezeProtoProperty(proto, 'message', protoName)
+  freezeProtoProperty(proto, 'toString', protoName)
+  freezeProtoProperty(proto, 'constructor', protoName)
+  Object.seal(proto)
+}
+
+function freezeProtoProperty (proto, propertyName, protoName) {
+  if (!proto.hasOwnProperty(propertyName)) {
+    return
+  }
+
+  const origin = proto[propertyName]
+  Object.defineProperty(proto, propertyName, {
+    get: function () {
+      return origin
+    },
+    set: function (value) {
+      if (this === proto) {
+        throw Error(`Cannot assign to read only property ${propertyName} of ${protoName}`)
+      }
+
+      Object.defineProperty(this, propertyName, {
+        value: value,
+        writable: true
+      })
+
+      return value
+    }
+  })
+}
diff --git a/html5/shared/index.js b/html5/shared/index.js
index 956686a..27b95c3 100644
--- a/html5/shared/index.js
+++ b/html5/shared/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import './arrayFrom'
 import './objectAssign'
 import './objectSetPrototypeOf'
diff --git a/html5/shared/objectAssign.js b/html5/shared/objectAssign.js
index 8d96cf3..7aa5993 100644
--- a/html5/shared/objectAssign.js
+++ b/html5/shared/objectAssign.js
@@ -1 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import 'core-js/fn/object/assign'
diff --git a/html5/shared/objectSetPrototypeOf.js b/html5/shared/objectSetPrototypeOf.js
index 1be39f2..6364ce4 100644
--- a/html5/shared/objectSetPrototypeOf.js
+++ b/html5/shared/objectSetPrototypeOf.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /* eslint-disable */
 
 // https://gist.github.com/WebReflection/5593554
diff --git a/html5/shared/promise.js b/html5/shared/promise.js
index 0b0dbc0..39fe816 100644
--- a/html5/shared/promise.js
+++ b/html5/shared/promise.js
@@ -1,5 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 // fix Promise Problem on JSContext of iOS7~8
 // @see https://bugs.webkit.org/show_bug.cgi?id=135866
+
 const { WXEnvironment } = global
 
 /* istanbul ignore next */
diff --git a/html5/shared/setTimeout.js b/html5/shared/setTimeout.js
index c0fd472..d545d6d 100644
--- a/html5/shared/setTimeout.js
+++ b/html5/shared/setTimeout.js
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * @fileOverview
  * Polyfill `setTimeout` on Android V8 using native method
diff --git a/html5/test/case/basic/append-root.source.js b/html5/test/case/basic/append-root.source.js
index 0a40a51..dfe60d7 100644
--- a/html5/test/case/basic/append-root.source.js
+++ b/html5/test/case/basic/append-root.source.js
@@ -1,4 +1,21 @@
-// module
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/append', function(require, exports, module) {;
   module.exports = {
     data: function() {
@@ -55,4 +72,4 @@
 
 // require module
 
-bootstrap('@weex-component/append')
\ No newline at end of file
+bootstrap('@weex-component/append')
diff --git a/html5/test/case/basic/append.source.js b/html5/test/case/basic/append.source.js
index 72771c5..c216578 100644
--- a/html5/test/case/basic/append.source.js
+++ b/html5/test/case/basic/append.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/taobao-item', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/backward1.source.js b/html5/test/case/basic/backward1.source.js
index d40e231..1bf6d74 100644
--- a/html5/test/case/basic/backward1.source.js
+++ b/html5/test/case/basic/backward1.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 register('taobao-item', {
 
     data: function() {
@@ -92,4 +110,4 @@
 
 // require module
 
-render('backward1', {})
\ No newline at end of file
+render('backward1', {})
diff --git a/html5/test/case/basic/backward2.source.js b/html5/test/case/basic/backward2.source.js
index 4416a7b..cf4885a 100644
--- a/html5/test/case/basic/backward2.source.js
+++ b/html5/test/case/basic/backward2.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('taobao-item', function (require, exports, module) {
 
 ;
@@ -92,4 +110,4 @@
 
 // require module
 
-require('backward2')()
\ No newline at end of file
+require('backward2')()
diff --git a/html5/test/case/basic/components.source.js b/html5/test/case/basic/components.source.js
index 077f8e9..f095486 100644
--- a/html5/test/case/basic/components.source.js
+++ b/html5/test/case/basic/components.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 function otherNameFunction () {
   var module = {}
   var exports = {}
diff --git a/html5/test/case/basic/computed-in-repeat.source.js b/html5/test/case/basic/computed-in-repeat.source.js
index 9adc20c..fc203a9 100644
--- a/html5/test/case/basic/computed-in-repeat.source.js
+++ b/html5/test/case/basic/computed-in-repeat.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/e9b6b411765a9cc9e9d1a0469ae0a84c', function(require, exports, module) {
 
     ;
@@ -61,4 +79,4 @@
 // require module
 bootstrap('@weex-component/e9b6b411765a9cc9e9d1a0469ae0a84c', {
     "transformerVersion": "0.3.1"
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/basic/created.source.js b/html5/test/case/basic/created.source.js
index 3591bb5..dd2ee5b 100644
--- a/html5/test/case/basic/created.source.js
+++ b/html5/test/case/basic/created.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/created', function(require, exports, module) {
 
     ;
@@ -35,4 +53,4 @@
 // require module
 bootstrap('@weex-component/created', {
     "transformerVersion": "0.3.1"
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/basic/dynamic-id.source.js b/html5/test/case/basic/dynamic-id.source.js
index d9abf61..6616cec 100644
--- a/html5/test/case/basic/dynamic-id.source.js
+++ b/html5/test/case/basic/dynamic-id.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/id', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/dynamic-property.source.js b/html5/test/case/basic/dynamic-property.source.js
index b04a53f..880d468 100644
--- a/html5/test/case/basic/dynamic-property.source.js
+++ b/html5/test/case/basic/dynamic-property.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/dynamic-property', function (require, exports, module) {
 
   ;module.exports.style = {}
diff --git a/html5/test/case/basic/dynamic-type.source.js b/html5/test/case/basic/dynamic-type.source.js
index bb9359a..62b8f72 100644
--- a/html5/test/case/basic/dynamic-type.source.js
+++ b/html5/test/case/basic/dynamic-type.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/dynamic-type', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/foo.source.js b/html5/test/case/basic/foo.source.js
index 580a5af..027eee1 100644
--- a/html5/test/case/basic/foo.source.js
+++ b/html5/test/case/basic/foo.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo', function (require, exports, module) {
 
 ;
@@ -23,4 +41,4 @@
 ;})
 
 
-bootstrap('@weex-component/foo')
\ No newline at end of file
+bootstrap('@weex-component/foo')
diff --git a/html5/test/case/basic/foo2.source.js b/html5/test/case/basic/foo2.source.js
index 3f54cd5..cabf559 100644
--- a/html5/test/case/basic/foo2.source.js
+++ b/html5/test/case/basic/foo2.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo2', function (require, exports, module) {
 
 ;
@@ -31,4 +49,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo2')
\ No newline at end of file
+bootstrap('@weex-component/foo2')
diff --git a/html5/test/case/basic/foo3.source.js b/html5/test/case/basic/foo3.source.js
index 05228fd..7fda995 100644
--- a/html5/test/case/basic/foo3.source.js
+++ b/html5/test/case/basic/foo3.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo3', function (require, exports, module) {
 
 ;
@@ -20,4 +38,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo3')
\ No newline at end of file
+bootstrap('@weex-component/foo3')
diff --git a/html5/test/case/basic/foo4.source.js b/html5/test/case/basic/foo4.source.js
index 91bad21..f842abf 100644
--- a/html5/test/case/basic/foo4.source.js
+++ b/html5/test/case/basic/foo4.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo4', function (require, exports, module) {
 
 ;
@@ -23,4 +41,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo4')
\ No newline at end of file
+bootstrap('@weex-component/foo4')
diff --git a/html5/test/case/basic/foo5.source.js b/html5/test/case/basic/foo5.source.js
index 5525cd7..b09fc03 100644
--- a/html5/test/case/basic/foo5.source.js
+++ b/html5/test/case/basic/foo5.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo5', function (require, exports, module) {
 
 ;
@@ -29,4 +47,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo5')
\ No newline at end of file
+bootstrap('@weex-component/foo5')
diff --git a/html5/test/case/basic/foo6.source.js b/html5/test/case/basic/foo6.source.js
index 64e7429..4301a50 100644
--- a/html5/test/case/basic/foo6.source.js
+++ b/html5/test/case/basic/foo6.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo6', function (require, exports, module) {
 
 ;
@@ -50,4 +68,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo6')
\ No newline at end of file
+bootstrap('@weex-component/foo6')
diff --git a/html5/test/case/basic/foo7.source.js b/html5/test/case/basic/foo7.source.js
index d31d05b..2d9b43f 100644
--- a/html5/test/case/basic/foo7.source.js
+++ b/html5/test/case/basic/foo7.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo7', function (require, exports, module) {
 
 ;
@@ -55,4 +73,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo7')
\ No newline at end of file
+bootstrap('@weex-component/foo7')
diff --git a/html5/test/case/basic/foo8.source.js b/html5/test/case/basic/foo8.source.js
index 08d78fe..d2512f2 100644
--- a/html5/test/case/basic/foo8.source.js
+++ b/html5/test/case/basic/foo8.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo8', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/foo9.source.js b/html5/test/case/basic/foo9.source.js
index 1af1f7b..da534e9 100644
--- a/html5/test/case/basic/foo9.source.js
+++ b/html5/test/case/basic/foo9.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/taobao-item', function (require, exports, module) {
 
 ;
@@ -92,4 +110,4 @@
 
 // require module
 
-bootstrap('@weex-component/foo9')
\ No newline at end of file
+bootstrap('@weex-component/foo9')
diff --git a/html5/test/case/basic/global-weex-object.source.js b/html5/test/case/basic/global-weex-object.source.js
index 3a8e99f..252af7e 100644
--- a/html5/test/case/basic/global-weex-object.source.js
+++ b/html5/test/case/basic/global-weex-object.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 weex.define('@weex-component/foo', function (require, exports, module) {
   module.exports = {
     data: function () {
diff --git a/html5/test/case/basic/id.source.js b/html5/test/case/basic/id.source.js
index 4a5fb65..3c85886 100644
--- a/html5/test/case/basic/id.source.js
+++ b/html5/test/case/basic/id.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/id', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/if-repeat.source.js b/html5/test/case/basic/if-repeat.source.js
index fd42775..aa62931 100644
--- a/html5/test/case/basic/if-repeat.source.js
+++ b/html5/test/case/basic/if-repeat.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/if-repeat', function (require, exports, module) {
 
 ;
@@ -39,4 +57,4 @@
 
 // require module
 
-bootstrap('@weex-component/if-repeat')
\ No newline at end of file
+bootstrap('@weex-component/if-repeat')
diff --git a/html5/test/case/basic/if-root.source.js b/html5/test/case/basic/if-root.source.js
index 4869ee8..ca94316 100644
--- a/html5/test/case/basic/if-root.source.js
+++ b/html5/test/case/basic/if-root.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/if-root', function (require, exports, module) {
 
 ;module.exports = {
diff --git a/html5/test/case/basic/if.source.js b/html5/test/case/basic/if.source.js
index 797ad56..3ebb80c 100644
--- a/html5/test/case/basic/if.source.js
+++ b/html5/test/case/basic/if.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/if', function (require, exports, module) {
 
 ;
@@ -36,4 +54,4 @@
 
 // require module
 
-bootstrap('@weex-component/if')
\ No newline at end of file
+bootstrap('@weex-component/if')
diff --git a/html5/test/case/basic/promise.source.js b/html5/test/case/basic/promise.source.js
index f1e6261..67554ba 100644
--- a/html5/test/case/basic/promise.source.js
+++ b/html5/test/case/basic/promise.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo', function (require, exports, module) {
 new Promise(function (fulfill, reject){
   fulfill(1)
diff --git a/html5/test/case/basic/ready.source.js b/html5/test/case/basic/ready.source.js
index a7704f9..08ee893 100644
--- a/html5/test/case/basic/ready.source.js
+++ b/html5/test/case/basic/ready.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/created', function(require, exports, module) {
 
     ;
@@ -35,4 +53,4 @@
 // require module
 bootstrap('@weex-component/created', {
     "transformerVersion": "0.3.1"
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/basic/repeat-array-kv.source.js b/html5/test/case/basic/repeat-array-kv.source.js
index 8318828..21f26c7 100644
--- a/html5/test/case/basic/repeat-array-kv.source.js
+++ b/html5/test/case/basic/repeat-array-kv.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-array-kv', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/repeat-array-no-kv.source.js b/html5/test/case/basic/repeat-array-no-kv.source.js
index ad5a251..910bf04 100644
--- a/html5/test/case/basic/repeat-array-no-kv.source.js
+++ b/html5/test/case/basic/repeat-array-no-kv.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-array-no-kv', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/repeat-array-non-obj.source.js b/html5/test/case/basic/repeat-array-non-obj.source.js
index 31378c8..71de5d2 100644
--- a/html5/test/case/basic/repeat-array-non-obj.source.js
+++ b/html5/test/case/basic/repeat-array-non-obj.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-array-non-obj', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/repeat-array-v.source.js b/html5/test/case/basic/repeat-array-v.source.js
index 1840bd2..0fecb04 100644
--- a/html5/test/case/basic/repeat-array-v.source.js
+++ b/html5/test/case/basic/repeat-array-v.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-array-v', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/repeat-index.source.js b/html5/test/case/basic/repeat-index.source.js
index 6e0205e..5bdc4ea 100644
--- a/html5/test/case/basic/repeat-index.source.js
+++ b/html5/test/case/basic/repeat-index.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-index', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/repeat-root.source.js b/html5/test/case/basic/repeat-root.source.js
index d37049e..ac79ae4 100644
--- a/html5/test/case/basic/repeat-root.source.js
+++ b/html5/test/case/basic/repeat-root.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-root', function (require, exports, module) {
 
 ;module.exports = {
diff --git a/html5/test/case/basic/repeat-watch.source.js b/html5/test/case/basic/repeat-watch.source.js
index 6924d66..0f989d8 100644
--- a/html5/test/case/basic/repeat-watch.source.js
+++ b/html5/test/case/basic/repeat-watch.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/04f1048c50eca3454bc70de93d3213d4', function(require, exports, module) {
 
     ;
@@ -54,4 +72,4 @@
 // require module
 bootstrap('@weex-component/04f1048c50eca3454bc70de93d3213d4', {
     "transformerVersion": "0.3.1"
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/basic/require.source.js b/html5/test/case/basic/require.source.js
index 7d3843a..db1fed7 100644
--- a/html5/test/case/basic/require.source.js
+++ b/html5/test/case/basic/require.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 var browserifyRequire=function r(e,n,o){function t(u,i){if(!n[u]){if(!e[u]){var a="function"==typeof browserifyRequire&&browserifyRequire;if(!i&&a)return a(u,!0);if(f)return f(u,!0);var c=new Error("Cannot find module '"+u+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[u]={exports:{}};e[u][0].call(l.exports,function(r){var n=e[u][1][r];return t(n?n:r)},l,l.exports,r,e,n,o)}return n[u].exports}for(var f="function"==typeof browserifyRequire&&browserifyRequire,u=0;u<o.length;u++)t(o[u]);return t}({"1ba80324acff072bbb2b768911a5e4f1":[function(r,e,n){e.exports="Hello World"},{}]},{},[]);
 
 
diff --git a/html5/test/case/basic/reset-style.source.js b/html5/test/case/basic/reset-style.source.js
index fec9a1c..a96b891 100644
--- a/html5/test/case/basic/reset-style.source.js
+++ b/html5/test/case/basic/reset-style.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/reset-style', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/static1.source.js b/html5/test/case/basic/static1.source.js
index 37eca2e..575ef66 100644
--- a/html5/test/case/basic/static1.source.js
+++ b/html5/test/case/basic/static1.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/static1', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/static2.source.js b/html5/test/case/basic/static2.source.js
index 8623889..93e1cf6 100644
--- a/html5/test/case/basic/static2.source.js
+++ b/html5/test/case/basic/static2.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/static2', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/static3.source.js b/html5/test/case/basic/static3.source.js
index b752a69..9179ea7 100644
--- a/html5/test/case/basic/static3.source.js
+++ b/html5/test/case/basic/static3.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/static3', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/static4.source.js b/html5/test/case/basic/static4.source.js
index dae9d9a..fe31bcc 100644
--- a/html5/test/case/basic/static4.source.js
+++ b/html5/test/case/basic/static4.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 function otherNameFunction () {
   var module = {}
   var exports = {}
diff --git a/html5/test/case/basic/subvm.source.js b/html5/test/case/basic/subvm.source.js
index 719cc8a..1b054a5 100644
--- a/html5/test/case/basic/subvm.source.js
+++ b/html5/test/case/basic/subvm.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/innertpl', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/basic/transformer1.source.js b/html5/test/case/basic/transformer1.source.js
index 9e7d7a6..7985e28 100644
--- a/html5/test/case/basic/transformer1.source.js
+++ b/html5/test/case/basic/transformer1.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo', function (require, exports, module) {
 
 ;
@@ -25,4 +43,4 @@
 
 bootstrap('@weex-component/foo', {
   'transformerVersion': '0.3.0'
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/complex/append-root-event.source.js b/html5/test/case/complex/append-root-event.source.js
index 096d57d..49455e5 100644
--- a/html5/test/case/complex/append-root-event.source.js
+++ b/html5/test/case/complex/append-root-event.source.js
@@ -1,4 +1,21 @@
-// module
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/append-root-event', function(require, exports, module) {
 
     ;
diff --git a/html5/test/case/complex/click.source.js b/html5/test/case/complex/click.source.js
index 27c10eb..039c98b 100644
--- a/html5/test/case/complex/click.source.js
+++ b/html5/test/case/complex/click.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/click', function (require, exports, module) {
 
 ;
@@ -55,4 +73,4 @@
 
 // require module
 
-bootstrap('@weex-component/click')
\ No newline at end of file
+bootstrap('@weex-component/click')
diff --git a/html5/test/case/complex/computed.source.js b/html5/test/case/complex/computed.source.js
index 0188eda..8d59ca3 100644
--- a/html5/test/case/complex/computed.source.js
+++ b/html5/test/case/complex/computed.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/computed', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/complex/if-refresh.source.js b/html5/test/case/complex/if-refresh.source.js
index 797ad56..3ebb80c 100644
--- a/html5/test/case/complex/if-refresh.source.js
+++ b/html5/test/case/complex/if-refresh.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/if', function (require, exports, module) {
 
 ;
@@ -36,4 +54,4 @@
 
 // require module
 
-bootstrap('@weex-component/if')
\ No newline at end of file
+bootstrap('@weex-component/if')
diff --git a/html5/test/case/complex/if-repeat-refresh.source.js b/html5/test/case/complex/if-repeat-refresh.source.js
index fd42775..aa62931 100644
--- a/html5/test/case/complex/if-repeat-refresh.source.js
+++ b/html5/test/case/complex/if-repeat-refresh.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/if-repeat', function (require, exports, module) {
 
 ;
@@ -39,4 +57,4 @@
 
 // require module
 
-bootstrap('@weex-component/if-repeat')
\ No newline at end of file
+bootstrap('@weex-component/if-repeat')
diff --git a/html5/test/case/complex/inline-click.source.js b/html5/test/case/complex/inline-click.source.js
index e9daa7b..e447c9e 100644
--- a/html5/test/case/complex/inline-click.source.js
+++ b/html5/test/case/complex/inline-click.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/test', function (require, exports, module) {
 
 ;
@@ -33,4 +51,4 @@
 ;})
 
 // require module
-bootstrap('@weex-component/test', {"transformerVersion":"0.3.0"})
\ No newline at end of file
+bootstrap('@weex-component/test', {"transformerVersion":"0.3.0"})
diff --git a/html5/test/case/complex/input-binding.source.js b/html5/test/case/complex/input-binding.source.js
index 4d98891..ae96760 100644
--- a/html5/test/case/complex/input-binding.source.js
+++ b/html5/test/case/complex/input-binding.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/d6b20355da35c77d07f0a11ec5256f42', function(require, exports, module) {
 
     ;
diff --git a/html5/test/case/complex/refresh2.source.js b/html5/test/case/complex/refresh2.source.js
index 4c21ada..6fa770c 100644
--- a/html5/test/case/complex/refresh2.source.js
+++ b/html5/test/case/complex/refresh2.source.js
@@ -1,4 +1,21 @@
-// module
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 define('@weex-component/bar1', function(require, exports, module) {;;
   module.exports.template = {
diff --git a/html5/test/case/complex/repeat-track-by.source.js b/html5/test/case/complex/repeat-track-by.source.js
index 22a8e90..127acb0 100644
--- a/html5/test/case/complex/repeat-track-by.source.js
+++ b/html5/test/case/complex/repeat-track-by.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/repeat-track-by', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/complex/transformer2.source.js b/html5/test/case/complex/transformer2.source.js
index 82cff5d..af31348 100644
--- a/html5/test/case/complex/transformer2.source.js
+++ b/html5/test/case/complex/transformer2.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo', function (require, exports, module) {
 
 ;
@@ -25,4 +43,4 @@
 
 bootstrap('@weex-component/foo', {
   'transformerVersion': '0.0.1'
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/complex/transformer3.source.js b/html5/test/case/complex/transformer3.source.js
index 0367389..2ca15a3 100644
--- a/html5/test/case/complex/transformer3.source.js
+++ b/html5/test/case/complex/transformer3.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/foo', function (require, exports, module) {
 
 ;
@@ -25,4 +43,4 @@
 
 bootstrap('@weex-component/foo', {
   'transformerVersion': '9.9.9'
-})
\ No newline at end of file
+})
diff --git a/html5/test/case/multi/clear-dep-target-error.source.js b/html5/test/case/multi/clear-dep-target-error.source.js
index 5d86d7c..0001d1c 100644
--- a/html5/test/case/multi/clear-dep-target-error.source.js
+++ b/html5/test/case/multi/clear-dep-target-error.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 define('@weex-component/DepTargetError', function(require, exports, module) {
 
diff --git a/html5/test/case/multi/clear-dep-target-fine.source.js b/html5/test/case/multi/clear-dep-target-fine.source.js
index 84ea356..fd7c7a2 100644
--- a/html5/test/case/multi/clear-dep-target-fine.source.js
+++ b/html5/test/case/multi/clear-dep-target-fine.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 define('@weex-component/DepTargetFine', function(require, exports, module) {
 
diff --git a/html5/test/case/multi/clear-moduleA.source.js b/html5/test/case/multi/clear-moduleA.source.js
index bc97f4c..190b36f 100644
--- a/html5/test/case/multi/clear-moduleA.source.js
+++ b/html5/test/case/multi/clear-moduleA.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 define('@weex-component/moduleA', function(require, exports, module) {
 
diff --git a/html5/test/case/multi/clear-moduleB.source.js b/html5/test/case/multi/clear-moduleB.source.js
index 376a51d..c6338fd 100644
--- a/html5/test/case/multi/clear-moduleB.source.js
+++ b/html5/test/case/multi/clear-moduleB.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/moduleB', function(require, exports, module) {
 
   ;module.exports = {
diff --git a/html5/test/case/prepare.js b/html5/test/case/prepare.js
index 9629dbb..6532c87 100644
--- a/html5/test/case/prepare.js
+++ b/html5/test/case/prepare.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import fs from 'fs'
 import path from 'path'
 
diff --git a/html5/test/case/signals/modal.source.js b/html5/test/case/signals/modal.source.js
index 303c3f9..bdef1b8 100644
--- a/html5/test/case/signals/modal.source.js
+++ b/html5/test/case/signals/modal.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/modal', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/signals/signals-long.source.js b/html5/test/case/signals/signals-long.source.js
index fc23b6d..06b541f 100644
--- a/html5/test/case/signals/signals-long.source.js
+++ b/html5/test/case/signals/signals-long.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 new Promise(function () {})
 
 
diff --git a/html5/test/case/signals/signals.source.js b/html5/test/case/signals/signals.source.js
index f786178..c16234e 100644
--- a/html5/test/case/signals/signals.source.js
+++ b/html5/test/case/signals/signals.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/signals-sub', function (require, exports, module) {
   module.exports = {
     data: function () {return {
diff --git a/html5/test/case/signals/timer.source.js b/html5/test/case/signals/timer.source.js
index 5b69296..4222d3e 100644
--- a/html5/test/case/signals/timer.source.js
+++ b/html5/test/case/signals/timer.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/timer', function (require, exports, module) {
 
 ;
diff --git a/html5/test/case/tester.js b/html5/test/case/tester.js
index 9c2b299..373a421 100644
--- a/html5/test/case/tester.js
+++ b/html5/test/case/tester.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/case/throws/global-variable1.source.js b/html5/test/case/throws/global-variable1.source.js
index 720dbfa..b60fc47 100644
--- a/html5/test/case/throws/global-variable1.source.js
+++ b/html5/test/case/throws/global-variable1.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 something = 'whatever'
 
 define('@weex-component/global-variable1', function (require, exports, module) {
diff --git a/html5/test/case/throws/global-variable2.source.js b/html5/test/case/throws/global-variable2.source.js
index 59b2e97..b1b4f4e 100644
--- a/html5/test/case/throws/global-variable2.source.js
+++ b/html5/test/case/throws/global-variable2.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/global-variable2', function (require, exports, module) {
 
   module.exports.template = { "type": "container" }
diff --git a/html5/test/case/throws/global-variable3.source.js b/html5/test/case/throws/global-variable3.source.js
index 9695ca0..e010ca1 100644
--- a/html5/test/case/throws/global-variable3.source.js
+++ b/html5/test/case/throws/global-variable3.source.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 define('@weex-component/global-variable3', function (require, exports, module) {
 
   module.exports.template = { "type": "container" }
diff --git a/html5/test/e2e/runner.js b/html5/test/e2e/runner.js
index 9260676..bf4758f 100644
--- a/html5/test/e2e/runner.js
+++ b/html5/test/e2e/runner.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 /* eslint-disable */
 
 var path = require('path')
diff --git a/html5/test/e2e/specs/index.js b/html5/test/e2e/specs/index.js
index b6b59b2..9a57acc 100644
--- a/html5/test/e2e/specs/index.js
+++ b/html5/test/e2e/specs/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 module.exports = {
   'index page': function (browser) {
     browser.url('http://localhost:8088/index.html')
diff --git a/html5/test/render/index.js b/html5/test/render/index.js
deleted file mode 100644
index bca3504..0000000
--- a/html5/test/render/index.js
+++ /dev/null
@@ -1,3 +0,0 @@
-// require all test files
-const testsContext = require.context('./vue', true, /\.js$/)
-testsContext.keys().forEach(testsContext)
diff --git a/html5/test/render/vue/components/a.js b/html5/test/render/vue/components/a.js
new file mode 100644
index 0000000..974d9a8
--- /dev/null
+++ b/html5/test/render/vue/components/a.js
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
+import a from '../../../../render/vue/components/a'
+import div from '../../../../render/vue/components/div'
+
+init('<a> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
+  before(() => {
+    helper.register('a', a)
+    helper.register('div', div)
+  })
+
+  it('simple <a> component', () => {
+    const vm = compile(`<a>abc</a>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.equal('a')
+    const classListArr = utils.toArray(el.classList)
+    expect('weex-a').to.be.oneOf(classListArr)
+    expect('weex-ct').to.be.oneOf(classListArr)
+    expect(el.getAttribute('weex-type')).to.be.equal('a')
+    expect(el.innerHTML).to.be.equal('')
+  })
+
+  it('<a> with href', () => {
+    const href = '//m.taobao.com'
+    const vm = compile(`<a href="${href}"></a>`)
+    expect(vm.$el.getAttribute('href')).to.be.equal(href)
+  })
+
+  it('<a> with children <div>', () => {
+    const href = '//m.taobao.com'
+    const vm = compile(`<a href="${href}"><div></div></a>`)
+    const el = vm.$el
+    expect(el.children.length).to.be.equal(1)
+    expect(el.children[0].tagName).to.match(/^(?:html:)?div$/i)
+    expect(el.children[0].getAttribute('weex-type')).to.be.equal('div')
+  })
+})
diff --git a/html5/test/render/vue/components/div.js b/html5/test/render/vue/components/div.js
new file mode 100644
index 0000000..c1e6eee
--- /dev/null
+++ b/html5/test/render/vue/components/div.js
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
+import div from '../../../../render/vue/components/div'
+
+init('<div> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
+  before(() => {
+    helper.register('div', div)
+  })
+
+  it('simple <div> component', () => {
+    const vm = compile(`<div>abc</div>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.equal('div')
+    const classListArr = utils.toArray(el.classList)
+    expect('weex-div').to.be.oneOf(classListArr)
+    expect('weex-ct').to.be.oneOf(classListArr)
+    expect(el.getAttribute('weex-type')).to.be.equal('div')
+    expect(el.innerHTML).to.be.equal('')
+  })
+
+  it('<div> with children <div>', () => {
+    const vm = compile(`<div><div></div></div>`)
+    const el = vm.$el
+    expect(el.children.length).to.be.equal(1)
+    expect(el.children[0].tagName).to.match(/^(?:html:)?div$/i)
+    expect(el.children[0].getAttribute('weex-type')).to.be.equal('div')
+  })
+})
diff --git a/html5/test/render/vue/components/image.js b/html5/test/render/vue/components/image.js
index 24ec318..4e013a4 100644
--- a/html5/test/render/vue/components/image.js
+++ b/html5/test/render/vue/components/image.js
@@ -1,49 +1,69 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
 import image from '../../../../render/vue/components/image'
 
-multiDescribe('<image> component', (Vue, helper) => {
+init('<image> component', (Vue, helper) => {
+  const { compile, utils } = helper
+
   before(() => {
     helper.register('image', image)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('simple <image> component', () => {
-    const vm = helper.compile(`<image>abc</image>`)
-
-    // console.log(vm.$el)
-    expect(vm.$el.tagName).to.be.equal('FIGURE')
-    expect(vm.$el.className).to.be.equal('weex-image')
-    expect(vm.$el.innerHTML).to.be.equal('')
+    const vm = compile(`<image>abc</image>`)
+    const el = vm.$el
+    expect(el.tagName.toLowerCase()).to.be.equal('figure')
+    expect(utils.toArray(el.classList)).to.include.members(['weex-image', 'weex-el'])
+    expect(el.getAttribute('weex-type')).to.be.equal('image')
+    expect(el.innerHTML).to.be.equal('')
   })
 
   it('<image> with src', () => {
-    const src = 'https://vuejs.org/images/logo.png'
-    const vm = helper.compile(`<image src="${src}">`)
+    const src = '//vuejs.org/images/logo.png'
+    const vm = compile(`<image src="${src}"></image>`)
+    expect(vm.$el.getAttribute('img-src')).to.be.equal(`${src}`)
+  })
 
-    expect(vm.$el.style.backgroundImage).match(new RegExp(`url\s*\\("?${src}"?\\)`), 'i')
+  it('<image> with placeholder', () => {
+    const placeholder = '//vuejs.org/images/logo.png'
+    const vm = compile(`<image placeholder="${placeholder}"></image>`)
+    expect(vm.$el.getAttribute('img-placeholder')).to.be.equal(`${placeholder}`)
   })
 
   it('<image> resize="cover"', () => {
-    const vm = helper.compile(`<image resize="cover">`)
+    const vm = compile(`<image resize="cover"></image>`)
     expect(vm.$el.style.backgroundSize).to.be.equal('cover')
   })
 
   it('<image> resize="contain"', () => {
-    const vm = helper.compile(`<image resize="contain">`)
+    const vm = compile(`<image resize="contain"></image>`)
     expect(vm.$el.style.backgroundSize).to.be.equal('contain')
   })
 
   it('<image> resize="stretch"', () => {
-    const vm = helper.compile(`<image resize="stretch">`)
-    expect(vm.$el.style.backgroundSize).to.be.equal('100%')
+    const vm = compile(`<image resize="stretch"></image>`)
+    expect(vm.$el.style.backgroundSize).to.contain('100%')
   })
 
   it('<image> unknown resize', () => {
-    const vm = helper.compile(`<image resize="unknown">`)
-    expect(vm.$el.style.backgroundSize).to.be.equal('')
+    const vm = compile(`<image resize="unknown"></image>`)
+    expect(vm.$el.style.backgroundSize).to.be.contain('100%')
   })
 })
diff --git a/html5/test/render/vue/components/list.js b/html5/test/render/vue/components/list.js
index fe557ae..5174035 100644
--- a/html5/test/render/vue/components/list.js
+++ b/html5/test/render/vue/components/list.js
@@ -1,21 +1,36 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
+import cell from '../../../../render/vue/components/scrollable/list/cell'
 
-multiDescribe('<list> component', (Vue, helper) => {
+init('<list> component', (Vue, helper) => {
+  const { utils, compile } = helper
+
   before(() => {
     helper.register('list', list)
-  })
-
-  after(() => {
-    helper.reset()
+    helper.register('cell', cell)
   })
 
   it('create simple list component', () => {
-    const vm = helper.compile(`<list><cell></cell></list>`)
-
-    // console.log(vm.$el)
-    expect(vm.$el.tagName).to.be.equal('MAIN')
-    expect(vm.$el.className).to.be.equal('weex-list weex-list-wrapper')
+    const vm = compile(`<list><cell></cell></list>`)
+    expect(vm.$el.tagName.toLowerCase()).to.be.equal('main')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-list', 'weex-list-wrapper', 'weex-ct'])
   })
 })
diff --git a/html5/test/render/vue/components/switch.js b/html5/test/render/vue/components/switch.js
index 6fc2cf0..6413b2d 100644
--- a/html5/test/render/vue/components/switch.js
+++ b/html5/test/render/vue/components/switch.js
@@ -1,29 +1,44 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
 import _switch from '../../../../render/vue/components/switch'
 
-multiDescribe('<switch> component', (Vue, helper) => {
+init('<switch> component', (Vue, helper) => {
+  const { utils, compile } = helper
+
   before(() => {
     helper.register('switch', _switch)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('simple <switch> component', () => {
-    const vm = helper.compile(`<switch></switch>`)
+    const vm = compile(`<switch></switch>`)
 
     // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('SPAN')
-    expect(vm.$el.className).to.be.equal('weex-switch')
+    expect(utils.toArray(vm.$el.classList)).to.include('weex-switch')
     expect(vm.$el.innerHTML).to.be.equal('<small class="weex-switch-inner"></small>')
   })
 
   it('disabled <switch>', () => {
-    const vmA = helper.compile(`<switch disabled="true"></switch>`)
-    const vmB = helper.compile(`<switch disabled></switch>`)
-    const vmC = helper.compile(`<switch disabled="disabled"></switch>`)
+    const vmA = compile(`<switch disabled="true"></switch>`)
+    const vmB = compile(`<switch disabled></switch>`)
+    const vmC = compile(`<switch disabled="disabled"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-disabled/)
     expect(vmB.$el.className).to.match(/weex\-switch\-disabled/)
@@ -31,17 +46,17 @@
   })
 
   it('enabled <switch>', () => {
-    const vmA = helper.compile(`<switch></switch>`)
-    const vmB = helper.compile(`<switch disabled="false"></switch>`)
+    const vmA = compile(`<switch></switch>`)
+    const vmB = compile(`<switch disabled="false"></switch>`)
 
     expect(vmA.$el.className).to.be.equal('weex-switch')
     expect(vmB.$el.className).to.be.equal('weex-switch')
   })
 
   it('checked <switch>', () => {
-    const vmA = helper.compile(`<switch checked="true"></switch>`)
-    const vmB = helper.compile(`<switch checked></switch>`)
-    const vmC = helper.compile(`<switch checked="checked"></switch>`)
+    const vmA = compile(`<switch checked="true"></switch>`)
+    const vmB = compile(`<switch checked></switch>`)
+    const vmC = compile(`<switch checked="checked"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-checked/)
     expect(vmB.$el.className).to.match(/weex\-switch\-checked/)
@@ -68,16 +83,16 @@
   })
 
   it('unchecked <switch>', () => {
-    const vmA = helper.compile(`<switch></switch>`)
-    const vmB = helper.compile(`<switch checked="false"></switch>`)
+    const vmA = compile(`<switch></switch>`)
+    const vmB = compile(`<switch checked="false"></switch>`)
 
     expect(vmA.$el.className).to.be.equal('weex-switch')
     expect(vmB.$el.className).to.be.equal('weex-switch')
   })
 
   it('disabled & checked <switch>', () => {
-    const vmA = helper.compile(`<switch disabled checked></switch>`)
-    const vmB = helper.compile(`<switch disabled="disabled" checked="checked"></switch>`)
+    const vmA = compile(`<switch disabled checked></switch>`)
+    const vmB = compile(`<switch disabled="disabled" checked="checked"></switch>`)
 
     expect(vmA.$el.className).to.match(/weex\-switch\-checked/)
     expect(vmA.$el.className).to.match(/weex\-switch\-disabled/)
diff --git a/html5/test/render/vue/components/text.js b/html5/test/render/vue/components/text.js
index 0a5ef6d..105cb49 100644
--- a/html5/test/render/vue/components/text.js
+++ b/html5/test/render/vue/components/text.js
@@ -1,34 +1,48 @@
-import { expect } from 'chai'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import semver from 'semver'
-import { multiDescribe } from '../helper'
+import { init } from '../helper'
 import text from '../../../../render/vue/components/text'
 
-multiDescribe('<text> component', (Vue, helper) => {
+init('<text> component', (Vue, helper) => {
+  const { utils, compile } = helper
+
   before(() => {
     helper.register('text', text)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('create simple text component', () => {
-    const vm = helper.compile(`<text>abc</text>`)
+    const vm = compile(`<text>abc</text>`)
 
     expect(vm.$el.tagName).to.be.equal('P')
     expect(vm.$el.innerHTML).to.be.equal('abc')
   })
 
   it('empty text component', () => {
-    const vm = helper.compile(`<text></text>`)
+    const vm = compile(`<text></text>`)
 
     expect(vm.$el.tagName).to.be.equal('P')
     expect(vm.$el.innerHTML).to.be.equal('')
   })
 
-  it('lines property', () => {
-    const vm = helper.compile(`<text lines="5">abc</text>`)
-
+  it('lines style', () => {
+    const vm = compile(`<text style="lines:5;">abc</text>`)
     if (semver.gt(Vue.version, '2.0.8')) {
       expect(vm.$el.style.overflow).to.be.equal('hidden')
       expect(vm.$el.style.textOverflow).to.be.equal('ellipsis')
@@ -37,7 +51,7 @@
   })
 
   it('inline styles', () => {
-    const vm = helper.compile(`<text style="color:blue">abc</text>`)
+    const vm = compile(`<text style="color:blue">abc</text>`)
 
     if (semver.gt(Vue.version, '2.0.8')) {
       expect(vm.$el.style.color).to.be.equal('blue')
@@ -46,27 +60,27 @@
 
   // Not sure about this feature.
   it('class property', () => {
-    const vm = helper.compile(`<text class="title"></text>`)
-    expect(vm.$el.className).to.be.equal('weex-text title')
+    const vm = compile(`<text class="title"></text>`)
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-text', 'weex-el', 'title'])
   })
 
   it('value property', () => {
-    const vm = helper.compile(`<text value="A"></text>`)
+    const vm = compile(`<text value="A"></text>`)
     expect(vm.$el.innerHTML).to.be.equal('A')
   })
 
   it('both have value and content', () => {
-    const vm = helper.compile(`<text value="A">B</text>`)
+    const vm = compile(`<text value="A">B</text>`)
     expect(vm.$el.innerHTML).to.be.equal('B')
   })
 
-  describe.skip('error usage (on native)', () => {
-    it('contain other tags', () => {
-      const vm = helper.compile(`<text><b>abc</b></text>`)
-      const span = vm.$el.children[0]
+  // describe.skip('error usage (on native)', () => {
+  //   it('contain other tags', () => {
+  //     const vm = compile(`<text><b>abc</b></text>`)
+  //     const span = vm.$el.children[0]
 
-      expect(span.tagName).to.be.equal('SPAN')
-      expect(span.innerHTML).to.be.equal('')
-    })
-  })
+  //     expect(span.tagName).to.be.equal('SPAN')
+  //     expect(span.innerHTML).to.be.equal('')
+  //   })
+  // })
 })
diff --git a/html5/test/render/vue/components/web.js b/html5/test/render/vue/components/web.js
index 6d4e37c..6895b35 100644
--- a/html5/test/render/vue/components/web.js
+++ b/html5/test/render/vue/components/web.js
@@ -1,29 +1,43 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
 import web from '../../../../render/vue/components/web'
 
-multiDescribe('<web> component', (Vue, helper) => {
+init('<web> component', (Vue, helper) => {
+  const { utils, compile } = helper
   before(() => {
     helper.register('web', web)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('simple <web> component', () => {
-    const vm = helper.compile(`<web></web>`)
+    const vm = compile(`<web></web>`)
 
     // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('IFRAME')
-    expect(vm.$el.className).to.be.equal('weex-web')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-web', 'weex-el'])
   })
 
   it('use src attribute', () => {
-    const vm = helper.compile(`<web src="https://x.cn"></web>`)
+    const vm = compile(`<web src="https://x.cn"></web>`)
 
     expect(vm.$el.tagName).to.be.equal('IFRAME')
     expect(vm.$el.getAttribute('src')).to.be.equal('https://x.cn')
-    expect(vm.$el.className).to.be.equal('weex-web')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-web', 'weex-el'])
   })
 })
diff --git a/html5/test/render/vue/core/node.js b/html5/test/render/vue/core/node.js
new file mode 100644
index 0000000..910e390
--- /dev/null
+++ b/html5/test/render/vue/core/node.js
@@ -0,0 +1,62 @@
+/* global Event */
+
+import { init } from '../helper/runtime'
+import div from '../../../../render/vue/components/div'
+
+import eventBubbleBundle from '../data/build/dotvue/event-bubble.js'
+
+init('core node', (Vue, helper) => {
+  const id = 'test-event-bubble'
+
+  before(() => {
+    helper.register('div', div)
+  })
+
+  describe('stop event bubble', function () {
+    let infoStr = ''
+    function trackerShouldBe (tracker, shouldBe) {
+      shouldBe = infoStr + shouldBe
+      expect(tracker).to.equal(shouldBe)
+      infoStr = shouldBe
+    }
+
+    it('should trigger the closest parent.', function (done) {
+      const vm = helper.createVm(eventBubbleBundle, id)
+      const el = vm.$el.querySelector('.event-bubble-outter')
+      expect(vm.tracker).to.equal('')
+
+      /**
+       * click outter div. should trigget event on the outter div.
+       * and should execute handlers by the priority of:
+       * child vnode -> parent vnode.
+       *  e.g.  div -> foo (whoes root element is the div.)
+       */
+      const evt = new Event('click', { bubbles: true })
+      el.dispatchEvent(evt)
+
+      helper.registerDone(id, (tracker) => {
+        trackerShouldBe(tracker, ' > in-bar-outter-div > component-bar')
+        helper.unregisterDone(id)
+        done()
+      })
+    })
+
+    it('should not bubble if already triggered.', function (done) {
+      const vm = helper.createVm(eventBubbleBundle, id)
+      const inner = vm.$el.querySelector('.event-bubble-inner')
+
+      /**
+       * click inner div. should just trigget the inner handler and
+       * shouldn't bubbe to outter div.
+       */
+      const evt = new Event('click', { bubbles: true })
+      inner.dispatchEvent(evt)
+
+      helper.registerDone(id, (tracker) => {
+        trackerShouldBe(tracker, ' > in-bar-inner-div')
+        helper.unregisterDone(id)
+        done()
+      })
+    })
+  })
+})
diff --git a/html5/test/render/vue/core/scope-style-map.js b/html5/test/render/vue/core/scope-style-map.js
new file mode 100644
index 0000000..38ec2a4
--- /dev/null
+++ b/html5/test/render/vue/core/scope-style-map.js
@@ -0,0 +1,94 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { getHeadStyleMap } from '../../../../render/vue/core/style'
+import '../data/head-css'
+import headMap from '../data/head-map'
+
+function toArray (arr) {
+  return Array.prototype.slice.call(arr)
+}
+
+function getVStyleSheetNodes () {
+  const regVStyleSheets = /((?:,?\s*\.[\w-]+\[data-v-\w+\](?::\w+)?)+)\s*({[^}]+)/
+  const nodes = toArray(document.styleSheets)
+    .filter(function (styleSheet) {
+      return regVStyleSheets.test(styleSheet.ownerNode.textContent)
+    }).map(function (styleSheet) {
+      return styleSheet.ownerNode
+    })
+  return nodes
+}
+
+function getStyleSheetNodes () {
+  return toArray(document.styleSheets)
+    .map(function (styleSheet) {
+      return styleSheet.ownerNode
+    })
+}
+
+describe('style map', () => {
+  let styleSheetNodes
+
+  before(function () {
+    styleSheetNodes = getStyleSheetNodes()
+  })
+
+  it('should get head style map.', () => {
+    /**
+     * before get style map.
+     */
+    const vStyleSheetNodes = getVStyleSheetNodes()
+    const allNodes = getStyleSheetNodes()
+    const vNodesExisted = vStyleSheetNodes.filter(function (node) {
+      return allNodes.indexOf(node) > -1
+    })
+    expect(vNodesExisted).to.have.members(vStyleSheetNodes)
+
+    /**
+     * get style map.
+     */
+    window._no_remove_style_sheets = false
+    const styleMap = getHeadStyleMap()
+    window._no_remove_style_sheets = true
+
+    /**
+     * after get style map.
+     */
+    for (const key in headMap) {
+      const expected = headMap[key]
+      const result = styleMap[key]
+      expect(expected).be.deep.equal(result)
+    }
+
+    const nowStyleSheetNodes = getStyleSheetNodes()
+    const vNodesLeft = vStyleSheetNodes.filter(function (node) {
+      return nowStyleSheetNodes.indexOf(node) > -1
+    })
+    expect(vNodesLeft).to.have.lengthOf(0)
+  })
+
+  after(function () {
+    const nodes = getStyleSheetNodes()
+    styleSheetNodes.forEach(function (node) {
+      if (nodes.indexOf(node) === -1) {
+        document.head.appendChild(node)
+      }
+    })
+  })
+})
diff --git a/html5/test/render/vue/core/style.js b/html5/test/render/vue/core/style.js
new file mode 100644
index 0000000..00bc59a
--- /dev/null
+++ b/html5/test/render/vue/core/style.js
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper/runtime'
+import div from '../../../../render/vue/components/div'
+import image from '../../../../render/vue/components/image'
+import { init as initViewport } from '../../../../render/vue/env/viewport'
+
+import scopedStyleBundle from '../data/build/dotvue/scoped-style'
+
+// function toArray (arr) {
+//   return Array.prototype.slice.call(arr)
+// }
+
+// function getVStyleSheetNodes () {
+//   const regVStyleSheets = /((?:,?\s*\.[\w-]+\[data-v-\w+\](?::\w+)?)+)\s*({[^}]+)/
+//   const nodes = toArray(document.styleSheets)
+//     .filter(function (styleSheet) {
+//       return regVStyleSheets.test(styleSheet.ownerNode.textContent)
+//     }).map(function (styleSheet) {
+//       return styleSheet.ownerNode
+//     })
+//   return nodes
+// }
+
+init('core style', (Vue, helper) => {
+  const { scale } = initViewport()
+  before(() => {
+    helper.register('div', div)
+    helper.register('image', image)
+  })
+
+  it('should get normalized merged styles.', function (done) {
+    const vm = helper.createVm(scopedStyleBundle)
+    const el = vm.$refs.foo.$el || vm.$refs.foo
+    expect(el).to.be.ok
+    const expectedMap = {
+      width: 200 * scale + 'px',
+      height: 200 * scale + 'px',
+      backgroundColor: 'red'
+    }
+    const expectedDirection = {
+      WebkitBoxDirection: 'normal',
+      WebkitBoxOrient: 'horizontal',
+      WebkitFlexDirection: 'row',
+      flexDirection: 'row'
+    }
+    const expectedTransform = {
+      WebkitTransform: `translate3d(${100 * scale + 'px'}, ${100 * scale + 'px'}, 0px)`,
+      transform: `translate3d(${100 * scale + 'px'}, ${100 * scale + 'px'}, 0px)`
+    }
+
+    for (const k in expectedMap) {
+      expect(el.style[k]).to.equal(expectedMap[k])
+    }
+    const directionRes = []
+    for (const k in expectedDirection) {
+      directionRes.push(el.style[k] === expectedDirection[k])
+    }
+    expect(directionRes).to.include(true)
+
+    const transformRes = []
+    for (const k in expectedTransform) {
+      transformRes.push(el.style[k] === expectedTransform[k])
+    }
+    expect(transformRes).to.include(true)
+
+    const id = 'test-style'
+    helper.registerDone(id, () => {
+      expect(el.style.backgroundImage).to.match(
+        /(?:-webkit-|-moz-|-ms-|-o-)?linear-gradient\(to top, (?:rgb\(245, 254, 253\)|#f5fefd), (?:rgb\(255, 255, 255\)|#ffffff)\)/)
+      expect(['-webkit-box',
+        '-moz-box',
+        '-ms-flexbox',
+        '-webkit-flex',
+        'flex']).to.include(el.style.display)
+      helper.unregisterDone(id)
+      done()
+    })
+  })
+})
diff --git a/html5/test/render/vue/data/css/head1.css b/html5/test/render/vue/data/css/head1.css
new file mode 100644
index 0000000..f6a818a
--- /dev/null
+++ b/html5/test/render/vue/data/css/head1.css
@@ -0,0 +1,38 @@
+/*/////////////////////////////////////////////////////////////*/
+
+/* 默认背景色为 #FFFFFF */
+.wrapper[data-v-67763bae] {
+    width: 375px;
+    /*background-color: #586C5D;*/
+    overflow: hidden;
+}
+.module-warning[data-v-67763bae]{
+    text-align: center;
+    font-size: 25px;
+    color: red;
+    font-weight: bold;
+}
+.video[data-v-67763bae]{
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 375px;
+}
+.first-frame[data-v-67763bae]{
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 375px;
+}
+.final-image[data-v-67763bae]{
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 375px;
+}
+.deco-img[data-v-67763bae]{
+    width: 375px;
+    position: absolute;
+    left: 0;
+    bottom: 0;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head10.css b/html5/test/render/vue/data/css/head10.css
new file mode 100644
index 0000000..06dce95
--- /dev/null
+++ b/html5/test/render/vue/data/css/head10.css
@@ -0,0 +1,14 @@
+/*/////////////////////////////////////////////////////////////*/
+/* Copyright 2014 Evernote Corporation. All rights reserved. */
+.en-markup-crop-options {
+    top: 18px !important;
+    left: 50% !important;
+    margin-left: -100px !important;
+    width: 200px !important;
+    border: 2px rgba(255,255,255,.38) solid !important;
+    border-radius: 4px !important;
+}
+
+.en-markup-crop-options div div:first-of-type {
+    margin-left: 0px !important;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head11.css b/html5/test/render/vue/data/css/head11.css
new file mode 100644
index 0000000..dbefea4
--- /dev/null
+++ b/html5/test/render/vue/data/css/head11.css
@@ -0,0 +1,2 @@
+/*/////////////////////////////////////////////////////////////*/
+#J_6820099468 .act-module-title-m {padding-bottom:0;background-color:#34110b}#J_6820099468 .act-module-title-m h3{margin:0 auto 0}#J_6820099468 .act-module-title-m .item-title{color:#333}#J_6820099468 .act-module-title-m .item-title:before,#J_6820099468 .act-module-title-m .item-title:after{background:#333}#J_6820099468 .act-module-title-m .is-img{padding-top:28.26666667%}#J_6820099468 .act-module-title-m .banner-img{height:212}#J_3487624305 .act-module-title-m{padding-bottom:0;background-color:#34110b}#J_3487624305 .act-module-title-m h3{margin:0 auto 0}#J_3487624305 .act-module-title-m .item-title{color:#333}#J_3487624305 .act-module-title-m .item-title:before,#J_3487624305 .act-module-title-m .item-title:after{background:#333}#J_3487624305 .act-module-title-m .is-img{padding-top:28.26666667%}#J_3487624305 .act-module-title-m .banner-img{height:212}#J_1043444990 .zebra-basis-slider{background-color:#4e351f;box-sizing:border-box;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-o-box-sizing:border-box;-ms-box-sizing:border-box;padding-left:0;padding-right:0}#J_1043444990 .zebra-basis-slider .icons i{background-color:#e6e6e6}#J_1043444990 .zebra-basis-slider .icons i.current{background-color:#DF3434}#J_1043444990 .zebra-basis-slider .slider{min-height:136.17021277px}#J_5774361206 .act-module-title-m{padding-bottom:0;background-color:#34110b}#J_5774361206 .act-module-title-m h3{margin:0 auto 0}#J_5774361206 .act-module-title-m .item-title{color:#333}#J_5774361206 .act-module-title-m .item-title:before,#J_5774361206 .act-module-title-m .item-title:after{background:#333}#J_5774361206 .act-module-title-m .is-img{padding-top:28.26666667%}#J_5774361206 .act-module-title-m .banner-img{height:212}#J_4710936714 .act-module-title-m{padding-bottom:0;background-color:#34110b}#J_4710936714 .act-module-title-m h3{margin:0 auto 0}#J_4710936714 .act-module-title-m .item-title{color:#333}#J_4710936714 .act-module-title-m .item-title:before,#J_4710936714 .act-module-title-m .item-title:after{background:#333}#J_4710936714 .act-module-title-m .is-img{padding-top:28.26666667%}#J_4710936714 .act-module-title-m .banner-img{height:212}
diff --git a/html5/test/render/vue/data/css/head12.css b/html5/test/render/vue/data/css/head12.css
new file mode 100644
index 0000000..8cc067b
--- /dev/null
+++ b/html5/test/render/vue/data/css/head12.css
@@ -0,0 +1,2 @@
+/*/////////////////////////////////////////////////////////////*/
+.inner-feedback-m{        width: 40px;        height: 40px;        background-size: 50px;        background-image: url(//img.alicdn.com/tps/i3/T1JDlEFg4cXXcu8V6l-64-64.png);        display: block;        position: fixed;        left: 10px;        bottom: 100px;        overflow: hidden;        text-indent: -9999em;        z-index: 9999;        background-color: rgba(0, 0, 0, 0.2);        border-radius: 20px;        background-position: center;    }
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head13.css b/html5/test/render/vue/data/css/head13.css
new file mode 100644
index 0000000..6cf748c
--- /dev/null
+++ b/html5/test/render/vue/data/css/head13.css
@@ -0,0 +1,25 @@
+.row[data-v-0dad7305] {
+  flex-direction: row;
+}
+.result[data-v-0dad7305] {
+  text-align: right;
+  background-color: #666;
+  font-size: 40px;
+  color: white;
+}
+.btn[data-v-0dad7305] {
+  flex: 1;
+  text-align: center;
+  background-color: #eee;
+  font-size: 36px;
+}
+.btn[data-v-0dad7305], .result[data-v-0dad7305] {
+  height: 100px;
+  padding: 30px;
+  margin: 5px;
+}
+.btn-operator[data-v-0dad7305] {
+  background-color: #669;
+  font-size: 40px;
+  color: white;
+}
diff --git a/html5/test/render/vue/data/css/head14.css b/html5/test/render/vue/data/css/head14.css
new file mode 100644
index 0000000..9865127
--- /dev/null
+++ b/html5/test/render/vue/data/css/head14.css
@@ -0,0 +1 @@
+@charset "utf-8";@font-face{font-family:zebra-iconfont;src:url(//at.alicdn.com/t/font_5e6zaftfqrggb9.eot);src:url(//at.alicdn.com/t/font_5e6zaftfqrggb9.eot?#iefix) format('embedded-opentype'),url(//at.alicdn.com/t/font_5e6zaftfqrggb9.woff) format('woff'),url(//at.alicdn.com/t/font_5e6zaftfqrggb9.ttf) format('truetype'),url(//at.alicdn.com/t/font_5e6zaftfqrggb9.svg#zebra-iconfont) format('svg')}@font-face{font-family:mui-iconfont;src:url(//at.alicdn.com/t/font_1422363314_6108727.eot);src:url(//at.alicdn.com/t/font_1422363314_6108727.eot?#iefix) format('embedded-opentype'),url(//at.alicdn.com/t/font_1422363314_6108727.woff) format('woff'),url(//at.alicdn.com/t/font_1422363314_6108727.ttf) format('truetype'),url(//at.alicdn.com/t/font_1422363314_6108727.svg#iconfont) format('svg')}.icon{font-family:zebra-iconfont;font-style:normal}.icon-title{display:none}.mui-iconfont{font-family:mui-iconfont;font-style:normal}*{padding:0;margin:0}.mui-zebra-page{padding-bottom:20px}.mui-zebra-page .mui-zebra-module{min-height:50px;position:relative}.mui-zebra-page .mui-zebra-module.ishide>:not(.zebra-toolbar){-webkit-filter:blur(2px);filter:blur(2px)}.mui-zebra-page .mui-zebra-module.ishide .zebra-toolbar .settohide .text{display:none}.mui-zebra-page .mui-zebra-module.ishide .zebra-toolbar .settohide .onhidetext{display:initial}.mui-zebra-page .mui-zebra-module.ishide:after{position:absolute;top:50%;left:50%;margin-top:-15px;margin-left:-60px;width:120px;height:30px;line-height:30px;text-align:center;font-size:14px;content:'already hidden';color:#fff;background-color:rgba(0,0,0,.5);border-radius:3px;pointer-events:none}.pinned{display:block!important}.zebra-toolbar{display:none;position:absolute;top:0;left:0;width:100%;height:100%;min-height:50px;color:#fff;font-size:12px;z-index:2000;box-sizing:border-box;pointer-events:none;border:3px solid #df3434;border-bottom-width:5px;border-top:0;box-shadow:0 1px 5px rgba(0,0,0,.4);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.zebra-toolbar *{box-sizing:initial!important}.zebra-toolbar .border{position:absolute;left:-3px;top:-48px;width:100%;height:48px;border-left:3px solid #df3434;border-right:3px solid #df3434}.zebra-toolbar .hd{position:relative;top:-48px;height:32px;line-height:32px;padding:8px 3px;background-color:#df3434}.zebra-toolbar .ft{position:absolute;bottom:-70px;left:50%;width:110px;margin-left:-55px;height:40px;padding:15px 0}.zebra-toolbar .ft,.zebra-toolbar .hd{pointer-events:initial}.zebra-toolbar .title{display:none}.zebra-toolbar i{font-style:normal}.zebra-toolbar .side{position:relative;float:right}.zebra-toolbar .iconbtn{float:left;display:block;width:32px;height:32px;text-align:center;border-radius:50%;overflow:hidden;-webkit-transition:background-color 250ms ease;transition:background-color 250ms ease;font-size:16px;opacity:.8;cursor:pointer}.zebra-toolbar .iconbtn:hover{opacity:1}.zebra-toolbar .iconbtn.active,.zebra-toolbar .iconbtn:active{opacity:1!important;background-color:rgba(255,255,255,.25)}.zebra-toolbar .iconbtn.edit{font-size:16px}.zebra-toolbar .info{font-size:18px}.zebra-toolbar .add{display:block;margin:0 auto;width:40px;height:40px;line-height:40px;overflow:hidden;text-align:center;border-radius:50%;background-color:#df3434;box-shadow:0 1px 5px rgba(0,0,0,.4);color:#fff;font-size:18px;cursor:pointer}.zebra-toolbar .arrow{width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #df3434;position:absolute}.zebra-toolbar .moremenus{float:left;position:relative}.zebra-toolbar .moremenus .menus{display:none;position:absolute;top:28px;padding-top:25px;left:-8px;z-index:1}.zebra-toolbar .moremenus .menus .arrow{width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-bottom:8px solid #df3434;position:absolute;top:17px;left:16px}.zebra-toolbar .moremenus .menus ul{padding:10px 0;background-color:#df3434;box-shadow:0 1px 5px rgba(0,0,0,.4)}.zebra-toolbar .moremenus .menus li{height:36px;line-height:36px;padding:0 16px;white-space:nowrap;cursor:pointer;-webkit-transition:background-color 250ms ease;transition:background-color 250ms ease;opacity:.8}.zebra-toolbar .moremenus .menus li:hover{opacity:1;background-color:rgba(0,0,0,.15)}.zebra-toolbar .moremenus .menus .title{display:inline;margin-left:5px}.zebra-toolbar .moremenus .menus .icon{font-size:16px}.zebra-toolbar .pop-info{display:none;position:absolute;right:10px;top:30px;width:200px;color:#fff;font-size:12px;line-height:22px;padding:30px 0 50px;-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto;z-index:1}.zebra-toolbar .pop-info .arrow{top:22px;right:8px;border-bottom:8px solid rgba(0,0,0,.6)}.zebra-toolbar .pop-info .inner{padding:5px;min-height:50px;background-color:rgba(0,0,0,.6)}.zebra-toolbar .pop-info a{color:#12AEFF;text-decoration:underline}.zebra-toolbar .onhidetext{display:none}.pc .zebra-toolbar{width:990px;left:50%;margin-left:-495px}.pc .zebra-toolbar .ft{width:200px;margin-left:-100px}.mui-zebra-page>div:first-of-type.mui-zebra-module{min-height:100px}.mui-zebra-page>div:first-of-type.mui-zebra-module .moveup{display:none}.mui-zebra-page>div:first-of-type.mui-zebra-module .zebra-toolbar .border{display:none}.mui-zebra-page>div:first-of-type.mui-zebra-module .zebra-toolbar .hd{top:0}.mui-zebra-page>div:last-of-type .ft,.mui-zebra-page>div:last-of-type .movedown{display:none}.mui-zebra-module.hover{z-index:10000}.mui-zebra-module.hover .zebra-toolbar{display:block}.zebra-toolbar.empty{display:block;position:relative;left:0;padding:0;margin:10px auto 0;text-align:center;max-width:1190px;height:auto;background-color:transparent;pointer-events:initial;border:0;box-shadow:none}.zebra-toolbar.empty.prepend{margin-bottom:60px;margin-top:0;padding-top:10px}.zebra-toolbar.empty.prepend+.zebra-toolbar.empty{display:none}.zebra-toolbar.empty.add-mod .add,.zebra-toolbar.empty.add-more .add{display:none}.zebra-add-cover,.zebra-add-more-cover{display:none;box-sizing:border-box!important;height:100px;line-height:100px;text-align:center;width:100%;padding:0 10px;margin:20px auto 30px}.zebra-add-cover .text,.zebra-add-more-cover .text{height:100%;font-size:14px;font-weight:700;color:#df3434;background-color:#ffd9d9;border:2px dashed #df3434}.pc .zebra-add-cover.zebra-add-more-cover{padding:0;width:990px}.add-mod .zebra-add-cover{display:block}.add-more .zebra-add-more-cover{display:block}.mui-zebra-nocontent{padding:10px;font-size:18px}.mui-zebra-nocontent p{margin-bottom:10px}.mui-zebra-nocontent a{color:#428bca}.mengban{opacity:0!important}.mengban:hover{opacity:.3!important}.mui-zebra-module.hover .mengban{opacity:.3!important}body.mui-zebra-isSource .zebra-toolbar .add,body.mui-zebra-isSource .zebra-toolbar .iconbtn,body.mui-zebra-isSource .zebra-toolbar.empty{display:none}body.mui-zebra-isSource .zebra-toolbar .iconbtn.info,body.mui-zebra-isSource .zebra-toolbar .iconbtn.maintain{display:block}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head2.css b/html5/test/render/vue/data/css/head2.css
new file mode 100644
index 0000000..50c718f
--- /dev/null
+++ b/html5/test/render/vue/data/css/head2.css
@@ -0,0 +1,11 @@
+/*/////////////////////////////////////////////////////////////*/
+
+.wrapper[data-v-16194ed9] {
+    color: #353535;
+}
+.point[data-v-16194ed9] {
+  position: absolute;
+}
+.banner[data-v-16194ed9]{
+  width: 375px;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head3.css b/html5/test/render/vue/data/css/head3.css
new file mode 100644
index 0000000..f8bf724
--- /dev/null
+++ b/html5/test/render/vue/data/css/head3.css
@@ -0,0 +1,25 @@
+/*/////////////////////////////////////////////////////////////*/
+
+/* 默认背景色为 #FFFFFF */
+.wrapper[data-v-6acf469e] {
+    background-color: transparent;
+    -webkit-box-pack: center;
+    -webkit-justify-content: center;
+        -ms-flex-pack: center;
+            justify-content: center;
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center;
+    padding-bottom: 9px;
+}
+.items-wrapper[data-v-6acf469e] {
+    width: 357.5px;
+}
+.row[data-v-6acf469e] {
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head4.css b/html5/test/render/vue/data/css/head4.css
new file mode 100644
index 0000000..dfde2dc
--- /dev/null
+++ b/html5/test/render/vue/data/css/head4.css
@@ -0,0 +1,56 @@
+/*/////////////////////////////////////////////////////////////*/
+
+.item[data-v-553d6ea0] {
+    width: 178px;
+    height: 118px;
+    background-color: #ffffff;
+    margin-bottom: 1px;
+}
+.bgImage[data-v-553d6ea0] {
+    position: absolute;
+    width: 178px;
+    height: 118px;
+}
+.img[data-v-553d6ea0] {
+    position: absolute;
+    width: 90px;
+    height: 90px;
+    top: 14px;
+    left: 3px;
+}
+.right-panel[data-v-553d6ea0] {
+    position: absolute;
+    left: 98px;
+    width: 75px;
+    lines: 1;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+    display: inline-block;
+    overflow: hidden;
+}
+.title[data-v-553d6ea0] {
+    font-weight: bold;
+    font-size: 12px;
+}
+.title-goods[data-v-553d6ea0] {
+    top: 22px;
+}
+.title-shop[data-v-553d6ea0] {
+    top: 40px;
+}
+.subtitle[data-v-553d6ea0] {
+    font-weight: lighter;
+    font-size: 12px;
+    color: #4A4A4A;
+}
+.subtitle-goods[data-v-553d6ea0] {
+    top: 43px;
+}
+.subtitle-shop[data-v-553d6ea0] {
+    top: 61px;
+}
+.price[data-v-553d6ea0] {
+    font-weight: lighter;
+    font-size: 14px;
+    top: 76px;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head5.css b/html5/test/render/vue/data/css/head5.css
new file mode 100644
index 0000000..a0adb55
--- /dev/null
+++ b/html5/test/render/vue/data/css/head5.css
@@ -0,0 +1,153 @@
+/*/////////////////////////////////////////////////////////////*/
+
+/* 默认背景色为 #FFFFFF */
+.wrapper[data-v-2c9fb3eb] {
+    background-color: transparent;
+}
+.cell-wrap[data-v-2c9fb3eb]{
+}
+.like-row[data-v-2c9fb3eb]{
+    width: 375px;
+    padding-left: 9px;
+    padding-right: 9px;
+    margin-bottom: 9px;
+    box-sizing: border-box;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row;
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+        -ms-flex-pack: justify;
+            justify-content: space-between;
+        }
+.like-item[data-v-2c9fb3eb]{
+    box-sizing: border-box;
+    width: 174px;
+    height: 250px;
+    /*margin-bottom: 18;*/
+    padding-left: 7px;
+    padding-right: 7px;
+    /*padding-top: 348px;*/
+    background-color: #ffffff;
+}
+.item-img[data-v-2c9fb3eb]{
+    /*position: absolute;*/
+    /*top: 0;*/
+    /*left: 0;*/
+    margin-left: -7px;
+    width: 174px;
+    height: 174px;
+}
+.title-ctn[data-v-2c9fb3eb]{
+    margin-top: 12px;
+    /* 348 - 14 * 2 */
+    width: 162px;
+    /*background-color: #eee;*/
+}
+.badge[data-v-2c9fb3eb]{
+    position: absolute;
+    top: 2px;
+    left: 0px;
+    width: 26px;
+    height: 13px;
+    margin-right: 4px;
+}
+.title[data-v-2c9fb3eb]{
+    width: 162px;
+    font-size: 12px;
+    line-height: 15px;
+    /*padding-top: 3;*/
+    color: #333333;
+    /*background-color: #ccc;*/
+
+    overflow: hidden;
+    text-overflow: ellipsis;
+    lines: 2;
+}
+.sub-title[data-v-2c9fb3eb]{
+    position: absolute;
+    /* 348 - 40(own-height)*/
+    bottom: 11px;
+    right: 6px;
+    /*width: 312;*/
+
+    /* totally hack, do not change */
+    font-size: 10px;
+    line-height: 9px;
+    height: 14px;
+    padding-top: 1.5px;
+
+    padding-left: 3px;
+    padding-right: 3px;
+    text-align: center;
+
+    color: #F70E50;
+    text-align: center;
+    border-radius: 3px;
+    border-width: 1px;
+
+    overflow: hidden;
+    text-overflow: ellipsis;
+    lines: 1;
+}
+.sub-title-bg[data-v-2c9fb3eb]{
+    position: absolute;
+    bottom: 11px;
+    right: 6px;
+
+    /* totally hack, do not change */
+    font-size: 10px;
+    line-height: 9px;
+    height: 14px;
+    padding-left: 3px;
+    padding-right: 3px;
+    text-align: center;
+
+    text-align: center;
+    border-radius: 3px;
+    border-width: 1px;
+
+    overflow: hidden;
+    text-overflow: ellipsis;
+    lines: 1;
+
+    border-color: transparent;
+    color: transparent;
+    opacity: 0.15;
+}
+.price-ctn[data-v-2c9fb3eb]{
+    position: absolute;
+    bottom: 11px;
+    left: 6px;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-flex-direction: row;
+        -ms-flex-direction: row;
+            flex-direction: row;
+    -webkit-box-align: center;
+    -webkit-align-items: center;
+        -ms-flex-align: center;
+            align-items: center;
+    /*background-color: #ccc;*/
+}
+.price-title[data-v-2c9fb3eb]{
+    font-size: 12px;
+    /*margin-top: 4px;*/
+}
+.price-unit[data-v-2c9fb3eb]{
+    /*margin-top: 5px;*/
+    font-size: 12px;
+    /*line-height: 26px;*/
+    color: #E71A17;
+    /*background-color: #ccc;*/
+}
+.price-num[data-v-2c9fb3eb]{
+    margin-left: -1px;
+    color: #E71A17;
+    font-size: 15px;
+    /*line-height: 36px;*/
+    font-weight: bold;
+    /*background-color: #ccc;*/
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head6.css b/html5/test/render/vue/data/css/head6.css
new file mode 100644
index 0000000..38eb47d
--- /dev/null
+++ b/html5/test/render/vue/data/css/head6.css
@@ -0,0 +1,4 @@
+/*/////////////////////////////////////////////////////////////*/
+.mui-zebra-page{
+  background:#192905
+}
diff --git a/html5/test/render/vue/data/css/head7.css b/html5/test/render/vue/data/css/head7.css
new file mode 100644
index 0000000..aab323b
--- /dev/null
+++ b/html5/test/render/vue/data/css/head7.css
@@ -0,0 +1,61 @@
+/*/////////////////////////////////////////////////////////////*/
+.weex-root,
+.weex-root * {
+  color: initial;
+  cursor: initial;
+  direction: initial;
+  font: initial;
+  font-family: initial;
+  font-size: initial;
+  font-style: initial;
+  font-variant: initial;
+  font-weight: initial;
+  line-height: initial;
+  text-align: initial;
+  text-indent: initial;
+  visibility: initial;
+  white-space: initial;
+  word-spacing: initial;
+  font-family: BlinkMacSystemFont, 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;
+}
+
+.weex-root,
+.weex-root *,
+.weex-root *::before,
+.weex-root *::after {
+  box-sizing: border-box;
+  -webkit-text-size-adjust: none;
+      -ms-text-size-adjust: none;
+          text-size-adjust: none;
+      }
+
+.weex-root a,
+.weex-root button,
+.weex-root [role="button"],
+.weex-root input,
+.weex-root label,
+.weex-root select,
+.weex-root textarea {
+  -ms-touch-action: manipulation;
+      touch-action: manipulation;
+  }
+
+.weex-root p,
+.weex-root ol,
+.weex-root ul,
+.weex-root dl {
+  margin: 0;
+  padding: 0;
+}
+
+.weex-root li {
+  list-style: none;
+}
+
+.weex-root figure {
+  margin: 0;
+}
+
+.weex-root textarea {
+  resize: none;
+}
\ No newline at end of file
diff --git a/html5/render/vue/styles/components.css b/html5/test/render/vue/data/css/head8.css
similarity index 81%
rename from html5/render/vue/styles/components.css
rename to html5/test/render/vue/data/css/head8.css
index e51481a..8f25208 100644
--- a/html5/render/vue/styles/components.css
+++ b/html5/test/render/vue/data/css/head8.css
@@ -1,58 +1,92 @@
-a, .weex-a {
-  display: block;
+/*/////////////////////////////////////////////////////////////*/
+.weex-root * {
+  border-width: 0;
+  border-color: inherit;
+  border-style: solid;
+}
+
+.weex-ct {
+  box-sizing: border-box;
+  display: -webkit-box;
+  display: -webkit-flex;
+  display: flex;
   position: relative;
+  -webkit-box-orient: vertical;
+  -webkit-flex-direction: column;
+  flex-direction: column;
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  -webkit-flex-grow: 0;
+  -ms-flex-grow: 0;
+  flex-grow: 0;
+  -webkit-flex-basis: auto;
+  flex-basis: auto;
+  -webkit-box-align: stretch;
+  -webkit-align-items: stretch;
+  -ms-flex-align: stretch;
+  align-items: stretch;
+  -webkit-align-content: flex-start;
+  -ms-flex-line-pack: start;
+  align-content: flex-start;
+  border: 0 solid black;
+  margin: 0;
+  padding: 0;
+  min-width: 0;
+}
+
+.weex-ct.horizontal {
+  -webkit-box-orient: horizontal;
+  -webkit-flex-direction: row;
+  flex-direction: row;
+}
+
+.weex-el {
+  display: block;
+  box-sizing: border-box;
+  position: relative;
+  -webkit-flex-shrink: 0;
+  -ms-flex-negative: 0;
+  flex-shrink: 0;
+  -webkit-flex-grow: 0;
+  -ms-flex-grow: 0;
+  flex-grow: 0;
+  -webkit-flex-basis: auto;
+  flex-basis: auto;
+  border: 0 solid black;
+  margin: 0;
+  padding: 0;
+  min-width: 0;
+}
+
+.weex-a {
   text-decoration: none;
 }
 
 body > .weex-div {
-  max-height: 100%;
+  min-height: 100%;
 }
 
-.weex-div {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  position: relative;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-  -webkit-flex-direction: column;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-flex-shrink: 0;
-      -ms-flex-negative: 0;
-          flex-shrink: 0;
-  -webkit-box-align: stretch;
-  -webkit-align-items: stretch;
-      -ms-flex-align: stretch;
-          align-items: stretch;
-  box-align: stretch;
-  -webkit-align-content: flex-start;
-      -ms-flex-line-pack: start;
-          align-content: flex-start;
+.weex-input, .weex-textarea {
+  font-size: 0.426667rem;
 }
-
-input, textarea, .weex-input, .weex-textarea {
-  position: relative;
-  font-size: 0.4267rem;
-}
-input:focus, textarea:focus, .weex-input:focus, .weex-textarea:focus {
+.weex-input:focus, .weex-textarea:focus {
   outline: none;
 }
 
-figure, img, .weex-image, .weex-img {
-  display: block;
-  position: relative;
+.weex-image, .weex-img {
   background-repeat: no-repeat;
+  background-position: 50% 50%;
 }
 
 .weex-toast {
-  font-size: 0.32rem;
+  font-size: 0.426667rem;
   line-height: 0.426667rem;
   position: fixed;
+  z-index: 1999999999;
   box-sizing: border-box;
   max-width: 80%;
-  bottom: 2.666667rem;
+  bottom: 50%;
   left: 50%;
   padding: 0.213333rem;
   background-color: #000;
@@ -65,7 +99,7 @@
   -webkit-transform: translateX(-50%);
   -ms-transform: translateX(-50%);
       transform: translateX(-50%);
-}
+  }
 
 .weex-toast.hide {
   opacity: 0;
@@ -81,7 +115,7 @@
 }
 
 .weex-confirm .btn-group .btn.btn-ok {
-  border-right: 1px solid #ddd;
+  border-right: 0.013333rem solid #ddd;
 }
 
 .weex-modal-wrap {
@@ -134,10 +168,10 @@
   width: 100%;
   min-height: 1.866667rem;
   box-sizing: border-box;
-  font-size: 0.32rem;
+  font-size: 0.426667rem;
   line-height: 0.426667rem;
   padding: 0.213333rem;
-  border-bottom: 1px solid #ddd;
+  border-bottom: 0.013333rem solid #ddd;
 }
 
 .weex-modal-node .btn-group {
@@ -177,8 +211,8 @@
   width: 100%;
   height: 0.56rem;
   line-height: 0.56rem;
-  font-size: 0.32rem;
-  border: 1px solid #999;
+  font-size: 0.426667rem;
+  border: 0.013333rem solid #999;
 }
 
 .weex-prompt .btn-group .btn {
@@ -187,7 +221,7 @@
 }
 
 .weex-prompt .btn-group .btn.btn-ok {
-  border-right: 1px solid #ddd;
+  border-right: 0.013333rem solid #ddd;
 }
 
 body > .weex-list,
@@ -197,78 +231,58 @@
 
 .weex-list-wrapper,
 .weex-scroller-wrapper {
-  display: block;
-  position: relative;
-  overflow-x: hidden;
-  overflow-y: scroll;
+  -webkit-overflow-scrolling: touch;
+}
+
+.weex-list-wrapper {
+  overflow-y: scroll !important;
 }
 
 .weex-list-inner,
 .weex-scroller-inner {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
+  -webkit-overflow-scrolling: touch;
   width: 100%;
-  min-height: 100%;
-  overflow: hidden;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-  -webkit-flex-direction: column;
-      -ms-flex-direction: column;
-          flex-direction: column;
-  -webkit-box-pack: start;
-  -webkit-justify-content: flex-start;
-      -ms-flex-pack: start;
-          justify-content: flex-start;
+}
+
+.weex-scroller-inner::-webkit-scrollbar {
+    width: 0;
+}
+
+.weex-scroller-wrapper.weex-scroller-vertical {
+  overflow-y: scroll;
 }
 
 .weex-scroller-wrapper.weex-scroller-horizontal {
-  overflow-y: hidden;
+  overflow-x: scroll;
 }
 
 .weex-scroller-horizontal .weex-scroller-inner {
   -webkit-flex-direction: row;
       -ms-flex-direction: row;
           flex-direction: row;
-  overflow-x: scroll;
-  width: auto;
+  -webkit-box-orient: horizontal;
   height: 100%;
 }
-.weex-scroller-horizontal .weex-scroller-inner > * {
-  float: left;
+
+.iossticky {
+  position: -webkit-sticky !important;
+  position: sticky !important;
+  z-index: 9999;
+  top: 0;
 }
 
 .sticky {
   position: fixed;
+  top: 0;
   z-index: 9999;
 }
 
 .weex-cell {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  position: relative;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-  -webkit-flex-direction: column;
-      -ms-flex-direction: column;
-          flex-direction: column;
   width: 100%;
 }
 
 .weex-refresh,
 .weex-loading {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-box-orient: vertical;
-  -webkit-box-direction: normal;
-  -webkit-flex-direction: column;
-      -ms-flex-direction: column;
-          flex-direction: column;
   -webkit-box-align: center;
   -webkit-align-items: center;
       -ms-flex-align: center;
@@ -278,26 +292,11 @@
       -ms-flex-pack: center;
           justify-content: center;
   width: 100%;
-  height: 0;
   overflow: hidden;
-  position: absolute;
-  visibility: hidden;
-  z-index: 100;
-  background-color: rgba(0, 0, 0, 0.3);
-}
-
-.weex-refresh {
-  top: 0;
-}
-
-.weex-loading {
-  bottom: 0;
-  bottom: -2.8267rem;
 }
 
 .weex-slider-wrapper {
   overflow: hidden;
-  position: relative;
 }
 
 .weex-slider-inner {
@@ -322,6 +321,10 @@
 
 .weex-indicator {
   position: absolute;
+  -webkit-flex-direction: row;
+  -ms-flex-direction: row;
+  flex-direction: row;
+  -webkit-box-orient: horizontal;
   margin: 0;
   padding: 0;
 }
@@ -330,12 +333,12 @@
   display: inline-block;
   position: relative;
   border-radius: 50%;
-  width: 0.2667rem;
-  height: 0.2667rem;
+  width: 0.266667rem;
+  height: 0.266667rem;
   background-color: #BBBBBB;
 }
 .weex-indicator-item + .weex-indicator-item {
-  margin-left: 0.1333rem;
+  margin-left: 0.133333rem;
 }
 
 .weex-indicator-item-active {
@@ -344,9 +347,8 @@
 
 .weex-refresh-indicator,
 .weex-loading-indicator {
-  position: relative;
-  width: 1rem;
-  height: 1rem;
+  width: 1.0rem;
+  height: 1.0rem;
   -webkit-box-align: center;
   -webkit-align-items: center;
       -ms-flex-align: center;
@@ -363,7 +365,6 @@
   display: block;
   content: '';
   font-size: 0.16rem;
-  /* 12px */
   width: 1em;
   height: 1em;
   left: -60%;
@@ -373,8 +374,8 @@
   text-indent: -9999em;
   -webkit-animation: weex-spinner 1.1s infinite ease;
           animation: weex-spinner 1.1s infinite ease;
-  -webkit-transform: translate3d(1rem, 0, 0);
-          transform: translate3d(1rem, 0, 0);
+  -webkit-transform: translate3d(1.0rem, 0, 0);
+          transform: translate3d(1.0rem, 0, 0);
 }
 
 @-webkit-keyframes weex-spinner {
@@ -433,7 +434,7 @@
   }
 }
 .weex-switch {
-  border: 1px solid #dfdfdf;
+  border: 0.013333rem solid #dfdfdf;
   cursor: pointer;
   display: inline-block;
   position: relative;
@@ -445,7 +446,7 @@
   box-sizing: content-box;
   background-clip: content-box;
   color: #64bd63;
-  width: 1.3333rem;
+  width: 1.333333rem;
   height: 0.8rem;
   background-color: white;
   border-color: #dfdfdf;
@@ -453,17 +454,17 @@
   border-radius: 0.8rem;
   -webkit-transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
           transition: border 0.4s, box-shadow 0.4s, background-color 1.2s;
-}
+      }
 
 .weex-switch-checked {
   background-color: #64bd63;
   border-color: #64bd63;
-  box-shadow: #64bd63 0 0 0 0.5333rem inset;
+  box-shadow: #64bd63 0 0 0 0.533333rem inset;
 }
 
 .weex-switch-checked.weex-switch-disabled {
   background-color: #A0CCA0;
-  box-shadow: #A0CCA0 0 0 0 0.5333rem inset;
+  box-shadow: #A0CCA0 0 0 0 0.533333rem inset;
 }
 
 .weex-switch-disabled {
@@ -475,26 +476,26 @@
   height: 0.8rem;
   background: #fff;
   border-radius: 100%;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
+  box-shadow: 0 0.013333rem 0.04rem rgba(0, 0, 0, 0.4);
   position: absolute;
   top: 0;
   left: 0;
   -webkit-transition: background-color 0.4s, left 0.2s;
           transition: background-color 0.4s, left 0.2s;
-}
+      }
 
 .weex-switch-checked > .weex-switch-inner {
-  left: 0.5333rem;
+  left: 0.533333rem;
 }
 
-p, .weex-text {
+.weex-text {
   display: -webkit-box;
   -webkit-box-orient: vertical;
   position: relative;
-  white-space: pre-wrap;
-  font-size: 0.4267rem;
+  white-space: pre-wrap;  /* not using 'pre': support auto line feed. */
+  font-size: 0.426667rem;
   word-wrap: break-word;
-  overflow: visible;
+  overflow: hidden; /* it'll be clipped if the height is not high enough. */
 }
 
 .weex-web {
@@ -503,4 +504,4 @@
   height: 100%;
   border: none;
   box-sizing: border-box;
-}
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/css/head9.css b/html5/test/render/vue/data/css/head9.css
new file mode 100644
index 0000000..ce38a66
--- /dev/null
+++ b/html5/test/render/vue/data/css/head9.css
@@ -0,0 +1,173 @@
+/*/////////////////////////////////////////////////////////////*/
+@font-face {
+  font-family: "iconfont";
+  src: url("data:application/x-font-ttf;charset=utf-8;base64,AAEAAAAPAIAAAwBwRkZUTXBD98UAAAD8AAAAHE9TLzJXL1zIAAABGAAAAGBjbWFws6IHbgAAAXgAAAFaY3Z0IAyV/swAAApQAAAAJGZwZ20w956VAAAKdAAACZZnYXNwAAAAEAAACkgAAAAIZ2x5ZuxoPFIAAALUAAAEWGhlYWQHA5h3AAAHLAAAADZoaGVhBzIDcgAAB2QAAAAkaG10eAs2AW0AAAeIAAAAGGxvY2EDcAQeAAAHoAAAABBtYXhwASkKKwAAB7AAAAAgbmFtZQl/3hgAAAfQAAACLnBvc3Tm7f0bAAAKAAAAAEhwcmVwpbm+ZgAAFAwAAACVAAAAAQAAAADMPaLPAAAAANIDKnoAAAAA0gMqewAEA/oB9AAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAgAGAwAAAAAAAAAAAAEQAAAAAAAAAAAAAABQZkVkAMAAeObeAyz/LABcAxgAlAAAAAEAAAAAAxgAAAAAACAAAQAAAAMAAAADAAAAHAABAAAAAABUAAMAAQAAABwABAA4AAAACgAIAAIAAgB45lDmYebe//8AAAB45lDmYebe////ixm0GaQZKAABAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACIAAAEyAqoAAwAHAClAJgAAAAMCAANXAAIBAQJLAAICAU8EAQECAUMAAAcGBQQAAwADEQUPKzMRIREnMxEjIgEQ7szMAqr9ViICZgAAAAUALP/hA7wDGAAWADAAOgBSAF4Bd0uwE1BYQEoCAQANDg0ADmYAAw4BDgNeAAEICAFcEAEJCAoGCV4RAQwGBAYMXgALBAtpDwEIAAYMCAZYAAoHBQIECwoEWRIBDg4NUQANDQoOQhtLsBdQWEBLAgEADQ4NAA5mAAMOAQ4DXgABCAgBXBABCQgKCAkKZhEBDAYEBgxeAAsEC2kPAQgABgwIBlgACgcFAgQLCgRZEgEODg1RAA0NCg5CG0uwGFBYQEwCAQANDg0ADmYAAw4BDgNeAAEICAFcEAEJCAoICQpmEQEMBgQGDARmAAsEC2kPAQgABgwIBlgACgcFAgQLCgRZEgEODg1RAA0NCg5CG0BOAgEADQ4NAA5mAAMOAQ4DAWYAAQgOAQhkEAEJCAoICQpmEQEMBgQGDARmAAsEC2kPAQgABgwIBlgACgcFAgQLCgRZEgEODg1RAA0NCg5CWVlZQChTUzs7MjEXF1NeU15bWDtSO1JLQzc1MToyOhcwFzBRETEYESgVQBMWKwEGKwEiDgIdASE1NCY1NC4CKwEVIQUVFBYUDgIjBiYrASchBysBIiciLgI9ARciBhQWMzI2NCYXBgcOAx4BOwYyNicuAScmJwE1ND4COwEyFh0BARkbGlMSJRwSA5ABChgnHoX+SgKiARUfIw4OHw4gLf5JLB0iFBkZIBMIdwwSEgwNEhKMCAYFCwQCBA8OJUNRUEAkFxYJBQkFBQb+pAUPGhW8HykCHwEMGScaTCkQHAQNIBsSYYg0Fzo6JRcJAQGAgAETGyAOpz8RGhERGhF8GhYTJA4QDQgYGg0jERMUAXfkCxgTDB0m4wAAAgCg/2wDYALsABIAGgAhQB4AAAADAgADWQACAQECTQACAgFRAAECAUUTFjkQBBIrACAGFRQeAxcWOwEyPwESNTQAIiY0NjIWFAKS/tzORFVvMRAJDgEOCW3b/uKEXl6EXgLszpI1lXyJNhEKC30BDIyS/s5ehF5ehAAAAAEAggBJA4QB6AAdABtAGBIRAgEAAUAFAQA+AAABAGgAAQFfEx8CECsBJgcGBwkBLgEGBwYUFwEwMxcVFjI3AT4DLgIDehEWAwP+uP60BhEQBgoKAWEBAQoaCQFeAwQCAQECBAHhEg0DAv61AUkHBAUGCRsJ/qIBAQkJAWICBwYHCAYGAAEAfwCLA4ECJwAhAB1AGhYPAgEAAUAFAQA+AAABAGgCAQEBXyQuEwMRKyUBMCcjNSYHBgcBDgEUFhceAjMyNwkBFjMyNjc+Ai4BA3f+nwEBEhUEAv6iBQUFBQMHCAQOCQFIAUwKDQYMBQMFAQEFwwFeAQERDQID/p8FDAwMBAMEAgkBS/62CQUFAwoJCgkAAAEAAAABAAALIynoXw889QALBAAAAAAA0gMqewAAAADSAyp7ACL/bAO8AxgAAAAIAAIAAAAAAAAAAQAAAxj/bABcBAAAAAAAA7wAAQAAAAAAAAAAAAAAAAAAAAUBdgAiAAAAAAFVAAAD6QAsBAAAoACCAH8AAAAoACgAKAFkAaIB5AIsAAEAAAAHAF8ABQAAAAAAAgAmADQAbAAAAIoJlgAAAAAAAAAMAJYAAQAAAAAAAQAIAAAAAQAAAAAAAgAGAAgAAQAAAAAAAwAkAA4AAQAAAAAABAAIADIAAQAAAAAABQBGADoAAQAAAAAABgAIAIAAAwABBAkAAQAQAIgAAwABBAkAAgAMAJgAAwABBAkAAwBIAKQAAwABBAkABAAQAOwAAwABBAkABQCMAPwAAwABBAkABgAQAYhpY29uZm9udE1lZGl1bUZvbnRGb3JnZSAyLjAgOiBpY29uZm9udCA6IDI2LTgtMjAxNWljb25mb250VmVyc2lvbiAxLjAgOyB0dGZhdXRvaGludCAodjAuOTQpIC1sIDggLXIgNTAgLUcgMjAwIC14IDE0IC13ICJHIiAtZiAtc2ljb25mb250AGkAYwBvAG4AZgBvAG4AdABNAGUAZABpAHUAbQBGAG8AbgB0AEYAbwByAGcAZQAgADIALgAwACAAOgAgAGkAYwBvAG4AZgBvAG4AdAAgADoAIAAyADYALQA4AC0AMgAwADEANQBpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwACAAOwAgAHQAdABmAGEAdQB0AG8AaABpAG4AdAAgACgAdgAwAC4AOQA0ACkAIAAtAGwAIAA4ACAALQByACAANQAwACAALQBHACAAMgAwADAAIAAtAHgAIAAxADQAIAAtAHcAIAAiAEcAIgAgAC0AZgAgAC0AcwBpAGMAbwBuAGYAbwBuAHQAAAACAAAAAAAA/4MAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAABAAIAWwECAQMBBAd1bmlFNjUwB3VuaUU2NjEHdW5pRTZERQABAAH//wAPAAAAAAAAAAAAAAAAAAAAAAAyADIDGP/hAxj/bAMY/+EDGP9ssAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywCCNCsAcjQrAAI0KwAEOwB0NRWLAIQyuyAAEAQ2BCsBZlHFktsAUssABDIEUgsAJFY7ABRWJgRC2wBiywAEMgRSCwACsjsQQEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERC2wByyxBQVFsAFhRC2wCCywAWAgILAKQ0qwAFBYILAKI0JZsAtDSrAAUlggsAsjQlktsAksILgEAGIguAQAY4ojYbAMQ2AgimAgsAwjQiMtsAosS1RYsQcBRFkksA1lI3gtsAssS1FYS1NYsQcBRFkbIVkksBNlI3gtsAwssQANQ1VYsQ0NQ7ABYUKwCStZsABDsAIlQrIAAQBDYEKxCgIlQrELAiVCsAEWIyCwAyVQWLAAQ7AEJUKKiiCKI2GwCCohI7ABYSCKI2GwCCohG7AAQ7ACJUKwAiVhsAgqIVmwCkNHsAtDR2CwgGIgsAJFY7ABRWJgsQAAEyNEsAFDsAA+sgEBAUNgQi2wDSyxAAVFVFgAsA0jQiBgsAFhtQ4OAQAMAEJCimCxDAQrsGsrGyJZLbAOLLEADSstsA8ssQENKy2wECyxAg0rLbARLLEDDSstsBIssQQNKy2wEyyxBQ0rLbAULLEGDSstsBUssQcNKy2wFiyxCA0rLbAXLLEJDSstsBgssAcrsQAFRVRYALANI0IgYLABYbUODgEADABCQopgsQwEK7BrKxsiWS2wGSyxABgrLbAaLLEBGCstsBsssQIYKy2wHCyxAxgrLbAdLLEEGCstsB4ssQUYKy2wHyyxBhgrLbAgLLEHGCstsCEssQgYKy2wIiyxCRgrLbAjLCBgsA5gIEMjsAFgQ7ACJbACJVFYIyA8sAFgI7ASZRwbISFZLbAkLLAjK7AjKi2wJSwgIEcgILACRWOwAUViYCNhOCMgilVYIEcgILACRWOwAUViYCNhOBshWS2wJiyxAAVFVFgAsAEWsCUqsAEVMBsiWS2wJyywByuxAAVFVFgAsAEWsCUqsAEVMBsiWS2wKCwgNbABYC2wKSwAsANFY7ABRWKwACuwAkVjsAFFYrAAK7AAFrQAAAAAAEQ+IzixKAEVKi2wKiwgPCBHILACRWOwAUViYLAAQ2E4LbArLC4XPC2wLCwgPCBHILACRWOwAUViYLAAQ2GwAUNjOC2wLSyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsiwBARUUKi2wLiywABawBCWwBCVHI0cjYbAGRStlii4jICA8ijgtsC8ssAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgsAlDIIojRyNHI2EjRmCwBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhIyAgsAQmI0ZhOBsjsAlDRrACJbAJQ0cjRyNhYCCwBEOwgGJgIyCwACsjsARDYLAAK7AFJWGwBSWwgGKwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbAwLLAAFiAgILAFJiAuRyNHI2EjPDgtsDEssAAWILAJI0IgICBGI0ewACsjYTgtsDIssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbABRWMjIFhiGyFZY7ABRWJgIy4jICA8ijgjIVktsDMssAAWILAJQyAuRyNHI2EgYLAgYGawgGIjICA8ijgtsDQsIyAuRrACJUZSWCA8WS6xJAEUKy2wNSwjIC5GsAIlRlBYIDxZLrEkARQrLbA2LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrEkARQrLbA3LLAuKyMgLkawAiVGUlggPFkusSQBFCstsDgssC8riiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSQBFCuwBEMusCQrLbA5LLAAFrAEJbAEJiAuRyNHI2GwBkUrIyA8IC4jOLEkARQrLbA6LLEJBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEkARQrLbA7LLAuKy6xJAEUKy2wPCywLyshIyAgPLAEI0IjOLEkARQrsARDLrAkKy2wPSywABUgR7AAI0KyAAEBFRQTLrAqKi2wPiywABUgR7AAI0KyAAEBFRQTLrAqKi2wPyyxAAEUE7ArKi2wQCywLSotsEEssAAWRSMgLiBGiiNhOLEkARQrLbBCLLAJI0KwQSstsEMssgAAOistsEQssgABOistsEUssgEAOistsEYssgEBOistsEcssgAAOystsEgssgABOystsEkssgEAOystsEossgEBOystsEsssgAANystsEwssgABNystsE0ssgEANystsE4ssgEBNystsE8ssgAAOSstsFAssgABOSstsFEssgEAOSstsFIssgEBOSstsFMssgAAPCstsFQssgABPCstsFUssgEAPCstsFYssgEBPCstsFcssgAAOCstsFgssgABOCstsFkssgEAOCstsFossgEBOCstsFsssDArLrEkARQrLbBcLLAwK7A0Ky2wXSywMCuwNSstsF4ssAAWsDArsDYrLbBfLLAxKy6xJAEUKy2wYCywMSuwNCstsGEssDErsDUrLbBiLLAxK7A2Ky2wYyywMisusSQBFCstsGQssDIrsDQrLbBlLLAyK7A1Ky2wZiywMiuwNistsGcssDMrLrEkARQrLbBoLLAzK7A0Ky2waSywMyuwNSstsGossDMrsDYrLbBrLCuwCGWwAyRQeLABFTAtAABLuADIUlixAQGOWbkIAAgAYyCwASNEILADI3CwDkUgIEu4AA5RS7AGU1pYsDQbsChZYGYgilVYsAIlYbABRWMjYrACI0SzCgkFBCuzCgsFBCuzDg8FBCtZsgQoCUVSRLMKDQYEK7EGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAAAA==") format("truetype");
+}
+
+.iconfont {
+  font-family: iconfont !important;
+  font-size: 0.213333rem;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -webkit-text-stroke-width: 0.0.002667rem;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.weex-tabheader {
+  position: relative;
+  -webkit-box-align: center;
+  -webkit-align-items: center;
+  -ms-flex-align: center;
+  align-items: center;
+  left: 0;
+  top: 0;
+  width: 10rem;
+  height: 1.6rem;
+  color: #333;
+  overflow: hidden;
+}
+
+.weex-tabheader,
+.weex-tabheader * {
+  color: inherit;
+  cursor: inherit;
+  direction: inherit;
+  font: inherit;
+  font-family: inherit;
+  font-size: inherit;
+  font-style: inherit;
+  font-variant: inherit;
+  font-weight: inherit;
+  line-height: inherit;
+  text-align: inherit;
+  text-indent: inherit;
+  visibility: inherit;
+  white-space: inherit;
+  word-spacing: inherit;
+}
+
+.weex-tabheader .header-bar {
+  display: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  font-size: 0.373333rem;
+  height: 1.17rem;
+  line-height: 1.17rem;
+  color: #999;
+  padding-left: 0.4rem;
+}
+.weex-tabheader .header-body {
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 9rem;
+  overflow-x: scroll;
+  overflow-y: hidden;
+  white-space: nowrap;
+}
+.weex-tabheader .header-body::-webkit-scrollbar {
+  width: 0;
+  height: 0;
+  overflow: hidden;
+}
+.weex-tabheader .fold-toggle {
+  position: absolute;
+  top: 0.6rem;
+  right: 0;
+  width: 1rem;
+  height: 1.17rem;
+  line-height: 1.17rem;
+  text-align: center;
+  z-index: 999;
+  font-size: 0.426667rem;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+.weex-tabheader.unfold-header {
+  position: fixed !important;
+  top: 0;
+  left: 0;
+  overflow: visible;
+}
+
+.weex-tabheader {
+  list-style: none;
+  white-space: nowrap;
+  height: 1.17rem;
+  line-height: 1.17rem;
+}
+.weex-tabheader .th-item {
+  padding-left: 0.72rem;
+  font-size: 0.373333rem;
+  position: relative;
+  display: inline-block;
+}
+.weex-tabheader .th-item.active {
+  color: #ff0000;
+}
+.weex-tabheader .hl-icon {
+  width: 0.4rem;
+  height: 0.4rem;
+  line-height: 0.4rem;
+  text-align: center;
+  position: absolute;
+  top: 50%;
+  left: 0.24rem;
+  font-size: 0.373333rem;
+  -webkit-transform: translateY(-50%);
+  transform: translateY(-50%);
+}
+
+.weex-tabheader .hl-icon.active {
+  color: #ff0000;
+}
+
+.unfold-header .header-bar {
+  display: block;
+}
+.unfold-header .fold-toggle {
+  -webkit-transform: translateY(-50%) rotate(180deg);
+  transform: translateY(-50%) rotate(180deg);
+}
+.unfold-header .header-body {
+  display: block;
+  height: auto;
+  position: relative;
+  margin-top: 1.17rem;
+  padding: 0.133333rem;
+  margin-right: 0;
+  white-space: normal;
+}
+.unfold-header.weex-tabheader {
+  display: block;
+  height: auto;
+}
+.unfold-header .th-item {
+  box-sizing: border-box;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+  float: left;
+  width: 33.3333%;
+  height: 1.01rem;
+  line-height: 1.01rem;
+}
+.unfold-header .hl-icon {
+  margin-right: 0;
+  font-size: 0.373333rem;
+  position: absolute;
+}
+.unfold-header.tabheader-mask {
+  display: block;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(0, 0, 0, 0.6);
+}
+
+.tabheader-mask {
+  display: none;
+  position: fixed;
+  left: 0;
+  top: 0;
+}
\ No newline at end of file
diff --git a/html5/test/render/vue/data/dotvue/event-bubble-bar.vue b/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
new file mode 100644
index 0000000..bcf547a
--- /dev/null
+++ b/html5/test/render/vue/data/dotvue/event-bubble-bar.vue
@@ -0,0 +1,20 @@
+<template>
+  <div class="event-bubble-outter" @click="outterClick">
+    <div>
+      <div class="event-bubble-inner" @click="innerClick"></div>
+    </div>
+  </div>
+</template>
+
+<script>
+  module.exports = {
+    methods: {
+      outterClick (evt) {
+        this.$parent.$parent.tracker += ' > in-bar-outter-div'
+      },
+      innerClick (evt) {
+        this.$parent.$parent.tracker += ' > in-bar-inner-div'
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/html5/test/render/vue/data/dotvue/event-bubble.vue b/html5/test/render/vue/data/dotvue/event-bubble.vue
new file mode 100644
index 0000000..71b77a4
--- /dev/null
+++ b/html5/test/render/vue/data/dotvue/event-bubble.vue
@@ -0,0 +1,25 @@
+<template>
+  <div>
+    <bar @click="click"></bar>
+    <text>{{tracker}}</text>
+  </div>
+</template>
+
+<script>
+  module.exports = {
+    data: {
+      tracker: ''
+    },
+    updated () {
+      this.done('test-event-bubble', this.tracker)
+    },
+    methods: {
+      click (e) {
+        this.tracker += ' > component-bar'
+      }
+    },
+    components: {
+      bar: require('./event-bubble-bar.vue')
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/html5/test/render/vue/data/dotvue/first-screen-appear-foo.vue b/html5/test/render/vue/data/dotvue/first-screen-appear-foo.vue
new file mode 100644
index 0000000..57d8591
--- /dev/null
+++ b/html5/test/render/vue/data/dotvue/first-screen-appear-foo.vue
@@ -0,0 +1,27 @@
+<template>
+  <div v-if="show" style="width:200px;height:200px;background-color:red;"></div>
+</template>
+
+<script>
+module.exports = {
+  data () {
+    return {
+      show: false
+    }
+  },
+  mounted () {
+    setTimeout(() => {
+      this.show = true
+      setTimeout(() => {
+        this.show = false
+        setTimeout(() => {
+          this.show = true
+          setTimeout(() => {
+            this.done('test-first-screen-appear')
+          }, 25)
+        }, 300)
+      }, 300)
+    }, 300)
+  }
+}
+</script>
diff --git a/html5/test/render/vue/data/dotvue/first-screen-appear.vue b/html5/test/render/vue/data/dotvue/first-screen-appear.vue
new file mode 100644
index 0000000..cdb1088
--- /dev/null
+++ b/html5/test/render/vue/data/dotvue/first-screen-appear.vue
@@ -0,0 +1,21 @@
+<template>
+  <div>
+    <foo @appear="appear" @disappear="disappear"></foo>
+  </div>
+</template>
+
+<script>
+  module.exports = {
+    components: {
+      foo: require('./first-screen-appear-foo.vue')
+    },
+    methods: {
+      appear: function (evt) {
+        window._spy_first_screen_appear(evt)
+      },
+      disappear: function (evt) {
+        window._spy_first_screen_appear(evt)
+      }
+    }
+  }
+</script>
diff --git a/html5/test/render/vue/data/dotvue/scoped-style.vue b/html5/test/render/vue/data/dotvue/scoped-style.vue
new file mode 100644
index 0000000..4ff9dbb
--- /dev/null
+++ b/html5/test/render/vue/data/dotvue/scoped-style.vue
@@ -0,0 +1,25 @@
+<template>
+  <div>
+    <div ref="foo" style="height:200px;" :style="{ backgroundColor: 'red' }" class="ct"></div>
+  </div>
+</template>
+
+<style scoped>
+.ct {
+  display: flex;
+  width: 200px; /* width: 100 * 2 - test trimComment */
+  flex-direction: row; /* flex-direction: 2 * 100 - test trimComment */
+  transform: translate3d(100px, 100px, 0);
+  background-image: linear-gradient(to top, #f5fefd, #ffffff);
+}
+</style>
+
+<script>
+  module.exports = {
+    mounted () {
+      setTimeout(() => {
+        this.done('test-style')
+      }, 1000)
+    }
+  }
+</script>
diff --git a/html5/test/render/vue/data/head-css.js b/html5/test/render/vue/data/head-css.js
new file mode 100644
index 0000000..f835670
--- /dev/null
+++ b/html5/test/render/vue/data/head-css.js
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import './css/head1.css'
+import './css/head2.css'
+import './css/head3.css'
+import './css/head4.css'
+import './css/head5.css'
+import './css/head6.css'
+import './css/head7.css'
+import './css/head8.css'
+import './css/head9.css'
+import './css/head10.css'
+import './css/head11.css'
+import './css/head12.css'
+import './css/head13.css'
+import './css/head14.css'
diff --git a/html5/test/render/vue/data/head-map.js b/html5/test/render/vue/data/head-map.js
new file mode 100644
index 0000000..8d8057b
--- /dev/null
+++ b/html5/test/render/vue/data/head-map.js
@@ -0,0 +1,294 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+export default {
+  /*// head1.css /////////////////////////////////////////////////*/
+  ".wrapper[data-v-67763bae]": {
+    "width": "375px",
+    "overflow": "hidden"
+  },
+  ".module-warning[data-v-67763bae]": {
+    "text-align": "center",
+    "font-size": "25px",
+    "color": "red",
+    "font-weight": "bold"
+  },
+  ".video[data-v-67763bae]": {
+    "position": "absolute",
+    "top": "0",
+    "left": "0",
+    "width": "375px"
+  },
+  ".first-frame[data-v-67763bae]": {
+    "position": "absolute",
+    "top": "0",
+    "left": "0",
+    "width": "375px"
+  },
+  ".final-image[data-v-67763bae]": {
+    "position": "absolute",
+    "top": "0",
+    "left": "0",
+    "width": "375px"
+  },
+  ".deco-img[data-v-67763bae]": {
+    "width": "375px",
+    "position": "absolute",
+    "left": "0",
+    "bottom": "0"
+  },
+
+  /*// head2.css /////////////////////////////////////////////////*/
+  ".wrapper[data-v-16194ed9]": {
+    "color": "#353535"
+  },
+  ".point[data-v-16194ed9]": {
+    "position": "absolute"
+  },
+  ".banner[data-v-16194ed9]": {
+    "width": "375px"
+  },
+
+  /*// head3.css /////////////////////////////////////////////////*/
+  ".wrapper[data-v-6acf469e]": {
+    "background-color": "transparent",
+    "-webkit-box-pack": "center",
+    "-webkit-justify-content": "center",
+    "-ms-flex-pack": "center",
+    "justify-content": "center",
+    "-webkit-box-align": "center",
+    "-webkit-align-items": "center",
+    "-ms-flex-align": "center",
+    "align-items": "center",
+    "padding-bottom": "9px"
+  },
+  ".items-wrapper[data-v-6acf469e]": {
+    "width": "357.5px"
+  },
+  ".row[data-v-6acf469e]": {
+    "-webkit-box-orient": "horizontal",
+    "-webkit-box-direction": "normal",
+    "-webkit-flex-direction": "row",
+    "-ms-flex-direction": "row",
+    "flex-direction": "row"
+  },
+
+  /*// head4.css /////////////////////////////////////////////////*/
+  ".item[data-v-553d6ea0]": {
+    "width": "178px",
+    "height": "118px",
+    "background-color": "#ffffff",
+    "margin-bottom": "1px"
+  },
+  ".bgImage[data-v-553d6ea0]": {
+    "position": "absolute",
+    "width": "178px",
+    "height": "118px"
+  },
+  ".img[data-v-553d6ea0]": {
+    "position": "absolute",
+    "width": "90px",
+    "height": "90px",
+    "top": "14px",
+    "left": "3px"
+  },
+  ".right-panel[data-v-553d6ea0]": {
+    "position": "absolute",
+    "left": "98px",
+    "width": "75px",
+    "lines": "1",
+    "text-overflow": "ellipsis",
+    "white-space": "nowrap",
+    "display": "inline-block",
+    "overflow": "hidden"
+  },
+  ".title[data-v-553d6ea0]": {
+    "font-weight": "bold",
+    "font-size": "12px"
+  },
+  ".title-goods[data-v-553d6ea0]": {
+    "top": "22px"
+  },
+  ".title-shop[data-v-553d6ea0]": {
+    "top": "40px"
+  },
+  ".subtitle[data-v-553d6ea0]": {
+    "font-weight": "lighter",
+    "font-size": "12px",
+    "color": "#4A4A4A"
+  },
+  ".subtitle-goods[data-v-553d6ea0]": {
+    "top": "43px"
+  },
+  ".subtitle-shop[data-v-553d6ea0]": {
+    "top": "61px"
+  },
+  ".price[data-v-553d6ea0]": {
+    "font-weight": "lighter",
+    "font-size": "14px",
+    "top": "76px"
+  },
+
+  /*// head5.css /////////////////////////////////////////////////*/
+  ".wrapper[data-v-2c9fb3eb]": {
+    "background-color": "transparent"
+  },
+  ".cell-wrap[data-v-2c9fb3eb]": {},
+  ".like-row[data-v-2c9fb3eb]": {
+    "width": "375px",
+    "padding-left": "9px",
+    "padding-right": "9px",
+    "margin-bottom": "9px",
+    "box-sizing": "border-box",
+    "-webkit-box-orient": "horizontal",
+    "-webkit-box-direction": "normal",
+    "-webkit-flex-direction": "row",
+    "-ms-flex-direction": "row",
+    "flex-direction": "row",
+    "-webkit-box-pack": "justify",
+    "-webkit-justify-content": "space-between",
+    "-ms-flex-pack": "justify",
+    "justify-content": "space-between"
+  },
+  ".like-item[data-v-2c9fb3eb]": {
+    "box-sizing": "border-box",
+    "width": "174px",
+    "height": "250px",
+    "padding-left": "7px",
+    "padding-right": "7px",
+    "background-color": "#ffffff"
+  },
+  ".item-img[data-v-2c9fb3eb]": {
+    "margin-left": "-7px",
+    "width": "174px",
+    "height": "174px"
+  },
+  ".title-ctn[data-v-2c9fb3eb]": {
+    "margin-top": "12px",
+    "width": "162px"
+  },
+  ".badge[data-v-2c9fb3eb]": {
+    "position": "absolute",
+    "top": "2px",
+    "left": "0px",
+    "width": "26px",
+    "height": "13px",
+    "margin-right": "4px"
+  },
+  ".title[data-v-2c9fb3eb]": {
+    "width": "162px",
+    "font-size": "12px",
+    "line-height": "15px",
+    "color": "#333333",
+    "overflow": "hidden",
+    "text-overflow": "ellipsis",
+    "lines": "2"
+  },
+  ".sub-title[data-v-2c9fb3eb]": {
+    "position": "absolute",
+    "bottom": "11px",
+    "right": "6px",
+    "font-size": "10px",
+    "line-height": "9px",
+    "height": "14px",
+    "padding-top": "1.5px",
+    "padding-left": "3px",
+    "padding-right": "3px",
+    "text-align": "center",
+    "color": "#F70E50",
+    "border-radius": "3px",
+    "border-width": "1px",
+    "overflow": "hidden",
+    "text-overflow": "ellipsis",
+    "lines": "1"
+  },
+  ".sub-title-bg[data-v-2c9fb3eb]": {
+    "position": "absolute",
+    "bottom": "11px",
+    "right": "6px",
+    "font-size": "10px",
+    "line-height": "9px",
+    "height": "14px",
+    "padding-left": "3px",
+    "padding-right": "3px",
+    "text-align": "center",
+    "border-radius": "3px",
+    "border-width": "1px",
+    "overflow": "hidden",
+    "text-overflow": "ellipsis",
+    "lines": "1",
+    "border-color": "transparent",
+    "color": "transparent",
+    "opacity": "0.15"
+  },
+  ".price-ctn[data-v-2c9fb3eb]": {
+    "position": "absolute",
+    "bottom": "11px",
+    "left": "6px",
+    "-webkit-box-orient": "horizontal",
+    "-webkit-box-direction": "normal",
+    "-webkit-flex-direction": "row",
+    "-ms-flex-direction": "row",
+    "flex-direction": "row",
+    "-webkit-box-align": "center",
+    "-webkit-align-items": "center",
+    "-ms-flex-align": "center",
+    "align-items": "center"
+  },
+  ".price-title[data-v-2c9fb3eb]": {
+    "font-size": "12px"
+  },
+  ".price-unit[data-v-2c9fb3eb]": {
+    "font-size": "12px",
+    "color": "#E71A17"
+  },
+  ".price-num[data-v-2c9fb3eb]": {
+    "margin-left": "-1px",
+    "color": "#E71A17",
+    "font-size": "15px",
+    "font-weight": "bold"
+  },
+
+  /*// head13.css /////////////////////////////////////////////////*/
+  ".row[data-v-0dad7305]": {
+    "flex-direction": "row"
+  },
+  ".result[data-v-0dad7305]": {
+    "text-align": "right",
+    "background-color": "#666",
+    "font-size": "40px",
+    "color": "white",
+    "height": "100px",
+    "padding": "30px",
+    "margin": "5px"
+  },
+  ".btn[data-v-0dad7305]": {
+    "flex": "1",
+    "text-align": "center",
+    "background-color": "#eee",
+    "font-size": "36px",
+    "height": "100px",
+    "padding": "30px",
+    "margin": "5px"
+  },
+  ".btn-operator[data-v-0dad7305]": {
+    "background-color": "#669",
+    "font-size": "40px",
+    "color": "white"
+  }
+}
diff --git a/html5/test/render/vue/examples/list-cell.js b/html5/test/render/vue/examples/list-cell.js
index bab74e5..d7224dd 100644
--- a/html5/test/render/vue/examples/list-cell.js
+++ b/html5/test/render/vue/examples/list-cell.js
@@ -1,22 +1,37 @@
-import { expect } from 'chai'
-import { multiDescribe } from '../helper'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import { init } from '../helper'
 import list from '../../../../render/vue/components/scrollable/list'
 import cell from '../../../../render/vue/components/scrollable/list/cell'
 import text from '../../../../render/vue/components/text'
 
-multiDescribe('list & cell example', (Vue, helper) => {
+init('list & cell example', (Vue, helper) => {
+  const { utils, createVm } = helper
+
   before(() => {
     helper.register('list', list)
     helper.register('cell', cell)
     helper.register('text', text)
   })
 
-  after(() => {
-    helper.reset()
-  })
-
   it('create simple list component', () => {
-    const vm = helper.createVm({
+    const vm = createVm({
       template:
       `<list>
         <cell v-for="char in lists">
@@ -30,8 +45,7 @@
       }
     })
 
-    // console.log(vm.$el)
     expect(vm.$el.tagName).to.be.equal('MAIN')
-    expect(vm.$el.className).to.be.equal('weex-list weex-list-wrapper')
+    expect(utils.toArray(vm.$el.classList)).to.include.members(['weex-list', 'weex-list-wrapper'])
   })
 })
diff --git a/html5/test/render/vue/helper.js b/html5/test/render/vue/helper.js
deleted file mode 100644
index 6d7144d..0000000
--- a/html5/test/render/vue/helper.js
+++ /dev/null
@@ -1,31 +0,0 @@
-const Vues = [
-  require('./vender/vue-2.0.0.js'),
-  require('./vender/vue-2.1.0.js')
-]
-
-/**
- * Describe tests for multiple versions of Vue.
- */
-export function multiDescribe (title, fn) {
-  return describe(title, () => {
-    Vues.forEach(Vue => {
-      let components = {}
-      Vue.config.isReservedTag = function () { return false }
-      describe(`Vue ${Vue.version}`, () => fn(Vue, {
-        register (name, component) {
-          components[name] = component
-        },
-        reset () {
-          components = {}
-        },
-        createVm (options = {}) {
-          options.components = components
-          return new Vue(options).$mount()
-        },
-        compile (template) {
-          return this.createVm({ template })
-        }
-      }))
-    })
-  })
-}
diff --git a/html5/test/render/vue/helper/env.js b/html5/test/render/vue/helper/env.js
new file mode 100644
index 0000000..5d8f90d
--- /dev/null
+++ b/html5/test/render/vue/helper/env.js
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import '../../../../render/vue/styles/reset.css'
+import '../../../../render/vue/styles/base.css'
+
+import '../../../../render/browser/render/gesture'
+
+/* istanbul ignore next */
+import '../../../../shared/arrayFrom'
+/* istanbul ignore next */
+import '../../../../shared/objectAssign'
+/* istanbul ignore next */
+import '../../../../shared/objectSetPrototypeOf'
+
+/* istanbul ignore next */
+import 'core-js/modules/es6.object.to-string'
+/* istanbul ignore next */
+import 'core-js/modules/es6.string.iterator'
+/* istanbul ignore next */
+import 'core-js/modules/web.dom.iterable'
+/* istanbul ignore next */
+import 'core-js/modules/es6.promise'
diff --git a/html5/test/render/vue/helper/index.js b/html5/test/render/vue/helper/index.js
new file mode 100644
index 0000000..a0952f4
--- /dev/null
+++ b/html5/test/render/vue/helper/index.js
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import './env'
+
+/* istanbul ignore next */
+import Vue from 'vue/dist/vue.esm.js'
+// import { base, scrollable, style, inputCommon } from '../../../render/vue/mixins'
+import { base, style } from '../../../../render/vue/mixins'
+import weex from '../../../../render/vue/env/weex'
+import { setVue } from '../../../../render/vue/env'
+
+import * as utils from './utils'
+
+/**
+ * Describe tests for current versions of Vue.
+ */
+export function init (title, fn) {
+  return describe(title, () => {
+    // let components = {}
+
+    before(function () {
+      const htmlRegex = /^html:/i
+      Vue.config.isReservedTag = tag => htmlRegex.test(tag)
+      Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
+
+      Vue.mixin(base)
+      Vue.mixin(style)
+
+      window.global = window
+      global.weex = weex
+      setVue(Vue)
+
+      window._no_remove_style_sheets = true
+    })
+
+    const helper = {
+
+      utils,
+      /**
+       * register a component.
+       * @param  {string} name,
+       * @param  {object} component.
+       */
+      register (name, component) {
+        global.weex.registerComponent(name, component)
+      },
+
+      /**
+       * create a vm instance of Vue.
+       * @param  {Object} options.
+       * @return {Vue} vue instance.
+       */
+      createVm (options = {}) {
+        // options.components = components
+        return new Vue(options).$mount()
+      },
+
+      /**
+       * [compile description]
+       * @param  {[type]} template [description]
+       * @return {[type]}          [description]
+       */
+      compile (template) {
+        return helper.createVm({ template })
+      }
+    }
+
+    /**
+     * describe a vue-render test for certain vue verson.
+     */
+    describe(`Vue ${Vue.version}`, () => {
+      fn(Vue, helper)
+    })
+  })
+}
diff --git a/html5/test/render/vue/helper/main.js b/html5/test/render/vue/helper/main.js
new file mode 100644
index 0000000..cff3ec8
--- /dev/null
+++ b/html5/test/render/vue/helper/main.js
@@ -0,0 +1,85 @@
+import weex from '../../../../render/vue/env/weex'
+import * as utils from './utils'
+
+const helper = {
+  roots: {},
+  _done: {},
+
+  utils,
+  /**
+   * register a component.
+   * @param  {string} name,
+   * @param  {object} component.
+   */
+  register (name, component) {
+    weex.registerComponent(name, component)
+    // components[name] = component
+  },
+
+  /**
+   * create a vm instance of Vue.
+   * @param  {Object} options.
+   * @return {Vue} vue instance.
+   */
+  createVm (options = {}, id) {
+    // options.components = components
+    let ct, root
+    const Vue = weex.__vue__
+    if (id) {
+      ct = document.createElement('div')
+      ct.id = `${id}-root`
+      ct.style.cssText = 'width:100%;height:300px;overflow:scroll;'
+      root = document.createElement('div')
+      root.id = id
+      ct.appendChild(root)
+      document.body.appendChild(ct)
+      this.roots[id] = root
+    }
+    return new Vue(options).$mount(root)
+  },
+
+  clearAll () {
+    const roots = this.roots
+    Object.keys(roots).forEach((id) => {
+      const ct = roots[id].parentNode
+      document.body.removeChild(ct)
+    })
+    this.roots = {}
+  },
+
+  clear (id) {
+    if (!id) {
+      return this.clearAll()
+    }
+    const roots = this.roots
+    const root = roots[id]
+    if (!root) { return }
+    const ct = roots[id].parentNode
+    document.body.removeChild(ct)
+  },
+
+  registerDone (id, cb) {
+    this._done[id] = cb
+  },
+
+  unregisterDone (id) {
+    if (!id) { return }
+    delete this._done[id]
+  },
+
+  done (id, ...args) {
+    const done = this._done[id]
+    done && done(...args)
+  },
+
+  /**
+   * [compile description]
+   * @param  {[type]} template [description]
+   * @return {[type]}          [description]
+   */
+  compile (template) {
+    return helper.createVm({ template })
+  }
+}
+
+export default helper
diff --git a/html5/test/render/vue/helper/mixin/done.js b/html5/test/render/vue/helper/mixin/done.js
new file mode 100644
index 0000000..d5a2b76
--- /dev/null
+++ b/html5/test/render/vue/helper/mixin/done.js
@@ -0,0 +1,9 @@
+import helper from '../main'
+
+export const doneMixin = {
+  methods: {
+    done (id, ...args) {
+      helper.done(id, ...args)
+    }
+  }
+}
diff --git a/html5/test/render/vue/helper/mixin/index.js b/html5/test/render/vue/helper/mixin/index.js
new file mode 100644
index 0000000..9c34780
--- /dev/null
+++ b/html5/test/render/vue/helper/mixin/index.js
@@ -0,0 +1 @@
+export * from './done'
diff --git a/html5/test/render/vue/helper/runtime.js b/html5/test/render/vue/helper/runtime.js
new file mode 100644
index 0000000..b6d0cfb
--- /dev/null
+++ b/html5/test/render/vue/helper/runtime.js
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import './env'
+
+/* istanbul ignore next */
+import Vue from 'vue/dist/vue.runtime.esm.js'
+// import { base, scrollable, style, inputCommon } from '../../../render/vue/mixins'
+import { base, style } from '../../../../render/vue/mixins'
+import weex from '../../../../render/vue/env/weex'
+import { setVue } from '../../../../render/vue/env'
+import helper from './main'
+import { doneMixin } from './mixin'
+
+/**
+ * Describe tests for current versions of Vue.
+ */
+export function init (title, fn) {
+  return describe(title, () => {
+    // let components = {}
+
+    before(function () {
+      const htmlRegex = /^html:/i
+      Vue.config.isReservedTag = tag => htmlRegex.test(tag)
+      Vue.config.parsePlatformTagName = tag => tag.replace(htmlRegex, '')
+
+      Vue.mixin(base)
+      Vue.mixin(style)
+
+      // for test only mixins.
+      Vue.mixin(doneMixin)
+
+      window.global = window
+      global.weex = weex
+      setVue(Vue)
+
+      window._no_remove_style_sheets = true
+    })
+
+    /**
+     * describe a vue-render test for certain vue verson.
+     */
+    describe(`Vue ${Vue.version}`, () => {
+      fn(Vue, helper)
+    })
+  })
+}
diff --git a/html5/test/render/vue/helper/utils.js b/html5/test/render/vue/helper/utils.js
new file mode 100644
index 0000000..73b8b0a
--- /dev/null
+++ b/html5/test/render/vue/helper/utils.js
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+/**
+ * @fileOverview utils for tests.
+ */
+
+export function toArray (list) {
+  if (!list) return []
+  return Array.prototype.slice.call(list)
+}
diff --git a/html5/test/render/vue/utils.js b/html5/test/render/vue/utils.js
deleted file mode 100644
index ddf1bb6..0000000
--- a/html5/test/render/vue/utils.js
+++ /dev/null
@@ -1,48 +0,0 @@
-import { expect } from 'chai'
-import * as utils from '../../../render/vue/utils'
-
-describe('utils', function () {
-  it('cached', () => {
-    expect(utils.cached).to.be.a('function')
-  })
-
-  it('camelize', () => {
-    const { camelize } = utils
-    expect(camelize).to.be.a('function')
-    expect(camelize('')).to.be.equal('')
-    expect(camelize('dispaly')).to.be.equal('dispaly')
-    expect(camelize('-webkit-transform')).to.be.equal('WebkitTransform')
-    expect(camelize('text-overflow')).to.be.equal('textOverflow')
-    expect(camelize('a-b-c-d')).to.be.equal('aBCD')
-  })
-
-  it('capitalize', () => {
-    const { capitalize } = utils
-    expect(capitalize).to.be.a('function')
-    expect(capitalize('')).to.be.equal('')
-    expect(capitalize('string')).to.be.equal('String')
-    expect(capitalize('string object')).to.be.equal('String object')
-    expect(capitalize('[string object]')).to.be.equal('[string object]')
-    expect(capitalize('I have an apple')).to.be.equal('I have an apple')
-  })
-
-  it('hyphenate', () => {
-    const { hyphenate } = utils
-    expect(hyphenate).to.be.a('function')
-    expect(hyphenate('')).to.be.equal('')
-    expect(hyphenate('dispaly')).to.be.equal('dispaly')
-    expect(hyphenate('WebkitTransform')).to.be.equal('webkit-transform')
-    expect(hyphenate('textOverflow')).to.be.equal('text-overflow')
-    expect(hyphenate('aBCD')).to.be.equal('a-b-c-d')
-  })
-
-  it('extend', () => {
-    const { extend } = utils
-    expect(extend).to.be.a('function')
-
-    const abc = { name: 'abc' }
-    expect(extend(abc)).to.deep.equal(abc)
-    expect(extend(abc, { name: 'x' }) === abc).to.be.true
-    expect(abc).to.deep.equal({ name: 'x' })
-  })
-})
diff --git a/html5/test/render/vue/utils/component.js b/html5/test/render/vue/utils/component.js
new file mode 100644
index 0000000..fd97d5b
--- /dev/null
+++ b/html5/test/render/vue/utils/component.js
@@ -0,0 +1,40 @@
+import { init } from '../helper/runtime'
+import div from '../../../../render/vue/components/div'
+
+import firstScreenAppearBundle from '../data/build/dotvue/first-screen-appear.js'
+
+init('utils component', (Vue, helper) => {
+  const spys = {
+    'appear': sinon.spy(),
+    'disappear': sinon.spy()
+  }
+  window._spy_first_screen_appear = function (evt) {
+    const spy = spys[evt.type]
+    spy && spy(evt)
+  }
+
+  const id = 'test-first-screen-appear'
+
+  before(() => {
+    helper.register('div', div)
+  })
+
+  describe('watchAppear', function () {
+    it('should work when mounted and updated.', function (done) {
+      helper.createVm(firstScreenAppearBundle, id)
+      helper.registerDone(id, () => {
+        const { appear: appearSpy, disappear: disappearSpy } = spys
+        expect(appearSpy.callCount).to.equal(2)
+        expect(disappearSpy.callCount).to.equal(1)
+        expect(appearSpy.args[0][0].type).to.equal('appear')
+        expect(appearSpy.args[1][0].type).to.equal('appear')
+        expect(disappearSpy.args[0][0].type).to.equal('disappear')
+        expect(appearSpy.args[0][0].direction).to.not.exist
+        expect(appearSpy.args[1][0].direction).to.not.exist
+        expect(disappearSpy.args[0][0].direction).to.not.exist
+        helper.unregisterDone(id)
+        done()
+      })
+    })
+  })
+})
diff --git a/html5/test/render/vue/utils/func.js b/html5/test/render/vue/utils/func.js
new file mode 100644
index 0000000..7c19226
--- /dev/null
+++ b/html5/test/render/vue/utils/func.js
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import * as utils from '../../../../render/vue/utils'
+
+describe('utils', function () {
+  describe('function', function () {
+    it('cached', function () {
+      expect(utils.cached).to.be.a('function')
+    })
+
+    it('camelize', function () {
+      const { camelize } = utils
+      expect(camelize).to.be.a('function')
+      expect(camelize('')).to.be.equal('')
+      expect(camelize('dispaly')).to.be.equal('dispaly')
+      expect(camelize('-webkit-transform')).to.be.equal('WebkitTransform')
+      expect(camelize('text-overflow')).to.be.equal('textOverflow')
+      expect(camelize('a-b-c-d')).to.be.equal('aBCD')
+    })
+
+    it('capitalize', function () {
+      const { capitalize } = utils
+      expect(capitalize).to.be.a('function')
+      expect(capitalize('')).to.be.equal('')
+      expect(capitalize('string')).to.be.equal('String')
+      expect(capitalize('string object')).to.be.equal('String object')
+      expect(capitalize('[string object]')).to.be.equal('[string object]')
+      expect(capitalize('I have an apple')).to.be.equal('I have an apple')
+    })
+
+    it('hyphenate', function () {
+      const { hyphenate } = utils
+      expect(hyphenate).to.be.a('function')
+      expect(hyphenate('')).to.be.equal('')
+      expect(hyphenate('dispaly')).to.be.equal('dispaly')
+      expect(hyphenate('WebkitTransform')).to.be.equal('webkit-transform')
+      expect(hyphenate('textOverflow')).to.be.equal('text-overflow')
+      expect(hyphenate('aBCD')).to.be.equal('a-b-c-d')
+    })
+
+    it('extend', function () {
+      const { extend } = utils
+      expect(extend).to.be.a('function')
+
+      const abc = { name: 'abc' }
+      expect(extend(abc)).to.deep.equal(abc)
+      expect(extend(abc, { name: 'x' }) === abc).to.be.true
+      expect(abc).to.deep.equal({ name: 'x' })
+    })
+  })
+})
diff --git a/html5/test/render/vue/utils/style.js b/html5/test/render/vue/utils/style.js
new file mode 100644
index 0000000..5869b49
--- /dev/null
+++ b/html5/test/render/vue/utils/style.js
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import {
+  autoPrefix,
+  // normalizeStyle,
+  normalizeString,
+  normalizeNumber,
+  normalizeUnitsNum
+} from '../../../../render/vue/utils/style'
+import { init } from '../../../../render/vue/env/viewport'
+
+describe('style', function () {
+  // const rect = document.documentElement.getBoundingClientRect()
+  // const info = {}
+  const { scale, dpr } = init()
+
+  it('should normalize units numbers', function () {
+    expect(normalizeUnitsNum('100px')).to.equal(100 * scale + 'px')
+    expect(normalizeUnitsNum('100')).to.equal(100 * scale + 'px')
+    expect(normalizeUnitsNum('100wx')).to.equal(100 * scale * dpr + 'px')
+    expect(normalizeUnitsNum('20wm')).to.equal('')
+  })
+
+  it('should normalize number style vals', function () {
+    expect(normalizeNumber('width', 10)).to.equal(10 * scale + 'px')
+    expect(normalizeNumber('width', 1.2)).to.equal(1.2 * scale + 'px')
+  })
+
+  it('should normalize string style vals', function () {
+    expect(normalizeString('width', '100%')).to.equal('100%')
+    expect(normalizeString('transform', 'translate3d(10px, 10px, 10px)'))
+      .to.equal(`translate3d(${10 * scale}px, ${10 * scale}px, ${10 * scale}px)`)
+    expect(normalizeString('border-bottom', '4px solid #112233'))
+      .to.equal(`${4 * scale}px solid #112233`)
+    expect(normalizeString('border-left', '4wx dotted red'))
+      .to.equal(`${4 * scale * dpr}px dotted red`)
+  })
+
+  it('should normalize style object', function () {
+    //
+  })
+})
+
+describe('autoPrefix', function () {
+  const style = {
+    width: '200px',
+    flexDirection: 'row',
+    transform: 'translate3d(100px, 100px, 0)'
+  }
+
+  it('should add prefix for styles.', function () {
+    const res = autoPrefix(style)
+    const {
+      WebkitBoxDirection,
+      WebkitBoxOrient,
+      WebkitFlexDirection,
+      flexDirection,
+      WebkitTransform,
+      transform,
+      width
+    } = res
+    expect(WebkitBoxDirection).to.equal('normal')
+    expect(WebkitBoxOrient).to.equal('horizontal')
+    expect(WebkitFlexDirection).to.equal('row')
+    expect(flexDirection).to.equal('row')
+    expect(WebkitTransform).to.equal('translate3d(100px, 100px, 0)')
+    expect(transform).to.equal('translate3d(100px, 100px, 0)')
+    expect(width).to.equal('200px')
+  })
+})
diff --git a/html5/test/render/vue/validator/check.js b/html5/test/render/vue/validator/check.js
index e38439c..1c660f7 100644
--- a/html5/test/render/vue/validator/check.js
+++ b/html5/test/render/vue/validator/check.js
@@ -1,4 +1,21 @@
-import { expect } from 'chai'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as check from '../../../../render/vue/validator/check'
 
 describe('check', () => {
diff --git a/html5/test/render/vue/validator/index.js b/html5/test/render/vue/validator/index.js
index 5df9456..3525dc6 100644
--- a/html5/test/render/vue/validator/index.js
+++ b/html5/test/render/vue/validator/index.js
@@ -1,4 +1,21 @@
-import { expect } from 'chai'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as validator from '../../../../render/vue/validator'
 
 describe('validator', function () {
diff --git a/html5/test/render/vue/validator/prop.js b/html5/test/render/vue/validator/prop.js
index 5384c54..e899f87 100644
--- a/html5/test/render/vue/validator/prop.js
+++ b/html5/test/render/vue/validator/prop.js
@@ -1,4 +1,21 @@
-import { expect } from 'chai'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as prop from '../../../../render/vue/validator/prop'
 
 describe('check property value', () => {
diff --git a/html5/test/render/vue/validator/style.js b/html5/test/render/vue/validator/style.js
index ae91d4b..aed2430 100644
--- a/html5/test/render/vue/validator/style.js
+++ b/html5/test/render/vue/validator/style.js
@@ -1,4 +1,21 @@
-import { expect } from 'chai'
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import * as style from '../../../../render/vue/validator/style'
 
 describe('check style value', () => {
diff --git a/html5/test/render/vue/vender/vue-2.0.0.js b/html5/test/render/vue/vender/vue-2.0.0.js
deleted file mode 100755
index 437f54d..0000000
--- a/html5/test/render/vue/vender/vue-2.0.0.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*!
- * Vue.js v2.0.0
- * (c) 2014-2016 Evan You
- * Released under the MIT License.
- */
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function t(e){var t=parseFloat(e,10);return t||0===t?t:e}function n(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function r(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function i(e,t){return hr.call(e,t)}function o(e){return"string"==typeof e||"number"==typeof e}function a(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function s(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function c(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function u(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return null!==e&&"object"==typeof e}function f(e){return $r.call(e)===wr}function d(e){for(var t={},n=0;n<e.length;n++)e[n]&&u(t,e[n]);return t}function p(){}function v(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function h(e,t){return e==t||!(!l(e)||!l(t))&&JSON.stringify(e)===JSON.stringify(t)}function m(e,t){for(var n=0;n<e.length;n++)if(h(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function y(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function _(e){if(!kr.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function b(e){return/native code/.test(e.toString())}function $(e){Rr.target&&Ir.push(Rr.target),Rr.target=e}function w(){Rr.target=Ir.pop()}function C(){Fr.length=0,Br={},Hr=Ur=!1}function x(){for(Ur=!0,Fr.sort(function(e,t){return e.id-t.id}),zr=0;zr<Fr.length;zr++){var e=Fr[zr],t=e.id;Br[t]=null,e.run()}Nr&&xr.devtools&&Nr.emit("flush"),C()}function k(e){var t=e.id;if(null==Br[t]){if(Br[t]=!0,Ur){for(var n=Fr.length-1;n>=0&&Fr[n].id>e.id;)n--;Fr.splice(Math.max(n,zr)+1,0,e)}else Fr.push(e);Hr||(Hr=!0,Mr(x))}}function A(e,t){var n,r;t||(t=qr,t.clear());var i=Array.isArray(e),o=l(e);if((i||o)&&Object.isExtensible(e)){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(i)for(n=e.length;n--;)A(e[n],t);else if(o)for(r=Object.keys(e),n=r.length;n--;)A(e[r[n]],t)}}function O(e,t){e.__proto__=t}function T(e,t,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];y(e,o,t[o])}}function S(e){if(l(e)){var t;return i(e,"__ob__")&&e.__ob__ instanceof Yr?t=e.__ob__:Gr.shouldConvert&&!xr._isServer&&(Array.isArray(e)||f(e))&&Object.isExtensible(e)&&!e._isVue&&(t=new Yr(e)),t}}function E(e,t,n,r){var i=new Rr,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var a=o&&o.get,s=o&&o.set,c=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;if(Rr.target&&(i.depend(),c&&c.dep.depend(),Array.isArray(t)))for(var r=void 0,o=0,s=t.length;o<s;o++)r=t[o],r&&r.__ob__&&r.__ob__.dep.depend();return t},set:function(t){var r=a?a.call(e):n;t!==r&&(s?s.call(e,t):n=t,c=S(t),i.notify())}})}}function j(e,t,n){if(Array.isArray(e))return e.splice(t,1,n),n;if(i(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(E(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function L(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||i(e,t)&&(delete e[t],n&&n.dep.notify())}function D(e){e._watchers=[],N(e),M(e),P(e),I(e),F(e)}function N(e){var t=e.$options.props;if(t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),i=!e.$parent;Gr.shouldConvert=i;for(var o=function(i){var o=r[i];E(e,o,je(o,t,n,e))},a=0;a<r.length;a++)o(a);Gr.shouldConvert=!0}}function M(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},f(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&i(r,n[o])||U(e,n[o]);S(t),t.__ob__&&t.__ob__.vmCount++}function P(e){var t=e.$options.computed;if(t)for(var n in t){var r=t[n];"function"==typeof r?(Qr.get=R(r,e),Qr.set=p):(Qr.get=r.get?r.cache!==!1?R(r.get,e):s(r.get,e):p,Qr.set=r.set?s(r.set,e):p),Object.defineProperty(e,n,Qr)}}function R(e,t){var n=new Jr(t,e,p,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Rr.target&&n.depend(),n.value}}function I(e){var t=e.$options.methods;if(t)for(var n in t)null!=t[n]&&(e[n]=s(t[n],e))}function F(e){var t=e.$options.watch;if(t)for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)B(e,n,r[i]);else B(e,n,r)}}function B(e,t,n){var r;f(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function H(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=j,e.prototype.$delete=L,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var i=new Jr(r,e,t,n);return n.immediate&&t.call(r,i.value),function(){i.teardown()}}}function U(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function z(e){var t=new Xr(e.tag,e.data,e.children,e.text,e.elm,e.ns,e.context,e.componentOptions);return t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function V(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=z(e[n]);return t}function J(e,t,n){if(o(e))return[q(e)];if(Array.isArray(e)){for(var r=[],i=0,a=e.length;i<a;i++){var s=e[i],c=r[r.length-1];Array.isArray(s)?r.push.apply(r,J(s,t,i)):o(s)?c&&c.text?c.text+=String(s):""!==s&&r.push(q(s)):s instanceof Xr&&(s.text&&c&&c.text?c.text+=s.text:(t&&K(s,t),s.tag&&null==s.key&&null!=n&&(s.key="__vlist_"+n+"_"+i+"__"),r.push(s)))}return r}}function q(e){return new Xr(void 0,void 0,void 0,String(e))}function K(e,t){if(e.tag&&!e.ns&&(e.ns=t,e.children))for(var n=0,r=e.children.length;n<r;n++)K(e.children[n],t)}function W(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function Z(e,t,n){var r=e[t];if(r){var i=e.__injected||(e.__injected={});i[t]||(i[t]=!0,e[t]=function(){r.apply(this,arguments),n.apply(this,arguments)})}else e[t]=n}function G(e,t,n,r){var i,o,a,s,c,u;for(i in e)if(o=e[i],a=t[i],o)if(a){if(o!==a)if(Array.isArray(a)){a.length=o.length;for(var l=0;l<a.length;l++)a[l]=o[l];e[i]=a}else a.fn=o,e[i]=a}else u="!"===i.charAt(0),c=u?i.slice(1):i,Array.isArray(o)?n(c,o.invoker=Y(o),u):(o.invoker||(s=o,o=e[i]={},o.fn=s,o.invoker=Q(o)),n(c,o.invoker,u));else;for(i in t)e[i]||(c="!"===i.charAt(0)?i.slice(1):i,r(c,t[i].invoker))}function Y(e){return function(t){for(var n=arguments,r=1===arguments.length,i=0;i<e.length;i++)r?e[i](t):e[i].apply(null,n)}}function Q(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function X(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function ee(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=ei),te(n,"beforeMount"),n._watcher=new Jr(n,function(){n._update(n._render(),t)},p),t=!1,n.$root===n&&(n._isMounted=!0,te(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&te(n,"beforeUpdate");var r=n.$el,i=ti;ti=n;var o=n._vnode;n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t),ti=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el),n._isMounted&&te(n,"updated")},e.prototype._updateFromParent=function(e,t,n,r){var i=this,o=!(!i.$options._renderChildren&&!r);if(i.$options._parentVnode=n,i.$options._renderChildren=r,e&&i.$options.props){Gr.shouldConvert=!1;for(var a=i.$options._propKeys||[],s=0;s<a.length;s++){var c=a[s];i[c]=je(c,i.$options.props,e,i)}Gr.shouldConvert=!0}if(t){var u=i.$options._parentListeners;i.$options._parentListeners=t,i._updateListeners(t,u)}o&&(i.$slots=ye(r,i._renderContext),i.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){te(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||r(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,te(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null)}}}function te(e,t){var n=e.$options[t];if(n)for(var r=0,i=n.length;r<i;r++)n[r].call(e);e.$emit("hook:"+t)}function ne(e,t,n,r,i){if(e&&(l(e)&&(e=we.extend(e)),"function"==typeof e)){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=ue(e,function(){n.$forceUpdate()}),!e)return;t=t||{};var o=le(t,e);if(e.options.functional)return re(e,o,t,n,r);var a=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),de(t);var s=e.options.name||i,c=new Xr("vue-component-"+e.cid+(s?"-"+s:""),t,void 0,void 0,void 0,void 0,n,{Ctor:e,propsData:o,listeners:a,tag:i,children:r});return c}}function re(e,t,n,r,i){var o={},a=e.options.props;if(a)for(var c in a)o[c]=je(c,a,t);return e.options.render.call(null,s(ve,{_self:Object.create(r)}),{props:o,data:n,parent:r,children:J(i),slots:function(){return ye(i,r)}})}function ie(e,t){var n=e.componentOptions,r={_isComponent:!0,parent:t,propsData:n.propsData,_componentTag:n.tag,_parentVnode:e,_parentListeners:n.listeners,_renderChildren:n.children},i=e.data.inlineTemplate;return i&&(r.render=i.render,r.staticRenderFns=i.staticRenderFns),new n.Ctor(r)}function oe(e,t){if(!e.child||e.child._isDestroyed){var n=e.child=ie(e,ti);n.$mount(t?e.elm:void 0,t)}}function ae(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function se(e){e.child._isMounted||(e.child._isMounted=!0,te(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,te(e.child,"activated"))}function ce(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,te(e.child,"deactivated")):e.child.$destroy())}function ue(e,t){if(!e.requested){e.requested=!0;var n=e.pendingCallbacks=[t],r=!0,i=function(t){if(l(t)&&(t=we.extend(t)),e.resolved=t,!r)for(var i=0,o=n.length;i<o;i++)n[i](t)},o=function(e){},a=e(i,o);return a&&"function"==typeof a.then&&!e.resolved&&a.then(i,o),r=!1,e.resolved}e.pendingCallbacks.push(t)}function le(e,t){var n=t.options.props;if(n){var r={},i=e.attrs,o=e.props,a=e.domProps;if(i||o||a)for(var s in n){var c=br(s);fe(r,o,s,c,!0)||fe(r,i,s,c)||fe(r,a,s,c)}return r}}function fe(e,t,n,r,o){if(t){if(i(t,n))return e[n]=t[n],o||delete t[n],!0;if(i(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function de(e){e.hook||(e.hook={});for(var t=0;t<ri.length;t++){var n=ri[t],r=e.hook[n],i=ni[n];e.hook[n]=r?pe(i,r):i}}function pe(e,t){return function(n,r){e(n,r),t(n,r)}}function ve(e,t,n){return t&&(Array.isArray(t)||"object"!=typeof t)&&(n=t,t=void 0),he(this._self,e,t,n)}function he(e,t,n,r){if(!n||!n.__ob__){if(!t)return ei();if("string"==typeof t){var i,o=xr.getTagNamespace(t);return xr.isReservedTag(t)?new Xr(t,n,J(r,o),void 0,void 0,o,e):(i=Ee(e.$options,"components",t))?ne(i,n,e,r,t):new Xr(t,n,J(r,o),void 0,void 0,o,e)}return ne(t,n,e,r)}}function me(e){e.$vnode=null,e._vnode=null,e._staticTrees=null,e._renderContext=e.$options._parentVnode&&e.$options._parentVnode.context,e.$slots=ye(e.$options._renderChildren,e._renderContext),e.$createElement=s(ve,e),e.$options.el&&e.$mount(e.$options.el)}function ge(n){n.prototype.$nextTick=function(e){Mr(e,this)},n.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,i=t._parentVnode;if(e._isMounted)for(var o in e.$slots)e.$slots[o]=V(e.$slots[o]);r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=i;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(xr.errorHandler)xr.errorHandler.call(null,t,e);else{if(xr._isServer)throw t;setTimeout(function(){throw t},0)}a=e._vnode}return a instanceof Xr||(a=ei()),a.parent=i,a},n.prototype._h=ve,n.prototype._s=e,n.prototype._n=t,n.prototype._e=ei,n.prototype._q=h,n.prototype._i=m,n.prototype._m=function(e,t){var n=this._staticTrees[e];if(n&&!t)return Array.isArray(n)?V(n):z(n);if(n=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),Array.isArray(n))for(var r=0;r<n.length;r++)n[r].isStatic=!0,n[r].key="__static__"+e+"_"+r;else n.isStatic=!0,n.key="__static__"+e;return n};var r=function(e){return e};n.prototype._f=function(e){return Ee(this.$options,"filters",e,!0)||r},n.prototype._l=function(e,t){var n,r,i,o,a;if(Array.isArray(e))for(n=new Array(e.length),r=0,i=e.length;r<i;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(l(e))for(o=Object.keys(e),n=new Array(o.length),r=0,i=o.length;r<i;r++)a=o[r],n[r]=t(e[a],a,r);return n},n.prototype._t=function(e,t){var n=this.$slots[e];return n||t},n.prototype._b=function(e,t,n){if(t)if(l(t)){Array.isArray(t)&&(t=d(t));for(var r in t)if("class"===r||"style"===r)e[r]=t[r];else{var i=n||xr.mustUseProp(r)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[r]=t[r]}}else;return e},n.prototype._k=function(e){return xr.keyCodes[e]}}function ye(e,t){var n={};if(!e)return n;for(var r,i,o=J(e)||[],a=[],s=0,c=o.length;s<c;s++)if(i=o[s],i.context===t&&i.data&&(r=i.data.slot)){var u=n[r]||(n[r]=[]);"template"===i.tag?u.push.apply(u,i.children):u.push(i)}else a.push(i);return a.length&&(1!==a.length||" "!==a[0].text&&!a[0].isComment)&&(n.default=a),n}function _e(e){e._events=Object.create(null);var t=e.$options._parentListeners,n=s(e.$on,e),r=s(e.$off,e);e._updateListeners=function(e,t){G(e,t||{},n,r)},t&&e._updateListeners(t)}function be(e){e.prototype.$on=function(e,t){var n=this;return(n._events[e]||(n._events[e]=[])).push(t),n},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var i,o=r.length;o--;)if(i=r[o],i===t||i.fn===t){r.splice(o,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?c(n):n;for(var r=c(arguments,1),i=0,o=n.length;i<o;i++)n[i].apply(t,r)}return t}}function $e(e){function t(e,t){var r=e.$options=Object.create(n(e));r.parent=t.parent,r.propsData=t.propsData,r._parentVnode=t._parentVnode,r._parentListeners=t._parentListeners,r._renderChildren=t._renderChildren,r._componentTag=t._componentTag,t.render&&(r.render=t.render,r.staticRenderFns=t.staticRenderFns)}function n(e){var t=e.constructor,n=t.options;if(t.super){var r=t.super.options,i=t.superOptions;r!==i&&(t.superOptions=r,n=t.options=Se(r,t.extendOptions),n.name&&(n.components[n.name]=t))}return n}e.prototype._init=function(e){var r=this;r._uid=ii++,r._isVue=!0,e&&e._isComponent?t(r,e):r.$options=Se(n(r),e||{},r),r._renderProxy=r,r._self=r,X(r),_e(r),te(r,"beforeCreate"),D(r),te(r,"created"),me(r)}}function we(e){this._init(e)}function Ce(e,t){var n,r,o;for(n in t)r=e[n],o=t[n],i(e,n)?l(r)&&l(o)&&Ce(r,o):j(e,n,o);return e}function xe(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function ke(e,t){var n=Object.create(e||null);return t?u(n,t):n}function Ae(e){if(e.components){var t,n=e.components;for(var r in n){var i=r.toLowerCase();vr(i)||xr.isReservedTag(i)||(t=n[r],f(t)&&(n[r]=we.extend(t)))}}}function Oe(e){var t=e.props;if(t){var n,r,i,o={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(i=gr(r),o[i]={type:null});else if(f(t))for(var a in t)r=t[a],i=gr(a),o[i]=f(r)?r:{type:r};e.props=o}}function Te(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function Se(e,t,n){function r(r){var i=si[r]||ci;l[r]=i(e[r],t[r],n,r)}Ae(t),Oe(t),Te(t);var o=t.extends;if(o&&(e="function"==typeof o?Se(e,o.options,n):Se(e,o,n)),t.mixins)for(var a=0,s=t.mixins.length;a<s;a++){var c=t.mixins[a];c.prototype instanceof we&&(c=c.options),e=Se(e,c,n)}var u,l={};for(u in e)r(u);for(u in t)i(e,u)||r(u);return l}function Ee(e,t,n,r){if("string"==typeof n){var i=e[t],o=i[n]||i[gr(n)]||i[yr(gr(n))];return o}}function je(e,t,n,r){var o=t[e],a=!i(n,e),s=n[e];if("Boolean"===De(o.type)&&(a&&!i(o,"default")?s=!1:""!==s&&s!==br(e)||(s=!0)),void 0===s){s=Le(r,o,e);var c=Gr.shouldConvert;Gr.shouldConvert=!0,S(s),Gr.shouldConvert=c}return s}function Le(e,t,n){if(i(t,"default")){var r=t.default;return l(r),"function"==typeof r&&t.type!==Function?r.call(e):r}}function De(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function Ne(e){e.use=function(e){if(!e.installed){var t=c(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function Me(e){e.mixin=function(t){e.options=Se(e.options,t)}}function Pe(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=0===n.cid;if(r&&e._Ctor)return e._Ctor;var i=e.name||n.options.name,o=function(e){this._init(e)};return o.prototype=Object.create(n.prototype),o.prototype.constructor=o,o.cid=t++,o.options=Se(n.options,e),o.super=n,o.extend=n.extend,xr._assetTypes.forEach(function(e){o[e]=n[e]}),i&&(o.options.components[i]=o),o.superOptions=n.options,o.extendOptions=e,r&&(e._Ctor=o),o}}function Re(e){xr._assetTypes.forEach(function(t){e[t]=function(n,r){return r?("component"===t&&f(r)&&(r.name=r.name||n,r=e.extend(r)),"directive"===t&&"function"==typeof r&&(r={bind:r,update:r}),this.options[t+"s"][n]=r,r):this.options[t+"s"][n]}})}function Ie(e){var t={};t.get=function(){return xr},Object.defineProperty(e,"config",t),e.util=ui,e.set=j,e.delete=L,e.nextTick=Mr,e.options=Object.create(null),xr._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),u(e.options.components,fi),Ne(e),Me(e),Pe(e),Re(e)}function Fe(e){for(var t=e.data,n=e,r=e;r.child;)r=r.child._vnode,r.data&&(t=Be(r.data,t));for(;n=n.parent;)n.data&&(t=Be(t,n.data));return He(t)}function Be(e,t){return{staticClass:Ue(e.staticClass,t.staticClass),class:e.class?[e.class,t.class]:t.class}}function He(e){var t=e.class,n=e.staticClass;return n||t?Ue(n,ze(t)):""}function Ue(e,t){return e?t?e+" "+t:e:t||""}function ze(e){var t="";if(!e)return t;if("string"==typeof e)return e;if(Array.isArray(e)){for(var n,r=0,i=e.length;r<i;r++)e[r]&&(n=ze(e[r]))&&(t+=n+" ");return t.slice(0,-1)}if(l(e)){for(var o in e)e[o]&&(t+=o+" ");return t.slice(0,-1)}return t}function Ve(e){return ki(e)?"svg":"math"===e?"math":void 0}function Je(e){if(!Or)return!0;if(Oi(e))return!1;if(e=e.toLowerCase(),null!=Ti[e])return Ti[e];var t=document.createElement(e);return e.indexOf("-")>-1?Ti[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Ti[e]=/HTMLUnknownElement/.test(t.toString())}function qe(e){if("string"==typeof e){if(e=document.querySelector(e),!e)return document.createElement("div")}return e}function Ke(e){return document.createElement(e)}function We(e,t){return document.createElementNS(bi[e],t)}function Ze(e){return document.createTextNode(e)}function Ge(e){return document.createComment(e)}function Ye(e,t,n){e.insertBefore(t,n)}function Qe(e,t){e.removeChild(t)}function Xe(e,t){e.appendChild(t)}function et(e){return e.parentNode}function tt(e){return e.nextSibling}function nt(e){return e.tagName}function rt(e,t){e.textContent=t}function it(e){return e.childNodes}function ot(e,t,n){e.setAttribute(t,n)}function at(e,t){var n=e.data.ref;if(n){var i=e.context,o=e.child||e.elm,a=i.$refs;t?Array.isArray(a[n])?r(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])?a[n].push(o):a[n]=[o]:a[n]=o}}function st(e){return null==e}function ct(e){return null!=e}function ut(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function lt(e,t,n){var r,i,o={};for(r=t;r<=n;++r)i=e[r].key,ct(i)&&(o[i]=r);return o}function ft(e){function t(e){return new Xr(C.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=C.parentNode(e);C.removeChild(t,e)}function i(e,t,n){var r,i=e.data;if(e.isRootInsert=!n,ct(i)&&(ct(r=i.hook)&&ct(r=r.init)&&r(e),ct(r=e.child)))return u(e,t),e.elm;var o=e.children,s=e.tag;return ct(s)?(e.elm=e.ns?C.createElementNS(e.ns,s):C.createElement(s),l(e),a(e,o,t),ct(i)&&c(e,t)):e.isComment?e.elm=C.createComment(e.text):e.elm=C.createTextNode(e.text),e.elm}function a(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)C.appendChild(e.elm,i(t[r],n,!0));else o(e.text)&&C.appendChild(e.elm,C.createTextNode(e.text))}function s(e){for(;e.child;)e=e.child._vnode;return ct(e.tag)}function c(e,t){for(var n=0;n<$.create.length;++n)$.create[n](Li,e);_=e.data.hook,ct(_)&&(_.create&&_.create(Li,e),_.insert&&t.push(e))}function u(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,s(e)?(c(e,t),l(e)):(at(e),t.push(e))}function l(e){var t;ct(t=e.context)&&ct(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,""),ct(t=ti)&&t!==e.context&&ct(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,"")}function f(e,t,n,r,o,a){for(;r<=o;++r)C.insertBefore(e,i(n[r],a),t)}function d(e){var t,n,r=e.data;if(ct(r))for(ct(t=r.hook)&&ct(t=t.destroy)&&t(e),t=0;t<$.destroy.length;++t)$.destroy[t](e);if(ct(t=e.child)&&!r.keepAlive&&d(t._vnode),ct(t=e.children))for(n=0;n<e.children.length;++n)d(e.children[n])}function p(e,t,n,r){for(;n<=r;++n){var i=t[n];ct(i)&&(ct(i.tag)?(v(i),d(i)):C.removeChild(e,i.elm))}}function v(e,t){if(t||ct(e.data)){var i=$.remove.length+1;for(t?t.listeners+=i:t=n(e.elm,i),ct(_=e.child)&&ct(_=_._vnode)&&ct(_.data)&&v(_,t),_=0;_<$.remove.length;++_)$.remove[_](e,t);ct(_=e.data.hook)&&ct(_=_.remove)?_(e,t):t()}else r(e.elm)}function h(e,t,n,r,o){for(var a,s,c,u,l=0,d=0,v=t.length-1,h=t[0],g=t[v],y=n.length-1,_=n[0],b=n[y],$=!o;l<=v&&d<=y;)st(h)?h=t[++l]:st(g)?g=t[--v]:ut(h,_)?(m(h,_,r),h=t[++l],_=n[++d]):ut(g,b)?(m(g,b,r),g=t[--v],b=n[--y]):ut(h,b)?(m(h,b,r),$&&C.insertBefore(e,h.elm,C.nextSibling(g.elm)),h=t[++l],b=n[--y]):ut(g,_)?(m(g,_,r),$&&C.insertBefore(e,g.elm,h.elm),g=t[--v],_=n[++d]):(st(a)&&(a=lt(t,l,v)),s=ct(_.key)?a[_.key]:null,st(s)?(C.insertBefore(e,i(_,r),h.elm),_=n[++d]):(c=t[s],c.tag!==_.tag?(C.insertBefore(e,i(_,r),h.elm),_=n[++d]):(m(c,_,r),t[s]=void 0,$&&C.insertBefore(e,_.elm,h.elm),_=n[++d])));l>v?(u=st(n[y+1])?null:n[y+1].elm,f(e,u,n,d,y,r)):d>y&&p(e,t,l,v)}function m(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&t.isCloned)return void(t.elm=e.elm);var i,o,a=ct(i=t.data);a&&ct(o=i.hook)&&ct(i=o.prepatch)&&i(e,t);var c=t.elm=e.elm,u=e.children,l=t.children;if(a&&s(t)){for(i=0;i<$.update.length;++i)$.update[i](e,t);ct(o)&&ct(i=o.update)&&i(e,t)}if(st(t.text)?ct(u)&&ct(l)?u!==l&&h(c,u,l,n,r):ct(l)?(ct(e.text)&&C.setTextContent(c,""),f(c,null,l,0,l.length-1,n)):ct(u)?p(c,u,0,u.length-1):ct(e.text)&&C.setTextContent(c,""):e.text!==t.text&&C.setTextContent(c,t.text),a){for(i=0;i<$.postpatch.length;++i)$.postpatch[i](e,t);ct(o)&&ct(i=o.postpatch)&&i(e,t)}}}function g(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function y(e,t,n){t.elm=e;var r=t.tag,i=t.data,o=t.children;if(ct(i)&&(ct(_=i.hook)&&ct(_=_.init)&&_(t,!0),ct(_=t.child)))return u(t,n),!0;if(ct(r)){if(ct(o)){var s=C.childNodes(e);if(s.length){var l=!0;if(s.length!==o.length)l=!1;else for(var f=0;f<o.length;f++)if(!y(s[f],o[f],n)){l=!1;break}if(!l)return!1}else a(t,o,n)}ct(i)&&c(t,n)}return!0}var _,b,$={},w=e.modules,C=e.nodeOps;for(_=0;_<Di.length;++_)for($[Di[_]]=[],b=0;b<w.length;++b)void 0!==w[b][Di[_]]&&$[Di[_]].push(w[b][Di[_]]);return function(e,n,r,o){var a,c,u=!1,l=[];if(e){var f=ct(e.nodeType);if(!f&&ut(e,n))m(e,n,l,o);else{if(f){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&y(e,n,l))return g(n,l,!0),e;e=t(e)}if(a=e.elm,c=C.parentNode(a),i(n,l),n.parent&&(n.parent.elm=n.elm,s(n)))for(var v=0;v<$.create.length;++v)$.create[v](Li,n.parent);null!==c?(C.insertBefore(c,n.elm,C.nextSibling(a)),p(c,[e],0,0)):ct(e.tag)&&d(e)}}else u=!0,i(n,l);return g(n,l,u),n.elm}}function dt(e,t,n){var r=t.data.directives;if(r)for(var i=0;i<r.length;i++){var o=r[i],a=Ee(t.context.$options,"directives",o.name,!0);if(a){var s=e&&e.data.directives;s&&(o.oldValue=s[i].value),o.modifiers||(o.modifiers=Mi),n(a,o)}}}function pt(e,t,n){dt(e,t,function(r,i){vt(r,i,n,t,e)})}function vt(e,t,n,r,i){var o=e&&e[n];o&&o(r.elm,t,r,i)}function ht(e,t){if(e.data.attrs||t.data.attrs){var n,r,i,o=t.elm,a=e.data.attrs||{},s=t.data.attrs||{};s.__ob__&&(s=t.data.attrs=u({},s));for(n in s)r=s[n],i=a[n],i!==r&&mt(o,n,r);for(n in a)null==s[n]&&(gi(n)?o.removeAttributeNS(mi,yi(n)):vi(n)||o.removeAttribute(n))}}function mt(e,t,n){hi(t)?_i(n)?e.removeAttribute(t):e.setAttribute(t,t):vi(t)?e.setAttribute(t,_i(n)||"false"===n?"false":"true"):gi(t)?_i(n)?e.removeAttributeNS(mi,yi(t)):e.setAttributeNS(mi,t,n):_i(n)?e.removeAttribute(t):e.setAttribute(t,n)}function gt(e,t){var n=t.elm,r=t.data,i=e.data;if(r.staticClass||r.class||i&&(i.staticClass||i.class)){var o=Fe(t),a=n._transitionClasses;a&&(o=Ue(o,ze(a))),o!==n._prevClass&&(n.setAttribute("class",o),n._prevClass=o)}}function yt(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{},i=t.elm._v_add||(t.elm._v_add=function(e,n,r){t.elm.addEventListener(e,n,r)}),o=t.elm._v_remove||(t.elm._v_remove=function(e,n){t.elm.removeEventListener(e,n)});G(n,r,i,o)}}function _t(e,t){if(e.data.domProps||t.data.domProps){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};a.__ob__&&(a=t.data.domProps=u({},a));for(n in o)null==a[n]&&(i[n]=void 0);for(n in a)if("textContent"!==n&&"innerHTML"!==n||!t.children||(t.children.length=0),r=a[n],"value"===n){i._value=r;var s=null==r?"":String(r);i.value!==s&&(i.value=s)}else i[n]=r}}function bt(e,t){if(e.data&&e.data.style||t.data.style){var n,r,i=t.elm,o=e.data.style||{},a=t.data.style||{};if("string"==typeof a)return void(i.style.cssText=a);var s=a.__ob__;Array.isArray(a)&&(a=t.data.style=d(a)),s&&(a=t.data.style=u({},a));for(r in o)a[r]||(i.style[Ui(r)]="");for(r in a)n=a[r],n!==o[r]&&(i.style[Ui(r)]=null==n?"":n)}}function $t(e,t){if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+e.getAttribute("class")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function wt(e,t){if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+e.getAttribute("class")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Ct(e){Yi(function(){Yi(e)})}function xt(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),$t(e,t)}function kt(e,t){e._transitionClasses&&r(e._transitionClasses,t),wt(e,t)}function At(e,t,n){var r=Ot(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Ji?Wi:Gi,c=0,u=function(){e.removeEventListener(s,l),n()},l=function(t){t.target===e&&++c>=a&&u()};setTimeout(function(){c<a&&u()},o+1),e.addEventListener(s,l)}function Ot(e,t){var n,r=window.getComputedStyle(e),i=r[Ki+"Delay"].split(", "),o=r[Ki+"Duration"].split(", "),a=Tt(i,o),s=r[Zi+"Delay"].split(", "),c=r[Zi+"Duration"].split(", "),u=Tt(s,c),l=0,f=0;t===Ji?a>0&&(n=Ji,l=a,f=o.length):t===qi?u>0&&(n=qi,l=u,f=c.length):(l=Math.max(a,u),n=l>0?a>u?Ji:qi:null,f=n?n===Ji?o.length:c.length:0);var d=n===Ji&&Qi.test(r[Ki+"Property"]);return{type:n,timeout:l,propCount:f,hasTransform:d}}function Tt(e,t){return Math.max.apply(null,t.map(function(t,n){return St(t)+St(e[n])}))}function St(e){return 1e3*Number(e.slice(0,-1))}function Et(e){var t=e.elm;t._leaveCb&&(t._leaveCb.cancelled=!0,t._leaveCb());var n=Lt(e.data.transition);if(n&&!t._enterCb&&1===t.nodeType){var r=n.css,i=n.type,o=n.enterClass,a=n.enterActiveClass,s=n.appearClass,c=n.appearActiveClass,u=n.beforeEnter,l=n.enter,f=n.afterEnter,d=n.enterCancelled,p=n.beforeAppear,v=n.appear,h=n.afterAppear,m=n.appearCancelled,g=ti.$vnode,y=g&&g.parent?g.parent.context:ti,_=!y._isMounted||!e.isRootInsert;if(!_||v||""===v){var b=_?s:o,$=_?c:a,w=_?p||u:u,C=_&&"function"==typeof v?v:l,x=_?h||f:f,k=_?m||d:d,A=r!==!1&&!Er,O=C&&(C._length||C.length)>1,T=t._enterCb=Dt(function(){A&&kt(t,$),T.cancelled?(A&&kt(t,b),k&&k(t)):x&&x(t),t._enterCb=null});e.data.show||Z(e.data.hook||(e.data.hook={}),"insert",function(){var n=t.parentNode,r=n&&n._pending&&n._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),C&&C(t,T)}),w&&w(t),A&&(xt(t,b),xt(t,$),Ct(function(){kt(t,b),T.cancelled||O||At(t,i,T)})),e.data.show&&C&&C(t,T),A||O||T()}}}function jt(e,t){function n(){m.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),u&&u(r),v&&(xt(r,s),xt(r,c),Ct(function(){kt(r,s),m.cancelled||h||At(r,a,m)})),l&&l(r,m),v||h||m())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var i=Lt(e.data.transition);if(!i)return t();if(!r._leaveCb&&1===r.nodeType){var o=i.css,a=i.type,s=i.leaveClass,c=i.leaveActiveClass,u=i.beforeLeave,l=i.leave,f=i.afterLeave,d=i.leaveCancelled,p=i.delayLeave,v=o!==!1&&!Er,h=l&&(l._length||l.length)>1,m=r._leaveCb=Dt(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),v&&kt(r,c),m.cancelled?(v&&kt(r,s),d&&d(r)):(t(),f&&f(r)),r._leaveCb=null});p?p(n):n()}}function Lt(e){if(e){if("object"==typeof e){var t={};return e.css!==!1&&u(t,Xi(e.name||"v")),u(t,e),t}return"string"==typeof e?Xi(e):void 0}}function Dt(e){var t=!1;return function(){t||(t=!0,e())}}function Nt(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s<c;s++)if(a=e.options[s],i)o=m(r,Pt(a))>-1,a.selected!==o&&(a.selected=o);else if(h(Pt(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function Mt(e,t){for(var n=0,r=t.length;n<r;n++)if(h(Pt(t[n]),e))return!1;return!0}function Pt(e){return"_value"in e?e._value:e.value}function Rt(e){e.target.composing=!0}function It(e){e.target.composing=!1,Ft(e.target,"input")}function Ft(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Bt(e){return!e.child||e.data&&e.data.transition?e:Bt(e.child._vnode)}function Ht(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Ht(W(t.children)):e}function Ut(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[gr(o)]=i[o].fn;return t}function zt(e,t){return/\d-keep-alive$/.test(t.tag)?e("keep-alive"):null}function Vt(e){for(;e=e.parent;)if(e.data.transition)return!0}function Jt(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function qt(e){e.data.newPos=e.elm.getBoundingClientRect()}function Kt(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}function Wt(e,t){var n=document.createElement("div");return n.innerHTML='<div a="'+e+'">',n.innerHTML.indexOf(t)>0}function Zt(e){return ho.innerHTML=e,ho.textContent}function Gt(e,t,n){return t&&(e=e.replace(qo,"<").replace(Ko,">")),n&&(e=e.replace(Wo,"\n")),e.replace(Zo,"&").replace(Go,'"')}function Yt(e,t){function n(t){d+=t,e=e.substring(t)}function r(){var t=e.match(wo);if(t){var r={tagName:t[1],attrs:[],start:d};n(t[0].length);for(var i,o;!(i=e.match(Co))&&(o=e.match(_o));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=d,r}}function i(e){var n=e.tagName,r=e.unarySlash;u&&("p"===s&&xi(n)&&o("",s),Ci(n)&&s===n&&o("",n));for(var i=l(n)||"html"===n&&"head"===s||!!r,a=e.attrs.length,d=new Array(a),p=0;p<a;p++){var v=e.attrs[p];Ao&&v[0].indexOf('""')===-1&&(""===v[3]&&delete v[3],
-""===v[4]&&delete v[4],""===v[5]&&delete v[5]);var h=v[3]||v[4]||v[5]||"";d[p]={name:v[1],value:f?Gt(h,t.shouldDecodeTags,t.shouldDecodeNewlines):h}}i||(c.push({tag:n,attrs:d}),s=n,r=""),t.start&&t.start(n,d,i,e.start,e.end)}function o(e,n,r,i){var o;if(null==r&&(r=d),null==i&&(i=d),n){var a=n.toLowerCase();for(o=c.length-1;o>=0&&c[o].tag.toLowerCase()!==a;o--);}else o=0;if(o>=0){for(var u=c.length-1;u>=o;u--)t.end&&t.end(c[u].tag,r,i);c.length=o,s=o&&c[o-1].tag}else"br"===n.toLowerCase()?t.start&&t.start(n,[],!0,r,i):"p"===n.toLowerCase()&&(t.start&&t.start(n,[],!1,r,i),t.end&&t.end(n,r,i))}for(var a,s,c=[],u=t.expectHTML,l=t.isUnaryTag||Cr,f=t.isFromDOM,d=0;e;){if(a=e,s&&Vo(s)){var p=s.toLowerCase(),v=Jo[p]||(Jo[p]=new RegExp("([\\s\\S]*?)(</"+p+"[^>]*>)","i")),h=0,m=e.replace(v,function(e,n,r){return h=r.length,"script"!==p&&"style"!==p&&"noscript"!==p&&(n=n.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)\]\]>/g,"$1")),t.chars&&t.chars(n),""});d+=e.length-m.length,e=m,o("</"+p+">",p,d-h,d)}else{var g=e.indexOf("<");if(0===g){if(/^<!--/.test(e)){var y=e.indexOf("-->");if(y>=0){n(y+3);continue}}if(/^<!\[/.test(e)){var _=e.indexOf("]>");if(_>=0){n(_+2);continue}}var b=e.match(ko);if(b){n(b[0].length);continue}var $=e.match(xo);if($){var w=d;n($[0].length),o($[0],$[1],w,d);continue}var C=r();if(C){i(C);continue}}var x=void 0;g>=0?(x=e.substring(0,g),n(g)):(x=e,e=""),t.chars&&t.chars(x)}if(e===a)throw new Error("Error parsing template:\n\n"+e)}o()}function Qt(e){function t(){(a||(a=[])).push(e.slice(d,i).trim()),d=i+1}var n,r,i,o,a,s=!1,c=!1,u=0,l=0,f=0,d=0;for(i=0;i<e.length;i++)if(r=n,n=e.charCodeAt(i),s)39===n&&92!==r&&(s=!s);else if(c)34===n&&92!==r&&(c=!c);else if(124!==n||124===e.charCodeAt(i+1)||124===e.charCodeAt(i-1)||u||l||f)switch(n){case 34:c=!0;break;case 39:s=!0;break;case 40:f++;break;case 41:f--;break;case 91:l++;break;case 93:l--;break;case 123:u++;break;case 125:u--}else void 0===o?(d=i+1,o=e.slice(0,i).trim()):t();if(void 0===o?o=e.slice(0,i).trim():0!==d&&t(),a)for(i=0;i<a.length;i++)o=Xt(o,a[i]);return o}function Xt(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";var r=t.slice(0,n),i=t.slice(n+1);return'_f("'+r+'")('+e+","+i}function en(e,t){var n=t?Xo(t):Yo;if(n.test(e)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(e);){i=r.index,i>a&&o.push(JSON.stringify(e.slice(a,i)));var s=Qt(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a<e.length&&o.push(JSON.stringify(e.slice(a))),o.join("+")}}function tn(e){console.error("[Vue parser]: "+e)}function nn(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function rn(e,t,n){(e.props||(e.props=[])).push({name:t,value:n})}function on(e,t,n){(e.attrs||(e.attrs=[])).push({name:t,value:n})}function an(e,t,n,r,i){(e.directives||(e.directives=[])).push({name:t,value:n,arg:r,modifiers:i})}function sn(e,t,n,r,i){r&&r.capture&&(delete r.capture,t="!"+t);var o;r&&r.native?(delete r.native,o=e.nativeEvents||(e.nativeEvents={})):o=e.events||(e.events={});var a={value:n,modifiers:r},s=o[t];Array.isArray(s)?i?s.unshift(a):s.push(a):s?o[t]=i?[a,s]:[s,a]:o[t]=a}function cn(e,t,n){var r=un(e,":"+t)||un(e,"v-bind:"+t);if(null!=r)return r;if(n!==!1){var i=un(e,t);if(null!=i)return JSON.stringify(i)}}function un(e,t){var n;if(null!=(n=e.attrsMap[t]))for(var r=e.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===t){r.splice(i,1);break}return n}function ln(e,t){Oo=t.warn||tn,To=t.getTagNamespace||Cr,So=t.mustUseProp||Cr,Eo=t.isPreTag||Cr,jo=nn(t.modules,"preTransformNode"),Lo=nn(t.modules,"transformNode"),Do=nn(t.modules,"postTransformNode"),No=t.delimiters;var n,r,i=[],o=t.preserveWhitespace!==!1,a=!1,s=!1;return Yt(e,{expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,isFromDOM:t.isFromDOM,shouldDecodeTags:t.shouldDecodeTags,shouldDecodeNewlines:t.shouldDecodeNewlines,start:function(e,o,c){function u(e){}var l=r&&r.ns||To(e);t.isIE&&"svg"===l&&(o=On(o));var f={type:1,tag:e,attrsList:o,attrsMap:xn(o),parent:r,children:[]};l&&(f.ns=l),An(f)&&(f.forbidden=!0);for(var d=0;d<jo.length;d++)jo[d](f,t);if(a||(fn(f),f.pre&&(a=!0)),Eo(f.tag)&&(s=!0),a)dn(f);else{hn(f),mn(f),yn(f),pn(f),f.plain=!f.key&&!o.length,vn(f),_n(f),bn(f);for(var p=0;p<Lo.length;p++)Lo[p](f,t);$n(f)}n||(n=f,u(n)),r&&!f.forbidden&&(f.else?gn(f,r):(r.children.push(f),f.parent=r)),c||(r=f,i.push(f));for(var v=0;v<Do.length;v++)Do[v](f,t)},end:function(){var e=i[i.length-1],t=e.children[e.children.length-1];t&&3===t.type&&" "===t.text&&e.children.pop(),i.length-=1,r=i[i.length-1],e.pre&&(a=!1),Eo(e.tag)&&(s=!1)},chars:function(e){if(r&&(e=s||e.trim()?sa(e):o&&r.children.length?" ":"")){var t;!a&&" "!==e&&(t=en(e,No))?r.children.push({type:2,expression:t,text:e}):r.children.push({type:3,text:e})}}}),n}function fn(e){null!=un(e,"v-pre")&&(e.pre=!0)}function dn(e){var t=e.attrsList.length;if(t)for(var n=e.attrs=new Array(t),r=0;r<t;r++)n[r]={name:e.attrsList[r].name,value:JSON.stringify(e.attrsList[r].value)};else e.pre||(e.plain=!0)}function pn(e){var t=cn(e,"key");t&&(e.key=t)}function vn(e){var t=cn(e,"ref");t&&(e.ref=t,e.refInFor=wn(e))}function hn(e){var t;if(t=un(e,"v-for")){var n=t.match(ta);if(!n)return;e.for=n[2].trim();var r=n[1].trim(),i=r.match(na);i?(e.alias=i[1].trim(),e.iterator1=i[2].trim(),i[3]&&(e.iterator2=i[3].trim())):e.alias=r}}function mn(e){var t=un(e,"v-if");t&&(e.if=t),null!=un(e,"v-else")&&(e.else=!0)}function gn(e,t){var n=kn(t.children);n&&n.if&&(n.elseBlock=e)}function yn(e){var t=un(e,"v-once");null!=t&&(e.once=!0)}function _n(e){if("slot"===e.tag)e.slotName=cn(e,"name");else{var t=cn(e,"slot");t&&(e.slotTarget=t)}}function bn(e){var t;(t=cn(e,"is"))&&(e.component=t),null!=un(e,"inline-template")&&(e.inlineTemplate=!0)}function $n(e){var t,n,r,i,o,a,s,c=e.attrsList;for(t=0,n=c.length;t<n;t++)if(r=c[t].name,i=c[t].value,ea.test(r))if(e.hasBindings=!0,a=Cn(r),a&&(r=r.replace(aa,"")),ra.test(r))r=r.replace(ra,""),a&&a.prop&&(s=!0,r=gr(r),"innerHtml"===r&&(r="innerHTML")),s||So(r)?rn(e,r,i):on(e,r,i);else if(ia.test(r))r=r.replace(ia,""),sn(e,r,i,a);else{r=r.replace(ea,"");var u=r.match(oa);u&&(o=u[1])&&(r=r.slice(0,-(o.length+1))),an(e,r,i,o,a)}else on(e,r,JSON.stringify(i))}function wn(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}function Cn(e){var t=e.match(aa);if(t){var n={};return t.forEach(function(e){n[e.slice(1)]=!0}),n}}function xn(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].value;return t}function kn(e){for(var t=e.length;t--;)if(e[t].tag)return e[t]}function An(e){return"style"===e.tag||"script"===e.tag&&(!e.attrsMap.type||"text/javascript"===e.attrsMap.type)}function On(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];ca.test(r.name)||(r.name=r.name.replace(ua,""),t.push(r))}return t}function Tn(e,t){e&&(Mo=la(t.staticKeys||""),Po=t.isReservedTag||function(){return!1},En(e),jn(e,!1))}function Sn(e){return n("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(e?","+e:""))}function En(e){if(e.static=Ln(e),1===e.type)for(var t=0,n=e.children.length;t<n;t++){var r=e.children[t];En(r),r.static||(e.static=!1)}}function jn(e,t){if(1===e.type){if(e.once||e.static)return e.staticRoot=!0,void(e.staticInFor=t);if(e.children)for(var n=0,r=e.children.length;n<r;n++)jn(e.children[n],!!e.for)}}function Ln(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||vr(e.tag)||!Po(e.tag)||!Object.keys(e).every(Mo))))}function Dn(e,t){var n=t?"nativeOn:{":"on:{";for(var r in e)n+='"'+r+'":'+Nn(e[r])+",";return n.slice(0,-1)+"}"}function Nn(e){if(e){if(Array.isArray(e))return"["+e.map(Nn).join(",")+"]";if(e.modifiers){var t="",n=[];for(var r in e.modifiers)pa[r]?t+=pa[r]:n.push(r);n.length&&(t=Mn(n)+t);var i=fa.test(e.value)?e.value+"($event)":e.value;return"function($event){"+t+i+"}"}return fa.test(e.value)?e.value:"function($event){"+e.value+"}"}return"function(){}"}function Mn(e){var t=1===e.length?Pn(e[0]):Array.prototype.concat.apply([],e.map(Pn));return Array.isArray(t)?"if("+t.map(function(e){return"$event.keyCode!=="+e}).join("&&")+")return;":"if($event.keyCode!=="+t+")return;"}function Pn(e){return parseInt(e,10)||da[e]||"_k("+JSON.stringify(e)+")"}function Rn(e,t){e.wrapData=function(e){return"_b("+e+","+t.value+(t.modifiers&&t.modifiers.prop?",true":"")+")"}}function In(e,t){var n=Ho,r=Ho=[];Uo=t,Ro=t.warn||tn,Io=nn(t.modules,"transformCode"),Fo=nn(t.modules,"genData"),Bo=t.directives||{};var i=e?Fn(e):'_h("div")';return Ho=n,{render:"with(this){return "+i+"}",staticRenderFns:r}}function Fn(e){if(e.staticRoot&&!e.staticProcessed)return e.staticProcessed=!0,Ho.push("with(this){return "+Fn(e)+"}"),"_m("+(Ho.length-1)+(e.staticInFor?",true":"")+")";if(e.for&&!e.forProcessed)return Un(e);if(e.if&&!e.ifProcessed)return Bn(e);if("template"!==e.tag||e.slotTarget){if("slot"===e.tag)return Wn(e);var t;if(e.component)t=Zn(e);else{var n=zn(e),r=e.inlineTemplate?null:Jn(e);t="_h('"+e.tag+"'"+(n?","+n:"")+(r?","+r:"")+")"}for(var i=0;i<Io.length;i++)t=Io[i](e,t);return t}return Jn(e)||"void 0"}function Bn(e){var t=e.if;return e.ifProcessed=!0,"("+t+")?"+Fn(e)+":"+Hn(e)}function Hn(e){return e.elseBlock?Fn(e.elseBlock):"_e()"}function Un(e){var t=e.for,n=e.alias,r=e.iterator1?","+e.iterator1:"",i=e.iterator2?","+e.iterator2:"";return e.forProcessed=!0,"_l(("+t+"),function("+n+r+i+"){return "+Fn(e)+"})"}function zn(e){if(!e.plain){var t="{",n=Vn(e);n&&(t+=n+","),e.key&&(t+="key:"+e.key+","),e.ref&&(t+="ref:"+e.ref+","),e.refInFor&&(t+="refInFor:true,"),e.component&&(t+='tag:"'+e.tag+'",'),e.slotTarget&&(t+="slot:"+e.slotTarget+",");for(var r=0;r<Fo.length;r++)t+=Fo[r](e);if(e.attrs&&(t+="attrs:{"+Gn(e.attrs)+"},"),e.props&&(t+="domProps:{"+Gn(e.props)+"},"),e.events&&(t+=Dn(e.events)+","),e.nativeEvents&&(t+=Dn(e.nativeEvents,!0)+","),e.inlineTemplate){var i=e.children[0];if(1===i.type){var o=In(i,Uo);t+="inlineTemplate:{render:function(){"+o.render+"},staticRenderFns:["+o.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}return t=t.replace(/,$/,"")+"}",e.wrapData&&(t=e.wrapData(t)),t}}function Vn(e){var t=e.directives;if(t){var n,r,i,o,a="directives:[",s=!1;for(n=0,r=t.length;n<r;n++){i=t[n],o=!0;var c=Bo[i.name]||va[i.name];c&&(o=!!c(e,i,Ro)),o&&(s=!0,a+='{name:"'+i.name+'"'+(i.value?",value:("+i.value+"),expression:"+JSON.stringify(i.value):"")+(i.arg?',arg:"'+i.arg+'"':"")+(i.modifiers?",modifiers:"+JSON.stringify(i.modifiers):"")+"},")}return s?a.slice(0,-1)+"]":void 0}}function Jn(e){if(e.children.length)return"["+e.children.map(qn).join(",")+"]"}function qn(e){return 1===e.type?Fn(e):Kn(e)}function Kn(e){return 2===e.type?e.expression:JSON.stringify(e.text)}function Wn(e){var t=e.slotName||'"default"',n=Jn(e);return n?"_t("+t+","+n+")":"_t("+t+")"}function Zn(e){var t=Jn(e);return"_h("+e.component+","+zn(e)+(t?","+t:"")+")"}function Gn(e){for(var t="",n=0;n<e.length;n++){var r=e[n];t+='"'+r.name+'":'+r.value+","}return t.slice(0,-1)}function Yn(e,t){var n=ln(e.trim(),t);Tn(n,t);var r=In(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}function Qn(e,t){var n=(t.warn||tn,un(e,"class"));n&&(e.staticClass=JSON.stringify(n));var r=cn(e,"class",!1);r&&(e.classBinding=r)}function Xn(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}function er(e){var t=cn(e,"style",!1);t&&(e.styleBinding=t)}function tr(e){return e.styleBinding?"style:("+e.styleBinding+"),":""}function nr(e,t,n){zo=n;var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;if("select"===o)return ar(e,r);if("input"===o&&"checkbox"===a)rr(e,r);else{if("input"!==o||"radio"!==a)return or(e,r,i);ir(e,r)}}function rr(e,t){var n=cn(e,"value")||"null",r=cn(e,"true-value")||"true",i=cn(e,"false-value")||"false";rn(e,"checked","Array.isArray("+t+")?_i("+t+","+n+")>-1:_q("+t+","+r+")"),sn(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+r+"):("+i+");if(Array.isArray($$a)){var $$v="+n+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+t+"=$$c}",null,!0)}function ir(e,t){var n=cn(e,"value")||"null";rn(e,"checked","_q("+t+","+n+")"),sn(e,"change",t+"="+n,null,!0)}function or(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=o||Sr&&"range"===r?"change":"input",u=!o&&"range"!==r,l="input"===e.tag||"textarea"===e.tag,f=l?"$event.target.value"+(s?".trim()":""):"$event",d=a||"number"===r?t+"=_n("+f+")":t+"="+f;if(l&&u&&(d="if($event.target.composing)return;"+d),rn(e,"value",l?"_s("+t+")":"("+t+")"),sn(e,c,d,null,!0),u)return!0}function ar(e,t){var n=t+'=Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){return "_value" in o ? o._value : o.value})'+(null==e.attrsMap.multiple?"[0]":"");return sn(e,"change",n,null,!0),!0}function sr(e,t){t.value&&rn(e,"textContent","_s("+t.value+")")}function cr(e,t){t.value&&rn(e,"innerHTML","_s("+t.value+")")}function ur(e,t){return t=t?u(u({},ba),t):ba,Yn(e,t)}function lr(e,t,n){var r=(t&&t.warn||ai,t&&t.delimiters?String(t.delimiters)+e:e);if(_a[r])return _a[r];var i={},o=ur(e,t);i.render=fr(o.render);var a=o.staticRenderFns.length;i.staticRenderFns=new Array(a);for(var s=0;s<a;s++)i.staticRenderFns[s]=fr(o.staticRenderFns[s]);return _a[r]=i}function fr(e){try{return new Function(e)}catch(e){return p}}function dr(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}var pr,vr=n("slot,component",!0),hr=Object.prototype.hasOwnProperty,mr=/-(\w)/g,gr=a(function(e){return e.replace(mr,function(e,t){return t?t.toUpperCase():""})}),yr=a(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),_r=/([^-])([A-Z])/g,br=a(function(e){return e.replace(_r,"$1-$2").replace(_r,"$1-$2").toLowerCase()}),$r=Object.prototype.toString,wr="[object Object]",Cr=function(){return!1},xr={optionMergeStrategies:Object.create(null),silent:!1,devtools:!1,errorHandler:null,ignoredElements:null,keyCodes:Object.create(null),isReservedTag:Cr,isUnknownElement:Cr,getTagNamespace:p,mustUseProp:Cr,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100,_isServer:!1},kr=/[^\w\.\$]/,Ar="__proto__"in{},Or="undefined"!=typeof window&&"[object Object]"!==Object.prototype.toString.call(window),Tr=Or&&window.navigator.userAgent.toLowerCase(),Sr=Tr&&/msie|trident/.test(Tr),Er=Tr&&Tr.indexOf("msie 9.0")>0,jr=Tr&&Tr.indexOf("edge/")>0,Lr=Tr&&Tr.indexOf("android")>0,Dr=Tr&&/iphone|ipad|ipod|ios/.test(Tr),Nr=Or&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,Mr=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&b(Promise)){var i=Promise.resolve();t=function(){i.then(e),Dr&&setTimeout(p)}}else if("undefined"==typeof MutationObserver||!b(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=setTimeout;else{var o=1,a=new MutationObserver(e),s=document.createTextNode(String(o));a.observe(s,{characterData:!0}),t=function(){o=(o+1)%2,s.data=String(o)}}return function(i,o){var a=o?function(){i.call(o)}:i;n.push(a),r||(r=!0,t(e,0))}}();pr="undefined"!=typeof Set&&b(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return void 0!==this.set[e]},e.prototype.add=function(e){this.set[e]=1},e.prototype.clear=function(){this.set=Object.create(null)},e}();var Pr=0,Rr=function(){this.id=Pr++,this.subs=[]};Rr.prototype.addSub=function(e){this.subs.push(e)},Rr.prototype.removeSub=function(e){r(this.subs,e)},Rr.prototype.depend=function(){Rr.target&&Rr.target.addDep(this)},Rr.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},Rr.target=null;var Ir=[],Fr=[],Br={},Hr=!1,Ur=!1,zr=0,Vr=0,Jr=function(e,t,n,r){void 0===r&&(r={}),this.vm=e,e._watchers.push(this),this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.expression=t.toString(),this.cb=n,this.id=++Vr,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new pr,this.newDepIds=new pr,"function"==typeof t?this.getter=t:(this.getter=_(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Jr.prototype.get=function(){$(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&A(e),w(),this.cleanupDeps(),e},Jr.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Jr.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Jr.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():k(this)},Jr.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||l(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){if(!xr.errorHandler)throw e;xr.errorHandler.call(null,e,this.vm)}else this.cb.call(this.vm,e,t)}}},Jr.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Jr.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Jr.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||r(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var qr=new pr,Kr=Array.prototype,Wr=Object.create(Kr);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=Kr[e];y(Wr,e,function(){for(var n=arguments,r=arguments.length,i=new Array(r);r--;)i[r]=n[r];var o,a=t.apply(this,i),s=this.__ob__;switch(e){case"push":o=i;break;case"unshift":o=i;break;case"splice":o=i.slice(2)}return o&&s.observeArray(o),s.dep.notify(),a})});var Zr=Object.getOwnPropertyNames(Wr),Gr={shouldConvert:!0,isSettingProps:!1},Yr=function(e){if(this.value=e,this.dep=new Rr,this.vmCount=0,y(e,"__ob__",this),Array.isArray(e)){var t=Ar?O:T;t(e,Wr,Zr),this.observeArray(e)}else this.walk(e)};Yr.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)E(e,t[n],e[t[n]])},Yr.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)S(e[t])};var Qr={enumerable:!0,configurable:!0,get:p,set:p},Xr=function(e,t,n,r,i,o,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=i,this.ns=o,this.context=a,this.key=t&&t.key,this.componentOptions=s,this.child=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1},ei=function(){var e=new Xr;return e.text="",e.isComment=!0,e},ti=null,ni={init:oe,prepatch:ae,insert:se,destroy:ce},ri=Object.keys(ni),ii=0;$e(we),H(we),be(we),ee(we),ge(we);var oi,ai=p,si=xr.optionMergeStrategies;si.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,i="function"==typeof e?e.call(n):void 0;return r?Ce(r,i):i}:void 0:t?"function"!=typeof t?e:e?function(){return Ce(t.call(this),e.call(this))}:t:e},xr._lifecycleHooks.forEach(function(e){si[e]=xe}),xr._assetTypes.forEach(function(e){si[e+"s"]=ke}),si.watch=function(e,t){if(!t)return e;if(!e)return t;var n={};u(n,e);for(var r in t){var i=n[r],o=t[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):[o]}return n},si.props=si.methods=si.computed=function(e,t){if(!t)return e;if(!e)return t;var n=Object.create(null);return u(n,e),u(n,t),n};var ci=function(e,t){return void 0===t?e:t},ui=Object.freeze({defineReactive:E,_toString:e,toNumber:t,makeMap:n,isBuiltInTag:vr,remove:r,hasOwn:i,isPrimitive:o,cached:a,camelize:gr,capitalize:yr,hyphenate:br,bind:s,toArray:c,extend:u,isObject:l,isPlainObject:f,toObject:d,noop:p,no:Cr,genStaticKeys:v,looseEqual:h,looseIndexOf:m,isReserved:g,def:y,parsePath:_,hasProto:Ar,inBrowser:Or,UA:Tr,isIE:Sr,isIE9:Er,isEdge:jr,isAndroid:Lr,isIOS:Dr,devtools:Nr,nextTick:Mr,get _Set(){return pr},mergeOptions:Se,resolveAsset:Ee,warn:ai,formatComponentName:oi,validateProp:je}),li={name:"keep-alive",abstract:!0,created:function(){this.cache=Object.create(null)},render:function(){var e=W(this.$slots.default);if(e&&e.componentOptions){var t=e.componentOptions,n=null==e.key?t.Ctor.cid+"::"+t.tag:e.key;this.cache[n]?e.child=this.cache[n].child:this.cache[n]=e,e.data.keepAlive=!0}return e},destroyed:function(){var e=this;for(var t in this.cache){var n=e.cache[t];te(n.child,"deactivated"),n.child.$destroy()}}},fi={KeepAlive:li};Ie(we),Object.defineProperty(we.prototype,"$isServer",{get:function(){return xr._isServer}}),we.version="2.0.0";var di,pi=n("value,selected,checked,muted"),vi=n("contenteditable,draggable,spellcheck"),hi=n("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),mi="http://www.w3.org/1999/xlink",gi=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},yi=function(e){return gi(e)?e.slice(6,e.length):""},_i=function(e){return null==e||e===!1},bi={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},$i=n("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template"),wi=n("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr",!0),Ci=n("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source",!0),xi=n("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track",!0),ki=n("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font,font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Ai=function(e){return"pre"===e},Oi=function(e){return $i(e)||ki(e)},Ti=Object.create(null),Si=Object.freeze({createElement:Ke,createElementNS:We,createTextNode:Ze,createComment:Ge,insertBefore:Ye,removeChild:Qe,appendChild:Xe,parentNode:et,nextSibling:tt,tagName:nt,setTextContent:rt,childNodes:it,setAttribute:ot}),Ei={create:function(e,t){at(t)},update:function(e,t){e.data.ref!==t.data.ref&&(at(e,!0),at(t))},destroy:function(e){at(e,!0)}},ji={},Li=new Xr("",ji,[]),Di=["create","update","postpatch","remove","destroy"],Ni={create:function(e,t){var n=!1;dt(e,t,function(r,i){vt(r,i,"bind",t,e),r.inserted&&(n=!0)}),n&&Z(t.data.hook||(t.data.hook={}),"insert",function(){pt(e,t,"inserted")})},update:function(e,t){pt(e,t,"update"),e.data.directives&&!t.data.directives&&pt(e,e,"unbind")},postpatch:function(e,t){pt(e,t,"componentUpdated")},destroy:function(e){pt(e,e,"unbind")}},Mi=Object.create(null),Pi=[Ei,Ni],Ri={create:ht,update:ht},Ii={create:gt,update:gt},Fi={create:yt,update:yt},Bi={create:_t,update:_t},Hi=["Webkit","Moz","ms"],Ui=a(function(e){if(di=di||document.createElement("div"),e=gr(e),"filter"!==e&&e in di.style)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<Hi.length;n++){var r=Hi[n]+t;if(r in di.style)return r}}),zi={create:bt,update:bt},Vi=Or&&!Er,Ji="transition",qi="animation",Ki="transition",Wi="transitionend",Zi="animation",Gi="animationend";Vi&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ki="WebkitTransition",Wi="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Zi="WebkitAnimation",Gi="webkitAnimationEnd"));var Yi=Or&&window.requestAnimationFrame||setTimeout,Qi=/\b(transform|all)(,|$)/,Xi=a(function(e){return{enterClass:e+"-enter",leaveClass:e+"-leave",appearClass:e+"-enter",enterActiveClass:e+"-enter-active",leaveActiveClass:e+"-leave-active",appearActiveClass:e+"-enter-active"}}),eo=Or?{create:function(e,t){t.data.show||Et(t)},remove:function(e,t){e.data.show?t():jt(e,t)}}:{},to=[Ri,Ii,Fi,Bi,zi,eo],no=to.concat(Pi),ro=ft({nodeOps:Si,modules:no});Er&&document.addEventListener("selectionchange",function(){var e=document.activeElement;e&&e.vmodel&&Ft(e,"input")});var io={bind:function(e,t,n){if("select"===n.tag){if(Nt(e,t,n.context),Sr||jr){var r=function(){Nt(e,t,n.context)};Mr(r),setTimeout(r,0)}}else"textarea"!==n.tag&&"text"!==e.type||(Lr||(e.addEventListener("compositionstart",Rt),e.addEventListener("compositionend",It)),Er&&(e.vmodel=!0))},componentUpdated:function(e,t,n){if("select"===n.tag){Nt(e,t,n.context);var r=e.multiple?t.value.some(function(t){return Mt(t,e.options)}):Mt(t.value,e.options);r&&Ft(e,"change")}}},oo={bind:function(e,t,n){var r=t.value;n=Bt(n);var i=n.data&&n.data.transition;r&&i&&!Er&&Et(n);var o="none"===e.style.display?"":e.style.display;e.style.display=r?o:"none",e.__vOriginalDisplay=o},update:function(e,t,n){var r=t.value,i=t.oldValue;if(r!==i){n=Bt(n);var o=n.data&&n.data.transition;o&&!Er?r?(Et(n),e.style.display=e.__vOriginalDisplay):jt(n,function(){e.style.display="none"}):e.style.display=r?e.__vOriginalDisplay:"none"}}},ao={model:io,show:oo},so={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String},co={name:"transition",props:so,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag}),n.length)){var r=this.mode,i=n[0];if(Vt(this.$vnode))return i;var o=Ht(i);if(!o)return i;if(this._leaving)return zt(e,i);o.key=null==o.key||o.isStatic?"__v"+(o.tag+this._uid)+"__":o.key;var a=(o.data||(o.data={})).transition=Ut(this),s=this._vnode,c=Ht(s);if(o.data.directives&&o.data.directives.some(function(e){return"show"===e.name})&&(o.data.show=!0),c&&c.data&&c.key!==o.key){var l=c.data.transition=u({},a);if("out-in"===r)return this._leaving=!0,Z(l,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),zt(e,i);if("in-out"===r){var f,d=function(){f()};Z(a,"afterEnter",d),Z(a,"enterCancelled",d),Z(l,"delayLeave",function(e){f=e})}}return i}}},uo=u({tag:String,moveClass:String},so);delete uo.mode;var lo={props:uo,render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Ut(this),s=0;s<i.length;s++){var c=i[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf("__vlist")&&(o.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a)}if(r){for(var u=[],l=[],f=0;f<r.length;f++){var d=r[f];d.data.transition=a,d.data.pos=d.elm.getBoundingClientRect(),n[d.key]?u.push(d):l.push(d)}this.kept=e(t,null,u),this.removed=l}return e(t,null,o)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||this.name+"-move";if(e.length&&this.hasMove(e[0].elm,t)){e.forEach(Jt),e.forEach(qt),e.forEach(Kt);document.body.offsetHeight;e.forEach(function(e){if(e.data.moved){var n=e.elm,r=n.style;xt(n,t),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(Wi,n._moveCb=function e(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Wi,e),n._moveCb=null,kt(n,t))})}})}},methods:{hasMove:function(e,t){if(!Vi)return!1;if(null!=this._hasMove)return this._hasMove;xt(e,t);var n=Ot(e);return kt(e,t),this._hasMove=n.hasTransform}}},fo={Transition:co,TransitionGroup:lo};we.config.isUnknownElement=Je,we.config.isReservedTag=Oi,we.config.getTagNamespace=Ve,we.config.mustUseProp=pi,u(we.options.directives,ao),u(we.options.components,fo),we.prototype.__patch__=xr._isServer?p:ro,we.prototype.$mount=function(e,t){return e=e&&!xr._isServer?qe(e):void 0,this._mount(e,t)},setTimeout(function(){xr.devtools&&Nr&&Nr.emit("init",we)},0);var po=!!Or&&Wt(">","&gt;"),vo=!!Or&&Wt("\n","&#10;"),ho=document.createElement("div"),mo=/([^\s"'<>\/=]+)/,go=/(?:=)/,yo=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],_o=new RegExp("^\\s*"+mo.source+"(?:\\s*("+go.source+")\\s*(?:"+yo.join("|")+"))?"),bo="[a-zA-Z_][\\w\\-\\.]*",$o="((?:"+bo+"\\:)?"+bo+")",wo=new RegExp("^<"+$o),Co=/^\s*(\/?)>/,xo=new RegExp("^<\\/"+$o+"[^>]*>"),ko=/^<!DOCTYPE [^>]+>/i,Ao=!1;"x".replace(/x(.)?/g,function(e,t){Ao=""===t});var Oo,To,So,Eo,jo,Lo,Do,No,Mo,Po,Ro,Io,Fo,Bo,Ho,Uo,zo,Vo=n("script,style",!0),Jo={},qo=/&lt;/g,Ko=/&gt;/g,Wo=/&#10;/g,Zo=/&amp;/g,Go=/&quot;/g,Yo=/\{\{((?:.|\n)+?)\}\}/g,Qo=/[-.*+?^${}()|[\]\/\\]/g,Xo=a(function(e){var t=e[0].replace(Qo,"\\$&"),n=e[1].replace(Qo,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}),ea=/^v-|^@|^:/,ta=/(.*)\s+(?:in|of)\s+(.*)/,na=/\(([^,]*),([^,]*)(?:,([^,]*))?\)/,ra=/^:|^v-bind:/,ia=/^@|^v-on:/,oa=/:(.*)$/,aa=/\.[^\.]+/g,sa=a(Zt),ca=/^xmlns:NS\d+/,ua=/^NS\d+:/,la=a(Sn),fa=/^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\]|\[[A-Za-z_$][\w$]*\])*$/,da={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},pa={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:"if($event.target !== $event.currentTarget)return;"},va={bind:Rn,cloak:p},ha=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),{staticKeys:["staticClass"],transformNode:Qn,genData:Xn}),ma={transformNode:er,genData:tr},ga=[ha,ma],ya={model:nr,text:sr,html:cr},_a=Object.create(null),ba={isIE:Sr,expectHTML:!0,modules:ga,staticKeys:v(ga),directives:ya,isReservedTag:Oi,isUnaryTag:wi,mustUseProp:pi,getTagNamespace:Ve,isPreTag:Ai},$a=a(function(e){var t=qe(e);return t&&t.innerHTML}),wa=we.prototype.$mount;return we.prototype.$mount=function(e,t){if(e=e&&qe(e),e===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template,i=!1;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(i=!0,r=$a(r));else{if(!r.nodeType)return this;i=!0,r=r.innerHTML}else e&&(i=!0,r=dr(e));if(r){var o=lr(r,{warn:ai,isFromDOM:i,shouldDecodeTags:po,shouldDecodeNewlines:vo,delimiters:n.delimiters},this),a=o.render,s=o.staticRenderFns;n.render=a,n.staticRenderFns=s}}return wa.call(this,e,t)},we.compile=lr,we});
\ No newline at end of file
diff --git a/html5/test/render/vue/vender/vue-2.1.0.js b/html5/test/render/vue/vender/vue-2.1.0.js
deleted file mode 100755
index e80e513..0000000
--- a/html5/test/render/vue/vender/vue-2.1.0.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*!
- * Vue.js v2.1.0
- * (c) 2014-2016 Evan You
- * Released under the MIT License.
- */
-!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Vue=t()}(this,function(){"use strict";function e(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function t(e){var t=parseFloat(e,10);return t||0===t?t:e}function n(e,t){for(var n=Object.create(null),r=e.split(","),i=0;i<r.length;i++)n[r[i]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function r(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function i(e,t){return Ur.call(e,t)}function o(e){return"string"==typeof e||"number"==typeof e}function a(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function s(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function c(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function l(e,t){for(var n in t)e[n]=t[n];return e}function u(e){return null!==e&&"object"==typeof e}function f(e){return qr.call(e)===Wr}function d(e){for(var t={},n=0;n<e.length;n++)e[n]&&l(t,e[n]);return t}function p(){}function v(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function h(e,t){return e==t||!(!u(e)||!u(t))&&JSON.stringify(e)===JSON.stringify(t)}function m(e,t){for(var n=0;n<e.length;n++)if(h(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function y(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function _(e){if(!Gr.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function b(e){return/native code/.test(e.toString())}function $(e){di.target&&pi.push(di.target),di.target=e}function w(){di.target=pi.pop()}function x(e,t){e.__proto__=t}function C(e,t,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];y(e,o,t[o])}}function k(e){if(u(e)){var t;return i(e,"__ob__")&&e.__ob__ instanceof yi?t=e.__ob__:gi.shouldConvert&&!oi()&&(Array.isArray(e)||f(e))&&Object.isExtensible(e)&&!e._isVue&&(t=new yi(e)),t}}function A(e,t,n,r){var i=new di,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var a=o&&o.get,s=o&&o.set,c=k(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return di.target&&(i.depend(),c&&c.dep.depend(),Array.isArray(t)&&T(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,c=k(t),i.notify())}})}}function O(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(i(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(A(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function S(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||i(e,t)&&(delete e[t],n&&n.dep.notify())}function T(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&T(t)}function j(e,t){if(!t)return e;for(var n,r,o,a=Object.keys(t),s=0;s<a.length;s++)n=a[s],r=e[n],o=t[n],i(e,n)?f(r)&&f(o)&&j(r,o):O(e,n,o);return e}function E(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function N(e,t){var n=Object.create(e||null);return t?l(n,t):n}function L(e){var t=e.props;if(t){var n,r,i,o={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(i=Vr(r),o[i]={type:null});else if(f(t))for(var a in t)r=t[a],i=Vr(a),o[i]=f(r)?r:{type:r};e.props=o}}function D(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function M(e,t,n){function r(r){var i=_i[r]||bi;u[r]=i(e[r],t[r],n,r)}L(t),D(t);var o=t.extends;if(o&&(e="function"==typeof o?M(e,o.options,n):M(e,o,n)),t.mixins)for(var a=0,s=t.mixins.length;a<s;a++){var c=t.mixins[a];c.prototype instanceof Re&&(c=c.options),e=M(e,c,n)}var l,u={};for(l in e)r(l);for(l in t)i(e,l)||r(l);return u}function P(e,t,n,r){if("string"==typeof n){var i=e[t],o=i[n]||i[Vr(n)]||i[zr(Vr(n))];return o}}function R(e,t,n,r){var o=t[e],a=!i(n,e),s=n[e];if(B(o.type)&&(a&&!i(o,"default")?s=!1:""!==s&&s!==Kr(e)||(s=!0)),void 0===s){s=I(r,o,e);var c=gi.shouldConvert;gi.shouldConvert=!0,k(s),gi.shouldConvert=c}return s}function I(e,t,n){if(i(t,"default")){var r=t.default;return u(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function F(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function B(e){if(!Array.isArray(e))return"Boolean"===F(e);for(var t=0,n=e.length;t<n;t++)if("Boolean"===F(e[t]))return!0;return!1}function U(){wi.length=0,xi={},Ci=ki=!1}function H(){for(ki=!0,wi.sort(function(e,t){return e.id-t.id}),Ai=0;Ai<wi.length;Ai++){var e=wi[Ai],t=e.id;xi[t]=null,e.run()}ai&&li.devtools&&ai.emit("flush"),U()}function V(e){var t=e.id;if(null==xi[t]){if(xi[t]=!0,ki){for(var n=wi.length-1;n>=0&&wi[n].id>e.id;)n--;wi.splice(Math.max(n,Ai)+1,0,e)}else wi.push(e);Ci||(Ci=!0,si(H))}}function z(e){Ti.clear(),J(e,Ti)}function J(e,t){var n,r,i=Array.isArray(e);if((i||u(e))&&Object.isExtensible(e)){if(e.__ob__){var o=e.__ob__.dep.id;if(t.has(o))return;t.add(o)}if(i)for(n=e.length;n--;)J(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)J(e[r[n]],t)}}function K(e){e._watchers=[],q(e),W(e),Z(e),Y(e),Q(e)}function q(e){var t=e.$options.props;if(t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),i=!e.$parent;gi.shouldConvert=i;for(var o=function(i){var o=r[i];A(e,o,R(o,t,n,e))},a=0;a<r.length;a++)o(a);gi.shouldConvert=!0}}function W(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},f(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&i(r,n[o])||te(e,n[o]);k(t),t.__ob__&&t.__ob__.vmCount++}function Z(e){var t=e.$options.computed;if(t)for(var n in t){var r=t[n];"function"==typeof r?(ji.get=G(r,e),ji.set=p):(ji.get=r.get?r.cache!==!1?G(r.get,e):s(r.get,e):p,ji.set=r.set?s(r.set,e):p),Object.defineProperty(e,n,ji)}}function G(e,t){var n=new Si(t,e,p,{lazy:!0});return function(){return n.dirty&&n.evaluate(),di.target&&n.depend(),n.value}}function Y(e){var t=e.$options.methods;if(t)for(var n in t)e[n]=null==t[n]?p:s(t[n],e)}function Q(e){var t=e.$options.watch;if(t)for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)X(e,n,r[i]);else X(e,n,r)}}function X(e,t,n){var r;f(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function ee(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=O,e.prototype.$delete=S,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var i=new Si(r,e,t,n);return n.immediate&&t.call(r,i.value),function(){i.teardown()}}}function te(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function ne(e){var t=new Ei(e.tag,e.data,e.children,e.text,e.elm,e.ns,e.context,e.componentOptions);return t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function re(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=ne(e[n]);return t}function ie(e,t,n,r){r+=t;var i=e.__injected||(e.__injected={});if(!i[r]){i[r]=!0;var o=e[t];o?e[t]=function(){o.apply(this,arguments),n.apply(this,arguments)}:e[t]=n}}function oe(e,t,n,r,i){var o,a,s,c,l,u;for(o in e)if(a=e[o],s=t[o],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var f=0;f<s.length;f++)s[f]=a[f];e[o]=s}else s.fn=a,e[o]=s}else u="!"===o.charAt(0),l=u?o.slice(1):o,Array.isArray(a)?n(l,a.invoker=ae(a),u):(a.invoker||(c=a,a=e[o]={},a.fn=c,a.invoker=se(a)),n(l,a.invoker,u));else;for(o in t)e[o]||(l="!"===o.charAt(0)?o.slice(1):o,r(l,t[o].invoker))}function ae(e){return function(t){for(var n=arguments,r=1===arguments.length,i=0;i<e.length;i++)r?e[i](t):e[i].apply(null,n)}}function se(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function ce(e,t,n){if(o(e))return[le(e)];if(Array.isArray(e)){for(var r=[],i=0,a=e.length;i<a;i++){var s=e[i],c=r[r.length-1];Array.isArray(s)?r.push.apply(r,ce(s,t,(n||"")+"_"+i)):o(s)?c&&c.text?c.text+=String(s):""!==s&&r.push(le(s)):s instanceof Ei&&(s.text&&c&&c.text?c.isCloned||(c.text+=s.text):(t&&ue(s,t),s.tag&&null==s.key&&null!=n&&(s.key="__vlist"+n+"_"+i+"__"),r.push(s)))}return r}}function le(e){return new Ei(void 0,void 0,void 0,String(e))}function ue(e,t){if(e.tag&&!e.ns&&(e.ns=t,e.children))for(var n=0,r=e.children.length;n<r;n++)ue(e.children[n],t)}function fe(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function de(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function pe(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=Ni),ve(n,"beforeMount"),n._watcher=new Si(n,function(){n._update(n._render(),t)},p),t=!1,null==n.$vnode&&(n._isMounted=!0,ve(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&ve(n,"beforeUpdate");var r=n.$el,i=Li;Li=n;var o=n._vnode;n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t),Li=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el),n._isMounted&&ve(n,"updated")},e.prototype._updateFromParent=function(e,t,n,r){var i=this,o=!(!i.$options._renderChildren&&!r);if(i.$options._parentVnode=n,i.$options._renderChildren=r,e&&i.$options.props){gi.shouldConvert=!1;for(var a=i.$options._propKeys||[],s=0;s<a.length;s++){var c=a[s];i[c]=R(c,i.$options.props,e,i)}gi.shouldConvert=!0,i.$options.propsData=e}if(t){var l=i.$options._parentListeners;i.$options._parentListeners=t,i._updateListeners(t,l)}o&&(i.$slots=Ee(r,i._renderContext),i.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){ve(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||r(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,ve(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function ve(e,t){var n=e.$options[t];if(n)for(var r=0,i=n.length;r<i;r++)n[r].call(e);e.$emit("hook:"+t)}function he(e,t,n,r,i){if(e){var o=n.$options._base;if(u(e)&&(e=o.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=we(e,o,function(){n.$forceUpdate()}),!e)return;Pe(e),t=t||{};var a=xe(t,e);if(e.options.functional)return me(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),ke(t);var c=e.options.name||i,l=new Ei("vue-component-"+e.cid+(c?"-"+c:""),t,void 0,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:i,children:r});return l}}}function me(e,t,n,r,i){var o={},a=e.options.props;if(a)for(var c in a)o[c]=R(c,a,t);var l=e.options.render.call(null,s(Oe,{_self:Object.create(r)}),{props:o,data:n,parent:r,children:ce(i),slots:function(){return Ee(i,r)}});return l instanceof Ei&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function ge(e,t){var n=e.componentOptions,r={_isComponent:!0,parent:t,propsData:n.propsData,_componentTag:n.tag,_parentVnode:e,_parentListeners:n.listeners,_renderChildren:n.children},i=e.data.inlineTemplate;return i&&(r.render=i.render,r.staticRenderFns=i.staticRenderFns),new n.Ctor(r)}function ye(e,t){if(!e.child||e.child._isDestroyed){var n=e.child=ge(e,Li);n.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var r=e;_e(r,r)}}function _e(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function be(e){e.child._isMounted||(e.child._isMounted=!0,ve(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,ve(e.child,"activated"))}function $e(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,ve(e.child,"deactivated")):e.child.$destroy())}function we(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],i=!0,o=function(n){if(u(n)&&(n=t.extend(n)),e.resolved=n,!i)for(var o=0,a=r.length;o<a;o++)r[o](n)},a=function(e){},s=e(o,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(o,a),i=!1,e.resolved}e.pendingCallbacks.push(n)}function xe(e,t){var n=t.options.props;if(n){var r={},i=e.attrs,o=e.props,a=e.domProps;if(i||o||a)for(var s in n){var c=Kr(s);Ce(r,o,s,c,!0)||Ce(r,i,s,c)||Ce(r,a,s,c)}return r}}function Ce(e,t,n,r,o){if(t){if(i(t,n))return e[n]=t[n],o||delete t[n],!0;if(i(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function ke(e){e.hook||(e.hook={});for(var t=0;t<Mi.length;t++){var n=Mi[t],r=e.hook[n],i=Di[n];e.hook[n]=r?Ae(i,r):i}}function Ae(e,t){return function(n,r){e(n,r),t(n,r)}}function Oe(e,t,n){return t&&(Array.isArray(t)||"object"!=typeof t)&&(n=t,t=void 0),Se(this._self,e,t,n)}function Se(e,t,n,r){if(!n||!n.__ob__){if(!t)return Ni();if(Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),"string"==typeof t){var i,o=li.getTagNamespace(t);if(li.isReservedTag(t))return new Ei(t,n,ce(r,o),void 0,void 0,o,e);if(i=P(e.$options,"components",t))return he(i,n,e,r,t);var a="foreignObject"===t?"xhtml":o;return new Ei(t,n,ce(r,a),void 0,void 0,o,e)}return he(t,n,e,r)}}function Te(e){e.$vnode=null,e._vnode=null,e._staticTrees=null,e._renderContext=e.$options._parentVnode&&e.$options._parentVnode.context,e.$slots=Ee(e.$options._renderChildren,e._renderContext),e.$scopedSlots=null,e.$createElement=s(Oe,e),e.$options.el&&e.$mount(e.$options.el)}function je(n){function r(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&i(e[r],t+"_"+r,n);else i(e,t,n)}function i(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}n.prototype.$nextTick=function(e){return si(e,this)},n.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,i=t._parentVnode;if(e._isMounted)for(var o in e.$slots)e.$slots[o]=re(e.$slots[o]);i&&(e.$scopedSlots=i.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=i;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(li.errorHandler)li.errorHandler.call(null,t,e);else{if(oi())throw t;console.error(t)}a=e._vnode}return a instanceof Ei||(a=Ni()),a.parent=i,a},n.prototype._h=Oe,n.prototype._s=e,n.prototype._n=t,n.prototype._e=Ni,n.prototype._q=h,n.prototype._i=m,n.prototype._m=function(e,t){var n=this._staticTrees[e];return n&&!t?Array.isArray(n)?re(n):ne(n):(n=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),r(n,"__static__"+e,!1),n)},n.prototype._o=function(e,t,n){return r(e,"__once__"+t+(n?"_"+n:""),!0),e};var o=function(e){return e};n.prototype._f=function(e){return P(this.$options,"filters",e,!0)||o},n.prototype._l=function(e,t){var n,r,i,o,a;if(Array.isArray(e))for(n=new Array(e.length),r=0,i=e.length;r<i;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(u(e))for(o=Object.keys(e),n=new Array(o.length),r=0,i=o.length;r<i;r++)a=o[r],n[r]=t(e[a],a,r);return n},n.prototype._t=function(e,t,n){var r=this.$scopedSlots&&this.$scopedSlots[e];if(r)return r(n||{})||t;var i=this.$slots[e];return i||t},n.prototype._b=function(e,t,n,r){if(n)if(u(n)){Array.isArray(n)&&(n=d(n));for(var i in n)if("class"===i||"style"===i)e[i]=n[i];else{var o=r||li.mustUseProp(t,i)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});o[i]=n[i]}}else;return e},n.prototype._k=function(e){return li.keyCodes[e]}}function Ee(e,t){var n={};if(!e)return n;for(var r,i,o=ce(e)||[],a=[],s=0,c=o.length;s<c;s++)if(i=o[s],(i.context===t||i.functionalContext===t)&&i.data&&(r=i.data.slot)){var l=n[r]||(n[r]=[]);"template"===i.tag?l.push.apply(l,i.children):l.push(i)}else a.push(i);return a.length&&(1!==a.length||" "!==a[0].text&&!a[0].isComment)&&(n.default=a),n}function Ne(e){e._events=Object.create(null);var t=e.$options._parentListeners,n=s(e.$on,e),r=s(e.$off,e);e._updateListeners=function(t,i){oe(t,i||{},n,r,e)},t&&e._updateListeners(t)}function Le(e){e.prototype.$on=function(e,t){var n=this;return(n._events[e]||(n._events[e]=[])).push(t),n},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var i,o=r.length;o--;)if(i=r[o],i===t||i.fn===t){r.splice(o,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?c(n):n;for(var r=c(arguments,1),i=0,o=n.length;i<o;i++)n[i].apply(t,r)}return t}}function De(e){e.prototype._init=function(e){var t=this;t._uid=Pi++,t._isVue=!0,e&&e._isComponent?Me(t,e):t.$options=M(Pe(t.constructor),e||{},t),t._renderProxy=t,t._self=t,de(t),Ne(t),ve(t,"beforeCreate"),K(t),ve(t,"created"),Te(t)}}function Me(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Pe(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,i=e.extendOptions;n!==r&&(e.superOptions=n,i.render=t.render,i.staticRenderFns=t.staticRenderFns,i._scopeId=t._scopeId,t=e.options=M(n,i),t.name&&(t.components[t.name]=e))}return t}function Re(e){this._init(e)}function Ie(e){e.use=function(e){if(!e.installed){var t=c(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function Fe(e){e.mixin=function(e){this.options=M(this.options,e)}}function Be(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,i=e._Ctor||(e._Ctor={});if(i[r])return i[r];var o=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=M(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,li._assetTypes.forEach(function(e){a[e]=n[e]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=e,i[r]=a,a}}function Ue(e){li._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&f(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function He(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ve(e){var t={};t.get=function(){return li},Object.defineProperty(e,"config",t),e.util=$i,e.set=O,e.delete=S,e.nextTick=si,e.options=Object.create(null),li._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,l(e.options.components,Fi),Ie(e),Fe(e),Be(e),Ue(e)}function ze(e){for(var t=e.data,n=e,r=e;r.child;)r=r.child._vnode,r.data&&(t=Je(r.data,t));for(;n=n.parent;)n.data&&(t=Je(t,n.data));return Ke(t)}function Je(e,t){return{staticClass:qe(e.staticClass,t.staticClass),class:e.class?[e.class,t.class]:t.class}}function Ke(e){var t=e.class,n=e.staticClass;return n||t?qe(n,We(t)):""}function qe(e,t){return e?t?e+" "+t:e:t||""}function We(e){var t="";if(!e)return t;if("string"==typeof e)return e;if(Array.isArray(e)){for(var n,r=0,i=e.length;r<i;r++)e[r]&&(n=We(e[r]))&&(t+=n+" ");return t.slice(0,-1)}if(u(e)){for(var o in e)e[o]&&(t+=o+" ");return t.slice(0,-1)}return t}function Ze(e){return Xi(e)?"svg":"math"===e?"math":void 0}function Ge(e){if(!Qr)return!0;if(to(e))return!1;if(e=e.toLowerCase(),null!=no[e])return no[e];var t=document.createElement(e);return e.indexOf("-")>-1?no[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:no[e]=/HTMLUnknownElement/.test(t.toString())}function Ye(e){if("string"==typeof e){if(e=document.querySelector(e),!e)return document.createElement("div")}return e}function Qe(e,t){var n=document.createElement(e);return"select"!==e?n:(t.data&&t.data.attrs&&"multiple"in t.data.attrs&&n.setAttribute("multiple","multiple"),n)}function Xe(e,t){return document.createElementNS(Wi[e],t)}function et(e){return document.createTextNode(e)}function tt(e){return document.createComment(e)}function nt(e,t,n){e.insertBefore(t,n)}function rt(e,t){e.removeChild(t)}function it(e,t){e.appendChild(t)}function ot(e){return e.parentNode}function at(e){return e.nextSibling}function st(e){return e.tagName}function ct(e,t){e.textContent=t}function lt(e){return e.childNodes}function ut(e,t,n){e.setAttribute(t,n)}function ft(e,t){var n=e.data.ref;if(n){var i=e.context,o=e.child||e.elm,a=i.$refs;t?Array.isArray(a[n])?r(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function dt(e){return null==e}function pt(e){return null!=e}function vt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,i,o={};for(r=t;r<=n;++r)i=e[r].key,pt(i)&&(o[i]=r);return o}function mt(e){function t(e){return new Ei(x.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=x.parentNode(e);t&&x.removeChild(t,e)}function i(e,t,n){var r,i=e.data;if(e.isRootInsert=!n,pt(i)&&(pt(r=i.hook)&&pt(r=r.init)&&r(e),pt(r=e.child)))return l(e,t),e.elm;var o=e.children,s=e.tag;return pt(s)?(e.elm=e.ns?x.createElementNS(e.ns,s):x.createElement(s,e),u(e),a(e,o,t),pt(i)&&c(e,t)):e.isComment?e.elm=x.createComment(e.text):e.elm=x.createTextNode(e.text),e.elm}function a(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)x.appendChild(e.elm,i(t[r],n,!0));else o(e.text)&&x.appendChild(e.elm,x.createTextNode(e.text))}function s(e){for(;e.child;)e=e.child._vnode;return pt(e.tag)}function c(e,t){for(var n=0;n<$.create.length;++n)$.create[n](oo,e);_=e.data.hook,pt(_)&&(_.create&&_.create(oo,e),_.insert&&t.push(e))}function l(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,s(e)?(c(e,t),u(e)):(ft(e),t.push(e))}function u(e){var t;pt(t=e.context)&&pt(t=t.$options._scopeId)&&x.setAttribute(e.elm,t,""),pt(t=Li)&&t!==e.context&&pt(t=t.$options._scopeId)&&x.setAttribute(e.elm,t,"")}function f(e,t,n,r,o,a){for(;r<=o;++r)x.insertBefore(e,i(n[r],a),t)}function d(e){var t,n,r=e.data;if(pt(r))for(pt(t=r.hook)&&pt(t=t.destroy)&&t(e),t=0;t<$.destroy.length;++t)$.destroy[t](e);if(pt(t=e.children))for(n=0;n<e.children.length;++n)d(e.children[n])}function p(e,t,n,r){for(;n<=r;++n){var i=t[n];pt(i)&&(pt(i.tag)?(v(i),d(i)):x.removeChild(e,i.elm))}}function v(e,t){if(t||pt(e.data)){var i=$.remove.length+1;for(t?t.listeners+=i:t=n(e.elm,i),pt(_=e.child)&&pt(_=_._vnode)&&pt(_.data)&&v(_,t),_=0;_<$.remove.length;++_)$.remove[_](e,t);pt(_=e.data.hook)&&pt(_=_.remove)?_(e,t):t()}else r(e.elm)}function h(e,t,n,r,o){for(var a,s,c,l,u=0,d=0,v=t.length-1,h=t[0],g=t[v],y=n.length-1,_=n[0],b=n[y],$=!o;u<=v&&d<=y;)dt(h)?h=t[++u]:dt(g)?g=t[--v]:vt(h,_)?(m(h,_,r),h=t[++u],_=n[++d]):vt(g,b)?(m(g,b,r),g=t[--v],b=n[--y]):vt(h,b)?(m(h,b,r),$&&x.insertBefore(e,h.elm,x.nextSibling(g.elm)),h=t[++u],b=n[--y]):vt(g,_)?(m(g,_,r),$&&x.insertBefore(e,g.elm,h.elm),g=t[--v],_=n[++d]):(dt(a)&&(a=ht(t,u,v)),s=pt(_.key)?a[_.key]:null,dt(s)?(x.insertBefore(e,i(_,r),h.elm),_=n[++d]):(c=t[s],c.tag!==_.tag?(x.insertBefore(e,i(_,r),h.elm),_=n[++d]):(m(c,_,r),t[s]=void 0,$&&x.insertBefore(e,_.elm,h.elm),_=n[++d])));u>v?(l=dt(n[y+1])?null:n[y+1].elm,f(e,l,n,d,y,r)):d>y&&p(e,t,u,v)}function m(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return void(t.elm=e.elm);var i,o=t.data,a=pt(o);a&&pt(i=o.hook)&&pt(i=i.prepatch)&&i(e,t);var c=t.elm=e.elm,l=e.children,u=t.children;if(a&&s(t)){for(i=0;i<$.update.length;++i)$.update[i](e,t);pt(i=o.hook)&&pt(i=i.update)&&i(e,t)}dt(t.text)?pt(l)&&pt(u)?l!==u&&h(c,l,u,n,r):pt(u)?(pt(e.text)&&x.setTextContent(c,""),f(c,null,u,0,u.length-1,n)):pt(l)?p(c,l,0,l.length-1):pt(e.text)&&x.setTextContent(c,""):e.text!==t.text&&x.setTextContent(c,t.text),a&&pt(i=o.hook)&&pt(i=i.postpatch)&&i(e,t)}}function g(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function y(e,t,n){t.elm=e;var r=t.tag,i=t.data,o=t.children;if(pt(i)&&(pt(_=i.hook)&&pt(_=_.init)&&_(t,!0),pt(_=t.child)))return l(t,n),!0;if(pt(r)){if(pt(o)){var s=x.childNodes(e);if(s.length){var u=!0;if(s.length!==o.length)u=!1;else for(var f=0;f<o.length;f++)if(!y(s[f],o[f],n)){u=!1;break}if(!u)return!1}else a(t,o,n)}pt(i)&&c(t,n)}return!0}var _,b,$={},w=e.modules,x=e.nodeOps;for(_=0;_<ao.length;++_)for($[ao[_]]=[],b=0;b<w.length;++b)void 0!==w[b][ao[_]]&&$[ao[_]].push(w[b][ao[_]]);return function(e,n,r,o){if(!n)return void(e&&d(e));var a,c,l=!1,u=[];if(e){var f=pt(e.nodeType);if(!f&&vt(e,n))m(e,n,u,o);else{if(f){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&y(e,n,u))return g(n,u,!0),e;e=t(e)}if(a=e.elm,c=x.parentNode(a),i(n,u),n.parent&&(n.parent.elm=n.elm,s(n)))for(var v=0;v<$.create.length;++v)$.create[v](oo,n.parent);null!==c?(x.insertBefore(c,n.elm,x.nextSibling(a)),p(c,[e],0,0)):pt(e.tag)&&d(e)}}else l=!0,i(n,u);return g(n,u,l),n.elm}}function gt(e,t){if(e.data.directives||t.data.directives){var n,r,i,o=e===oo,a=yt(e.data.directives,e.context),s=yt(t.data.directives,t.context),c=[],l=[];for(n in s)r=a[n],i=s[n],r?(i.oldValue=r.value,bt(i,"update",t,e),i.def&&i.def.componentUpdated&&l.push(i)):(bt(i,"bind",t,e),i.def&&i.def.inserted&&c.push(i));if(c.length){var u=function(){c.forEach(function(n){bt(n,"inserted",t,e)})};o?ie(t.data.hook||(t.data.hook={}),"insert",u,"dir-insert"):u()}if(l.length&&ie(t.data.hook||(t.data.hook={}),"postpatch",function(){l.forEach(function(n){bt(n,"componentUpdated",t,e)})},"dir-postpatch"),!o)for(n in a)s[n]||bt(a[n],"unbind",e)}}function yt(e,t){var n=Object.create(null);if(!e)return n;var r,i;for(r=0;r<e.length;r++)i=e[r],i.modifiers||(i.modifiers=co),n[_t(i)]=i,i.def=P(t.$options,"directives",i.name,!0);return n}function _t(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function bt(e,t,n,r){var i=e.def&&e.def[t];i&&i(n.elm,e,n,r)}function $t(e,t){if(e.data.attrs||t.data.attrs){var n,r,i,o=t.elm,a=e.data.attrs||{},s=t.data.attrs||{};s.__ob__&&(s=t.data.attrs=l({},s));for(n in s)r=s[n],i=a[n],i!==r&&wt(o,n,r);for(n in a)null==s[n]&&(Ji(n)?o.removeAttributeNS(zi,Ki(n)):Hi(n)||o.removeAttribute(n))}}function wt(e,t,n){Vi(t)?qi(n)?e.removeAttribute(t):e.setAttribute(t,t):Hi(t)?e.setAttribute(t,qi(n)||"false"===n?"false":"true"):Ji(t)?qi(n)?e.removeAttributeNS(zi,Ki(t)):e.setAttributeNS(zi,t,n):qi(n)?e.removeAttribute(t):e.setAttribute(t,n)}function xt(e,t){var n=t.elm,r=t.data,i=e.data;if(r.staticClass||r.class||i&&(i.staticClass||i.class)){var o=ze(t),a=n._transitionClasses;a&&(o=qe(o,We(a))),o!==n._prevClass&&(n.setAttribute("class",o),n._prevClass=o)}}function Ct(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{},i=t.elm._v_add||(t.elm._v_add=function(e,n,r){t.elm.addEventListener(e,n,r)}),o=t.elm._v_remove||(t.elm._v_remove=function(e,n){t.elm.removeEventListener(e,n)});oe(n,r,i,o,t.context)}}function kt(e,t){if(e.data.domProps||t.data.domProps){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};a.__ob__&&(a=t.data.domProps=l({},a));for(n in o)null==a[n]&&(i[n]="");for(n in a)if(r=a[n],"textContent"!==n&&"innerHTML"!==n||(t.children&&(t.children.length=0),r!==o[n]))if("value"===n){i._value=r;var s=null==r?"":String(r);i.value===s||i.composing||(i.value=s)}else i[n]=r}}function At(e){var t=Ot(e.style);return e.staticStyle?l(e.staticStyle,t):t}function Ot(e){return Array.isArray(e)?d(e):"string"==typeof e?ho(e):e}function St(e,t){var n,r={};if(t)for(var i=e;i.child;)i=i.child._vnode,i.data&&(n=At(i.data))&&l(r,n);(n=At(e.data))&&l(r,n);for(var o=e;o=o.parent;)o.data&&(n=At(o.data))&&l(r,n);return r}function Tt(e,t){var n=t.data,r=e.data;if(n.staticStyle||n.style||r.staticStyle||r.style){var i,o,a=t.elm,s=e.data.staticStyle,c=e.data.style||{},u=s||c,f=Ot(t.data.style)||{};t.data.style=f.__ob__?l({},f):f;var d=St(t,!0);for(o in u)null==d[o]&&go(a,o,"");for(o in d)i=d[o],i!==u[o]&&go(a,o,null==i?"":i)}}function jt(e,t){if(t&&t.trim())if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.add(t)}):e.classList.add(t);else{var n=" "+e.getAttribute("class")+" ";n.indexOf(" "+t+" ")<0&&e.setAttribute("class",(n+t).trim())}}function Et(e,t){if(t&&t.trim())if(e.classList)t.indexOf(" ")>-1?t.split(/\s+/).forEach(function(t){return e.classList.remove(t)}):e.classList.remove(t);else{for(var n=" "+e.getAttribute("class")+" ",r=" "+t+" ";n.indexOf(r)>=0;)n=n.replace(r," ");e.setAttribute("class",n.trim())}}function Nt(e){So(function(){So(e)})}function Lt(e,t){(e._transitionClasses||(e._transitionClasses=[])).push(t),jt(e,t)}function Dt(e,t){e._transitionClasses&&r(e._transitionClasses,t),Et(e,t)}function Mt(e,t,n){var r=Pt(e,t),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===wo?ko:Oo,c=0,l=function(){e.removeEventListener(s,u),n()},u=function(t){t.target===e&&++c>=a&&l()};setTimeout(function(){c<a&&l()},o+1),e.addEventListener(s,u)}function Pt(e,t){var n,r=window.getComputedStyle(e),i=r[Co+"Delay"].split(", "),o=r[Co+"Duration"].split(", "),a=Rt(i,o),s=r[Ao+"Delay"].split(", "),c=r[Ao+"Duration"].split(", "),l=Rt(s,c),u=0,f=0;t===wo?a>0&&(n=wo,u=a,f=o.length):t===xo?l>0&&(n=xo,u=l,f=c.length):(u=Math.max(a,l),n=u>0?a>l?wo:xo:null,f=n?n===wo?o.length:c.length:0);var d=n===wo&&To.test(r[Co+"Property"]);return{type:n,timeout:u,propCount:f,hasTransform:d}}function Rt(e,t){for(;e.length<t.length;)e=e.concat(e);return Math.max.apply(null,t.map(function(t,n){return It(t)+It(e[n])}))}function It(e){return 1e3*Number(e.slice(0,-1))}function Ft(e){var t=e.elm;t._leaveCb&&(t._leaveCb.cancelled=!0,t._leaveCb());var n=Ut(e.data.transition);if(n&&!t._enterCb&&1===t.nodeType){var r=n.css,i=n.type,o=n.enterClass,a=n.enterActiveClass,s=n.appearClass,c=n.appearActiveClass,l=n.beforeEnter,u=n.enter,f=n.afterEnter,d=n.enterCancelled,p=n.beforeAppear,v=n.appear,h=n.afterAppear,m=n.appearCancelled,g=Li.$vnode,y=g&&g.parent?g.parent.context:Li,_=!y._isMounted||!e.isRootInsert;if(!_||v||""===v){var b=_?s:o,$=_?c:a,w=_?p||l:l,x=_&&"function"==typeof v?v:u,C=_?h||f:f,k=_?m||d:d,A=r!==!1&&!ti,O=x&&(x._length||x.length)>1,S=t._enterCb=Ht(function(){A&&Dt(t,$),S.cancelled?(A&&Dt(t,b),k&&k(t)):C&&C(t),t._enterCb=null});e.data.show||ie(e.data.hook||(e.data.hook={}),"insert",function(){var n=t.parentNode,r=n&&n._pending&&n._pending[e.key];r&&r.tag===e.tag&&r.elm._leaveCb&&r.elm._leaveCb(),x&&x(t,S)},"transition-insert"),w&&w(t),A&&(Lt(t,b),Lt(t,$),Nt(function(){Dt(t,b),S.cancelled||O||Mt(t,i,S)})),e.data.show&&x&&x(t,S),A||O||S()}}}function Bt(e,t){function n(){m.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),l&&l(r),v&&(Lt(r,s),Lt(r,c),Nt(function(){Dt(r,s),m.cancelled||h||Mt(r,a,m)})),u&&u(r,m),v||h||m())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var i=Ut(e.data.transition);if(!i)return t();if(!r._leaveCb&&1===r.nodeType){var o=i.css,a=i.type,s=i.leaveClass,c=i.leaveActiveClass,l=i.beforeLeave,u=i.leave,f=i.afterLeave,d=i.leaveCancelled,p=i.delayLeave,v=o!==!1&&!ti,h=u&&(u._length||u.length)>1,m=r._leaveCb=Ht(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),v&&Dt(r,c),m.cancelled?(v&&Dt(r,s),d&&d(r)):(t(),f&&f(r)),r._leaveCb=null});p?p(n):n()}}function Ut(e){if(e){if("object"==typeof e){var t={};return e.css!==!1&&l(t,jo(e.name||"v")),l(t,e),t}return"string"==typeof e?jo(e):void 0}}function Ht(e){var t=!1;return function(){
-t||(t=!0,e())}}function Vt(e,t,n){var r=t.value,i=e.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,c=e.options.length;s<c;s++)if(a=e.options[s],i)o=m(r,Jt(a))>-1,a.selected!==o&&(a.selected=o);else if(h(Jt(a),r))return void(e.selectedIndex!==s&&(e.selectedIndex=s));i||(e.selectedIndex=-1)}}function zt(e,t){for(var n=0,r=t.length;n<r;n++)if(h(Jt(t[n]),e))return!1;return!0}function Jt(e){return"_value"in e?e._value:e.value}function Kt(e){e.target.composing=!0}function qt(e){e.target.composing=!1,Wt(e.target,"input")}function Wt(e,t){var n=document.createEvent("HTMLEvents");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function Zt(e){return!e.child||e.data&&e.data.transition?e:Zt(e.child._vnode)}function Gt(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Gt(fe(t.children)):e}function Yt(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var i=n._parentListeners;for(var o in i)t[Vr(o)]=i[o].fn;return t}function Qt(e,t){return/\d-keep-alive$/.test(t.tag)?e("keep-alive"):null}function Xt(e){for(;e=e.parent;)if(e.data.transition)return!0}function en(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function tn(e){e.data.newPos=e.elm.getBoundingClientRect()}function nn(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,i=t.top-n.top;if(r||i){e.data.moved=!0;var o=e.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+i+"px)",o.transitionDuration="0s"}}function rn(e,t){var n=document.createElement("div");return n.innerHTML='<div a="'+e+'">',n.innerHTML.indexOf(t)>0}function on(e){return Vo=Vo||document.createElement("div"),Vo.innerHTML=e,Vo.textContent}function an(e,t){return t&&(e=e.replace(Da,"\n")),e.replace(Na,"<").replace(La,">").replace(Ma,"&").replace(Pa,'"')}function sn(e,t){function n(t){f+=t,e=e.substring(t)}function r(){var t=e.match(Yo);if(t){var r={tagName:t[1],attrs:[],start:f};n(t[0].length);for(var i,o;!(i=e.match(Qo))&&(o=e.match(Wo));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=f,r}}function i(e){var n=e.tagName,r=e.unarySlash;l&&("p"===s&&Qi(n)&&o("",s),Yi(n)&&s===n&&o("",n));for(var i=u(n)||"html"===n&&"head"===s||!!r,a=e.attrs.length,f=new Array(a),d=0;d<a;d++){var p=e.attrs[d];ra&&p[0].indexOf('""')===-1&&(""===p[3]&&delete p[3],""===p[4]&&delete p[4],""===p[5]&&delete p[5]);var v=p[3]||p[4]||p[5]||"";f[d]={name:p[1],value:an(v,t.shouldDecodeNewlines)}}i||(c.push({tag:n,attrs:f}),s=n,r=""),t.start&&t.start(n,f,i,e.start,e.end)}function o(e,n,r,i){var o;if(null==r&&(r=f),null==i&&(i=f),n){var a=n.toLowerCase();for(o=c.length-1;o>=0&&c[o].tag.toLowerCase()!==a;o--);}else o=0;if(o>=0){for(var l=c.length-1;l>=o;l--)t.end&&t.end(c[l].tag,r,i);c.length=o,s=o&&c[o-1].tag}else"br"===n.toLowerCase()?t.start&&t.start(n,[],!0,r,i):"p"===n.toLowerCase()&&(t.start&&t.start(n,[],!1,r,i),t.end&&t.end(n,r,i))}for(var a,s,c=[],l=t.expectHTML,u=t.isUnaryTag||Zr,f=0;e;){if(a=e,s&&ja(s,t.sfc,c)){var d=s.toLowerCase(),p=Ea[d]||(Ea[d]=new RegExp("([\\s\\S]*?)(</"+d+"[^>]*>)","i")),v=0,h=e.replace(p,function(e,n,r){return v=r.length,"script"!==d&&"style"!==d&&"noscript"!==d&&(n=n.replace(/<!--([\s\S]*?)-->/g,"$1").replace(/<!\[CDATA\[([\s\S]*?)]]>/g,"$1")),t.chars&&t.chars(n),""});f+=e.length-h.length,e=h,o("</"+d+">",d,f-v,f)}else{var m=e.indexOf("<");if(0===m){if(ta.test(e)){var g=e.indexOf("-->");if(g>=0){n(g+3);continue}}if(na.test(e)){var y=e.indexOf("]>");if(y>=0){n(y+2);continue}}var _=e.match(ea);if(_){n(_[0].length);continue}var b=e.match(Xo);if(b){var $=f;n(b[0].length),o(b[0],b[1],$,f);continue}var w=r();if(w){i(w);continue}}var x=void 0,C=void 0,k=void 0;if(m>0){for(C=e.slice(m);!(Xo.test(C)||Yo.test(C)||ta.test(C)||na.test(C)||(k=C.indexOf("<",1),k<0));)m+=k,C=e.slice(m);x=e.substring(0,m),n(m)}m<0&&(x=e,e=""),t.chars&&x&&t.chars(x)}if(e===a&&t.chars){t.chars(e);break}}o()}function cn(e){function t(){(a||(a=[])).push(e.slice(v,i).trim()),v=i+1}var n,r,i,o,a,s=!1,c=!1,l=!1,u=!1,f=0,d=0,p=0,v=0;for(i=0;i<e.length;i++)if(r=n,n=e.charCodeAt(i),s)39===n&&92!==r&&(s=!1);else if(c)34===n&&92!==r&&(c=!1);else if(l)96===n&&92!==r&&(l=!1);else if(u)47===n&&92!==r&&(u=!1);else if(124!==n||124===e.charCodeAt(i+1)||124===e.charCodeAt(i-1)||f||d||p)switch(n){case 34:c=!0;break;case 39:s=!0;break;case 96:l=!0;break;case 47:u=!0;break;case 40:p++;break;case 41:p--;break;case 91:d++;break;case 93:d--;break;case 123:f++;break;case 125:f--}else void 0===o?(v=i+1,o=e.slice(0,i).trim()):t();if(void 0===o?o=e.slice(0,i).trim():0!==v&&t(),a)for(i=0;i<a.length;i++)o=ln(o,a[i]);return o}function ln(e,t){var n=t.indexOf("(");if(n<0)return'_f("'+t+'")('+e+")";var r=t.slice(0,n),i=t.slice(n+1);return'_f("'+r+'")('+e+","+i}function un(e,t){var n=t?Fa(t):Ra;if(n.test(e)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(e);){i=r.index,i>a&&o.push(JSON.stringify(e.slice(a,i)));var s=cn(r[1].trim());o.push("_s("+s+")"),a=i+r[0].length}return a<e.length&&o.push(JSON.stringify(e.slice(a))),o.join("+")}}function fn(e){console.error("[Vue parser]: "+e)}function dn(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function pn(e,t,n){(e.props||(e.props=[])).push({name:t,value:n})}function vn(e,t,n){(e.attrs||(e.attrs=[])).push({name:t,value:n})}function hn(e,t,n,r,i,o){(e.directives||(e.directives=[])).push({name:t,rawName:n,value:r,arg:i,modifiers:o})}function mn(e,t,n,r,i){r&&r.capture&&(delete r.capture,t="!"+t);var o;r&&r.native?(delete r.native,o=e.nativeEvents||(e.nativeEvents={})):o=e.events||(e.events={});var a={value:n,modifiers:r},s=o[t];Array.isArray(s)?i?s.unshift(a):s.push(a):s?o[t]=i?[a,s]:[s,a]:o[t]=a}function gn(e,t,n){var r=yn(e,":"+t)||yn(e,"v-bind:"+t);if(null!=r)return cn(r);if(n!==!1){var i=yn(e,t);if(null!=i)return JSON.stringify(i)}}function yn(e,t){var n;if(null!=(n=e.attrsMap[t]))for(var r=e.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===t){r.splice(i,1);break}return n}function _n(e){if(oa=e,ia=oa.length,sa=ca=la=0,e.indexOf("[")<0||e.lastIndexOf("]")<ia-1)return{exp:e,idx:null};for(;!$n();)aa=bn(),wn(aa)?Cn(aa):91===aa&&xn(aa);return{exp:e.substring(0,ca),idx:e.substring(ca+1,la)}}function bn(){return oa.charCodeAt(++sa)}function $n(){return sa>=ia}function wn(e){return 34===e||39===e}function xn(e){var t=1;for(ca=sa;!$n();)if(e=bn(),wn(e))Cn(e);else if(91===e&&t++,93===e&&t--,0===t){la=sa;break}}function Cn(e){for(var t=e;!$n()&&(e=bn(),e!==t););}function kn(e,t){ua=t.warn||fn,fa=t.getTagNamespace||Zr,da=t.mustUseProp||Zr,pa=t.isPreTag||Zr,va=dn(t.modules,"preTransformNode"),ha=dn(t.modules,"transformNode"),ma=dn(t.modules,"postTransformNode"),ga=t.delimiters;var n,r,i=[],o=t.preserveWhitespace!==!1,a=!1,s=!1;return sn(e,{expectHTML:t.expectHTML,isUnaryTag:t.isUnaryTag,shouldDecodeNewlines:t.shouldDecodeNewlines,start:function(e,o,c){function l(e){}var u=r&&r.ns||fa(e);ei&&"svg"===u&&(o=Vn(o));var f={type:1,tag:e,attrsList:o,attrsMap:Bn(o),parent:r,children:[]};u&&(f.ns=u),Hn(f)&&!oi()&&(f.forbidden=!0);for(var d=0;d<va.length;d++)va[d](f,t);if(a||(An(f),f.pre&&(a=!0)),pa(f.tag)&&(s=!0),a)On(f);else{jn(f),En(f),Dn(f),Sn(f),f.plain=!f.key&&!o.length,Tn(f),Mn(f),Pn(f);for(var p=0;p<ha.length;p++)ha[p](f,t);Rn(f)}if(n?i.length||n.if&&(f.elseif||f.else)&&(l(f),Ln(n,{exp:f.elseif,block:f})):(n=f,l(n)),r&&!f.forbidden)if(f.elseif||f.else)Nn(f,r);else if(f.slotScope){r.plain=!1;var v=f.slotTarget||"default";(r.scopedSlots||(r.scopedSlots={}))[v]=f}else r.children.push(f),f.parent=r;c||(r=f,i.push(f));for(var h=0;h<ma.length;h++)ma[h](f,t)},end:function(){var e=i[i.length-1],t=e.children[e.children.length-1];t&&3===t.type&&" "===t.text&&e.children.pop(),i.length-=1,r=i[i.length-1],e.pre&&(a=!1),pa(e.tag)&&(s=!1)},chars:function(e){if(r&&(!ei||"textarea"!==r.tag||r.attrsMap.placeholder!==e)&&(e=s||e.trim()?qa(e):o&&r.children.length?" ":"")){var t;!a&&" "!==e&&(t=un(e,ga))?r.children.push({type:2,expression:t,text:e}):r.children.push({type:3,text:e})}}}),n}function An(e){null!=yn(e,"v-pre")&&(e.pre=!0)}function On(e){var t=e.attrsList.length;if(t)for(var n=e.attrs=new Array(t),r=0;r<t;r++)n[r]={name:e.attrsList[r].name,value:JSON.stringify(e.attrsList[r].value)};else e.pre||(e.plain=!0)}function Sn(e){var t=gn(e,"key");t&&(e.key=t)}function Tn(e){var t=gn(e,"ref");t&&(e.ref=t,e.refInFor=In(e))}function jn(e){var t;if(t=yn(e,"v-for")){var n=t.match(Ua);if(!n)return;e.for=n[2].trim();var r=n[1].trim(),i=r.match(Ha);i?(e.alias=i[1].trim(),e.iterator1=i[2].trim(),i[3]&&(e.iterator2=i[3].trim())):e.alias=r}}function En(e){var t=yn(e,"v-if");if(t)e.if=t,Ln(e,{exp:t,block:e});else{null!=yn(e,"v-else")&&(e.else=!0);var n=yn(e,"v-else-if");n&&(e.elseif=n)}}function Nn(e,t){var n=Un(t.children);n&&n.if&&Ln(n,{exp:e.elseif,block:e})}function Ln(e,t){e.conditions||(e.conditions=[]),e.conditions.push(t)}function Dn(e){var t=yn(e,"v-once");null!=t&&(e.once=!0)}function Mn(e){if("slot"===e.tag)e.slotName=gn(e,"name");else{var t=gn(e,"slot");t&&(e.slotTarget='""'===t?'"default"':t),"template"===e.tag&&(e.slotScope=yn(e,"scope"))}}function Pn(e){var t;(t=gn(e,"is"))&&(e.component=t),null!=yn(e,"inline-template")&&(e.inlineTemplate=!0)}function Rn(e){var t,n,r,i,o,a,s,c,l=e.attrsList;for(t=0,n=l.length;t<n;t++)if(r=i=l[t].name,o=l[t].value,Ba.test(r))if(e.hasBindings=!0,s=Fn(r),s&&(r=r.replace(Ka,"")),Va.test(r))r=r.replace(Va,""),o=cn(o),s&&(s.prop&&(c=!0,r=Vr(r),"innerHtml"===r&&(r="innerHTML")),s.camel&&(r=Vr(r))),c||da(e.tag,r)?pn(e,r,o):vn(e,r,o);else if(za.test(r))r=r.replace(za,""),mn(e,r,o,s);else{r=r.replace(Ba,"");var u=r.match(Ja);u&&(a=u[1])&&(r=r.slice(0,-(a.length+1))),hn(e,r,i,o,a,s)}else vn(e,r,JSON.stringify(o))}function In(e){for(var t=e;t;){if(void 0!==t.for)return!0;t=t.parent}return!1}function Fn(e){var t=e.match(Ka);if(t){var n={};return t.forEach(function(e){n[e.slice(1)]=!0}),n}}function Bn(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].value;return t}function Un(e){for(var t=e.length;t--;)if(e[t].tag)return e[t]}function Hn(e){return"style"===e.tag||"script"===e.tag&&(!e.attrsMap.type||"text/javascript"===e.attrsMap.type)}function Vn(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Wa.test(r.name)||(r.name=r.name.replace(Za,""),t.push(r))}return t}function zn(e,t){e&&(ya=Ga(t.staticKeys||""),_a=t.isReservedTag||function(){return!1},Kn(e),qn(e,!1))}function Jn(e){return n("type,tag,attrsList,attrsMap,plain,parent,children,attrs"+(e?","+e:""))}function Kn(e){if(e.static=Zn(e),1===e.type){if(!_a(e.tag)&&"slot"!==e.tag&&null==e.attrsMap["inline-template"])return;for(var t=0,n=e.children.length;t<n;t++){var r=e.children[t];Kn(r),r.static||(e.static=!1)}}}function qn(e,t){if(1===e.type){if((e.static||e.once)&&(e.staticInFor=t),e.static&&e.children.length&&(1!==e.children.length||3!==e.children[0].type))return void(e.staticRoot=!0);if(e.staticRoot=!1,e.children)for(var n=0,r=e.children.length;n<r;n++)qn(e.children[n],t||!!e.for);e.conditions&&Wn(e.conditions,t)}}function Wn(e,t){for(var n=1,r=e.length;n<r;n++)qn(e[n].block,t)}function Zn(e){return 2!==e.type&&(3===e.type||!(!e.pre&&(e.hasBindings||e.if||e.for||Br(e.tag)||!_a(e.tag)||Gn(e)||!Object.keys(e).every(ya))))}function Gn(e){for(;e.parent;){if(e=e.parent,"template"!==e.tag)return!1;if(e.for)return!0}return!1}function Yn(e,t){var n=t?"nativeOn:{":"on:{";for(var r in e)n+='"'+r+'":'+Qn(r,e[r])+",";return n.slice(0,-1)+"}"}function Qn(e,t){if(t){if(Array.isArray(t))return"["+t.map(function(t){return Qn(e,t)}).join(",")+"]";if(t.modifiers){var n="",r=[],i=ts.test(e);for(var o in t.modifiers)es[o]?n+=es[o]:i&&ns[o]?n+=ns[o]:r.push(o);r.length&&(n=Xn(r)+n);var a=Qa.test(t.value)?t.value+"($event)":t.value;return"function($event){"+n+a+"}"}return Ya.test(t.value)||Qa.test(t.value)?t.value:"function($event){"+t.value+"}"}return"function(){}"}function Xn(e){var t=1===e.length?er(e[0]):Array.prototype.concat.apply([],e.map(er));return Array.isArray(t)?"if("+t.map(function(e){return"$event.keyCode!=="+e}).join("&&")+")return;":"if($event.keyCode!=="+t+")return;"}function er(e){return parseInt(e,10)||Xa[e]||"_k("+JSON.stringify(e)+")"}function tr(e,t){e.wrapData=function(n){return"_b("+n+",'"+e.tag+"',"+t.value+(t.modifiers&&t.modifiers.prop?",true":"")+")"}}function nr(e,t){var n=Ca,r=Ca=[],i=ka;ka=0,Aa=t,ba=t.warn||fn,$a=dn(t.modules,"transformCode"),wa=dn(t.modules,"genData"),xa=t.directives||{};var o=e?rr(e):'_h("div")';return Ca=n,ka=i,{render:"with(this){return "+o+"}",staticRenderFns:r}}function rr(e){if(e.staticRoot&&!e.staticProcessed)return ir(e);if(e.once&&!e.onceProcessed)return or(e);if(e.for&&!e.forProcessed)return cr(e);if(e.if&&!e.ifProcessed)return ar(e);if("template"!==e.tag||e.slotTarget){if("slot"===e.tag)return gr(e);var t;if(e.component)t=yr(e.component,e);else{var n=e.plain?void 0:lr(e),r=e.inlineTemplate?null:vr(e);t="_h('"+e.tag+"'"+(n?","+n:"")+(r?","+r:"")+")"}for(var i=0;i<$a.length;i++)t=$a[i](e,t);return t}return vr(e)||"void 0"}function ir(e){return e.staticProcessed=!0,Ca.push("with(this){return "+rr(e)+"}"),"_m("+(Ca.length-1)+(e.staticInFor?",true":"")+")"}function or(e){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return ar(e);if(e.staticInFor){for(var t="",n=e.parent;n;){if(n.for){t=n.key;break}n=n.parent}return t?"_o("+rr(e)+","+ka++ +(t?","+t:"")+")":rr(e)}return ir(e)}function ar(e){return e.ifProcessed=!0,sr(e.conditions)}function sr(e){function t(e){return e.once?or(e):rr(e)}if(!e.length)return"_e()";var n=e.shift();return n.exp?"("+n.exp+")?"+t(n.block)+":"+sr(e):""+t(n.block)}function cr(e){var t=e.for,n=e.alias,r=e.iterator1?","+e.iterator1:"",i=e.iterator2?","+e.iterator2:"";return e.forProcessed=!0,"_l(("+t+"),function("+n+r+i+"){return "+rr(e)+"})"}function lr(e){var t="{",n=ur(e);n&&(t+=n+","),e.key&&(t+="key:"+e.key+","),e.ref&&(t+="ref:"+e.ref+","),e.refInFor&&(t+="refInFor:true,"),e.component&&(t+='tag:"'+e.tag+'",');for(var r=0;r<wa.length;r++)t+=wa[r](e);if(e.attrs&&(t+="attrs:{"+_r(e.attrs)+"},"),e.props&&(t+="domProps:{"+_r(e.props)+"},"),e.events&&(t+=Yn(e.events)+","),e.nativeEvents&&(t+=Yn(e.nativeEvents,!0)+","),e.slotTarget&&(t+="slot:"+e.slotTarget+","),e.scopedSlots&&(t+=dr(e.scopedSlots)+","),e.inlineTemplate){var i=fr(e);i&&(t+=i+",")}return t=t.replace(/,$/,"")+"}",e.wrapData&&(t=e.wrapData(t)),t}function ur(e){var t=e.directives;if(t){var n,r,i,o,a="directives:[",s=!1;for(n=0,r=t.length;n<r;n++){i=t[n],o=!0;var c=xa[i.name]||rs[i.name];c&&(o=!!c(e,i,ba)),o&&(s=!0,a+='{name:"'+i.name+'",rawName:"'+i.rawName+'"'+(i.value?",value:("+i.value+"),expression:"+JSON.stringify(i.value):"")+(i.arg?',arg:"'+i.arg+'"':"")+(i.modifiers?",modifiers:"+JSON.stringify(i.modifiers):"")+"},")}return s?a.slice(0,-1)+"]":void 0}}function fr(e){var t=e.children[0];if(1===t.type){var n=nr(t,Aa);return"inlineTemplate:{render:function(){"+n.render+"},staticRenderFns:["+n.staticRenderFns.map(function(e){return"function(){"+e+"}"}).join(",")+"]}"}}function dr(e){return"scopedSlots:{"+Object.keys(e).map(function(t){return pr(t,e[t])}).join(",")+"}"}function pr(e,t){return e+":function("+String(t.attrsMap.scope)+"){return "+("template"===t.tag?vr(t)||"void 0":rr(t))+"}"}function vr(e){if(e.children.length)return"["+e.children.map(hr).join(",")+"]"}function hr(e){return 1===e.type?rr(e):mr(e)}function mr(e){return 2===e.type?e.expression:br(JSON.stringify(e.text))}function gr(e){var t=e.slotName||'"default"',n=vr(e);return"_t("+t+(n?","+n:"")+(e.attrs?(n?"":",null")+",{"+e.attrs.map(function(e){return Vr(e.name)+":"+e.value}).join(",")+"}":"")+")"}function yr(e,t){var n=t.inlineTemplate?null:vr(t);return"_h("+e+","+lr(t)+(n?","+n:"")+")"}function _r(e){for(var t="",n=0;n<e.length;n++){var r=e[n];t+='"'+r.name+'":'+br(r.value)+","}return t.slice(0,-1)}function br(e){return e.replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}function $r(e,t){var n=kn(e.trim(),t);zn(n,t);var r=nr(n,t);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}function wr(e,t){var n=(t.warn||fn,yn(e,"class"));n&&(e.staticClass=JSON.stringify(n));var r=gn(e,"class",!1);r&&(e.classBinding=r)}function xr(e){var t="";return e.staticClass&&(t+="staticClass:"+e.staticClass+","),e.classBinding&&(t+="class:"+e.classBinding+","),t}function Cr(e,t){var n=(t.warn||fn,yn(e,"style"));n&&(e.staticStyle=JSON.stringify(ho(n)));var r=gn(e,"style",!1);r&&(e.styleBinding=r)}function kr(e){var t="";return e.staticStyle&&(t+="staticStyle:"+e.staticStyle+","),e.styleBinding&&(t+="style:("+e.styleBinding+"),"),t}function Ar(e,t,n){Oa=n;var r=t.value,i=t.modifiers,o=e.tag,a=e.attrsMap.type;return"select"===o?jr(e,r,i):"input"===o&&"checkbox"===a?Or(e,r,i):"input"===o&&"radio"===a?Sr(e,r,i):Tr(e,r,i),!0}function Or(e,t,n){var r=n&&n.number,i=gn(e,"value")||"null",o=gn(e,"true-value")||"true",a=gn(e,"false-value")||"false";pn(e,"checked","Array.isArray("+t+")?_i("+t+","+i+")>-1:_q("+t+","+o+")"),mn(e,"change","var $$a="+t+",$$el=$event.target,$$c=$$el.checked?("+o+"):("+a+");if(Array.isArray($$a)){var $$v="+(r?"_n("+i+")":i)+",$$i=_i($$a,$$v);if($$c){$$i<0&&("+t+"=$$a.concat($$v))}else{$$i>-1&&("+t+"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{"+t+"=$$c}",null,!0)}function Sr(e,t,n){var r=n&&n.number,i=gn(e,"value")||"null";i=r?"_n("+i+")":i,pn(e,"checked","_q("+t+","+i+")"),mn(e,"change",Er(t,i),null,!0)}function Tr(e,t,n){var r=e.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,c=o||ei&&"range"===r?"change":"input",l=!o&&"range"!==r,u="input"===e.tag||"textarea"===e.tag,f=u?"$event.target.value"+(s?".trim()":""):s?"(typeof $event === 'string' ? $event.trim() : $event)":"$event";f=a||"number"===r?"_n("+f+")":f;var d=Er(t,f);u&&l&&(d="if($event.target.composing)return;"+d),pn(e,"value",u?"_s("+t+")":"("+t+")"),mn(e,c,d,null,!0)}function jr(e,t,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = "_value" in o ? o._value : o.value;return '+(r?"_n(val)":"val")+"})"+(null==e.attrsMap.multiple?"[0]":""),o=Er(t,i);mn(e,"change",o,null,!0)}function Er(e,t){var n=_n(e);return null===n.idx?e+"="+t:"var $$exp = "+n.exp+", $$idx = "+n.idx+";if (!Array.isArray($$exp)){"+e+"="+t+"}else{$$exp.splice($$idx, 1, "+t+")}"}function Nr(e,t){t.value&&pn(e,"textContent","_s("+t.value+")")}function Lr(e,t){t.value&&pn(e,"innerHTML","_s("+t.value+")")}function Dr(e,t){return t=t?l(l({},ls),t):ls,$r(e,t)}function Mr(e,t,n){var r=(t&&t.warn||ui,t&&t.delimiters?String(t.delimiters)+e:e);if(cs[r])return cs[r];var i={},o=Dr(e,t);i.render=Pr(o.render);var a=o.staticRenderFns.length;i.staticRenderFns=new Array(a);for(var s=0;s<a;s++)i.staticRenderFns[s]=Pr(o.staticRenderFns[s]);return cs[r]=i}function Pr(e){try{return new Function(e)}catch(e){return p}}function Rr(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement("div");return t.appendChild(e.cloneNode(!0)),t.innerHTML}var Ir,Fr,Br=n("slot,component",!0),Ur=Object.prototype.hasOwnProperty,Hr=/-(\w)/g,Vr=a(function(e){return e.replace(Hr,function(e,t){return t?t.toUpperCase():""})}),zr=a(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),Jr=/([^-])([A-Z])/g,Kr=a(function(e){return e.replace(Jr,"$1-$2").replace(Jr,"$1-$2").toLowerCase()}),qr=Object.prototype.toString,Wr="[object Object]",Zr=function(){return!1},Gr=/[^\w.$]/,Yr="__proto__"in{},Qr="undefined"!=typeof window&&"[object Object]"!==Object.prototype.toString.call(window),Xr=Qr&&window.navigator.userAgent.toLowerCase(),ei=Xr&&/msie|trident/.test(Xr),ti=Xr&&Xr.indexOf("msie 9.0")>0,ni=Xr&&Xr.indexOf("edge/")>0,ri=Xr&&Xr.indexOf("android")>0,ii=Xr&&/iphone|ipad|ipod|ios/.test(Xr),oi=function(){return void 0===Ir&&(Ir=!Qr&&"undefined"!=typeof global&&"server"===global.process.env.VUE_ENV),Ir},ai=Qr&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,si=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&b(Promise)){var i=Promise.resolve();t=function(){i.then(e),ii&&setTimeout(p)}}else if("undefined"==typeof MutationObserver||!b(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var o=1,a=new MutationObserver(e),s=document.createTextNode(String(o));a.observe(s,{characterData:!0}),t=function(){o=(o+1)%2,s.data=String(o)}}return function(e,i){var o;if(n.push(function(){e&&e.call(i),o&&o(i)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){o=e})}}();Fr="undefined"!=typeof Set&&b(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return void 0!==this.set[e]},e.prototype.add=function(e){this.set[e]=1},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ci,li={optionMergeStrategies:Object.create(null),silent:!1,devtools:!1,errorHandler:null,ignoredElements:null,keyCodes:Object.create(null),isReservedTag:Zr,isUnknownElement:Zr,getTagNamespace:p,mustUseProp:Zr,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100},ui=p,fi=0,di=function(){this.id=fi++,this.subs=[]};di.prototype.addSub=function(e){this.subs.push(e)},di.prototype.removeSub=function(e){r(this.subs,e)},di.prototype.depend=function(){di.target&&di.target.addDep(this)},di.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},di.target=null;var pi=[],vi=Array.prototype,hi=Object.create(vi);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=vi[e];y(hi,e,function(){for(var n=arguments,r=arguments.length,i=new Array(r);r--;)i[r]=n[r];var o,a=t.apply(this,i),s=this.__ob__;switch(e){case"push":o=i;break;case"unshift":o=i;break;case"splice":o=i.slice(2)}return o&&s.observeArray(o),s.dep.notify(),a})});var mi=Object.getOwnPropertyNames(hi),gi={shouldConvert:!0,isSettingProps:!1},yi=function(e){if(this.value=e,this.dep=new di,this.vmCount=0,y(e,"__ob__",this),Array.isArray(e)){var t=Yr?x:C;t(e,hi,mi),this.observeArray(e)}else this.walk(e)};yi.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)A(e,t[n],e[t[n]])},yi.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)k(e[t])};var _i=li.optionMergeStrategies;_i.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,i="function"==typeof e?e.call(n):void 0;return r?j(r,i):i}:void 0:t?"function"!=typeof t?e:e?function(){return j(t.call(this),e.call(this))}:t:e},li._lifecycleHooks.forEach(function(e){_i[e]=E}),li._assetTypes.forEach(function(e){_i[e+"s"]=N}),_i.watch=function(e,t){if(!t)return e;if(!e)return t;var n={};l(n,e);for(var r in t){var i=n[r],o=t[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):[o]}return n},_i.props=_i.methods=_i.computed=function(e,t){if(!t)return e;if(!e)return t;var n=Object.create(null);return l(n,e),l(n,t),n};var bi=function(e,t){return void 0===t?e:t},$i=Object.freeze({defineReactive:A,_toString:e,toNumber:t,makeMap:n,isBuiltInTag:Br,remove:r,hasOwn:i,isPrimitive:o,cached:a,camelize:Vr,capitalize:zr,hyphenate:Kr,bind:s,toArray:c,extend:l,isObject:u,isPlainObject:f,toObject:d,noop:p,no:Zr,genStaticKeys:v,looseEqual:h,looseIndexOf:m,isReserved:g,def:y,parsePath:_,hasProto:Yr,inBrowser:Qr,UA:Xr,isIE:ei,isIE9:ti,isEdge:ni,isAndroid:ri,isIOS:ii,isServerRendering:oi,devtools:ai,nextTick:si,get _Set(){return Fr},mergeOptions:M,resolveAsset:P,warn:ui,formatComponentName:ci,validateProp:R}),wi=[],xi={},Ci=!1,ki=!1,Ai=0,Oi=0,Si=function(e,t,n,r){void 0===r&&(r={}),this.vm=e,e._watchers.push(this),this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.expression=t.toString(),this.cb=n,this.id=++Oi,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Fr,this.newDepIds=new Fr,"function"==typeof t?this.getter=t:(this.getter=_(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Si.prototype.get=function(){$(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&z(e),w(),this.cleanupDeps(),e},Si.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Si.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Si.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():V(this)},Si.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||u(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){if(!li.errorHandler)throw e;li.errorHandler.call(null,e,this.vm)}else this.cb.call(this.vm,e,t)}}},Si.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Si.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Si.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||r(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Ti=new Fr,ji={enumerable:!0,configurable:!0,get:p,set:p},Ei=function(e,t,n,r,i,o,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=i,this.ns=o,this.context=a,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=s,this.child=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},Ni=function(){var e=new Ei;return e.text="",e.isComment=!0,e},Li=null,Di={init:ye,prepatch:_e,insert:be,destroy:$e},Mi=Object.keys(Di),Pi=0;De(Re),ee(Re),Le(Re),pe(Re),je(Re);var Ri=[String,RegExp],Ii={name:"keep-alive",abstract:!0,props:{include:Ri,exclude:Ri},created:function(){this.cache=Object.create(null)},render:function(){var e=fe(this.$slots.default);if(e&&e.componentOptions){var t=e.componentOptions,n=t.Ctor.options.name||t.tag;if(n&&(this.include&&!He(this.include,n)||this.exclude&&He(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.child=this.cache[r].child:this.cache[r]=e,e.data.keepAlive=!0}return e},destroyed:function(){var e=this;for(var t in this.cache){var n=e.cache[t];ve(n.child,"deactivated"),n.child.$destroy()}}},Fi={KeepAlive:Ii};Ve(Re),Object.defineProperty(Re.prototype,"$isServer",{get:oi}),Re.version="2.1.0";var Bi,Ui=function(e,t){return"value"===t&&("input"===e||"textarea"===e||"option"===e)||"selected"===t&&"option"===e||"checked"===t&&"input"===e||"muted"===t&&"video"===e},Hi=n("contenteditable,draggable,spellcheck"),Vi=n("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),zi="http://www.w3.org/1999/xlink",Ji=function(e){return":"===e.charAt(5)&&"xlink"===e.slice(0,5)},Ki=function(e){return Ji(e)?e.slice(6,e.length):""},qi=function(e){return null==e||e===!1},Wi={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML",xhtml:"http://www.w3.org/1999/xhtml"},Zi=n("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template"),Gi=n("area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr",!0),Yi=n("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source",!0),Qi=n("address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track",!0),Xi=n("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font,font-face,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),eo=function(e){return"pre"===e},to=function(e){return Zi(e)||Xi(e)},no=Object.create(null),ro=Object.freeze({createElement:Qe,createElementNS:Xe,createTextNode:et,createComment:tt,insertBefore:nt,removeChild:rt,appendChild:it,parentNode:ot,nextSibling:at,tagName:st,setTextContent:ct,childNodes:lt,setAttribute:ut}),io={create:function(e,t){ft(t)},update:function(e,t){e.data.ref!==t.data.ref&&(ft(e,!0),ft(t))},destroy:function(e){ft(e,!0)}},oo=new Ei("",{},[]),ao=["create","update","remove","destroy"],so={create:gt,update:gt,destroy:function(e){gt(e,oo)}},co=Object.create(null),lo=[io,so],uo={create:$t,update:$t},fo={create:xt,update:xt},po={create:Ct,update:Ct},vo={create:kt,update:kt},ho=a(function(e){var t={},n=e.indexOf("background")>=0,r=n?/;(?![^(]*\))/g:";",i=n?/:(.+)/:":";return e.split(r).forEach(function(e){if(e){var n=e.split(i);n.length>1&&(t[n[0].trim()]=n[1].trim())}}),t}),mo=/^--/,go=function(e,t,n){mo.test(t)?e.style.setProperty(t,n):e.style[_o(t)]=n},yo=["Webkit","Moz","ms"],_o=a(function(e){if(Bi=Bi||document.createElement("div"),e=Vr(e),"filter"!==e&&e in Bi.style)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<yo.length;n++){var r=yo[n]+t;if(r in Bi.style)return r}}),bo={create:Tt,update:Tt},$o=Qr&&!ti,wo="transition",xo="animation",Co="transition",ko="transitionend",Ao="animation",Oo="animationend";$o&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Co="WebkitTransition",ko="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ao="WebkitAnimation",Oo="webkitAnimationEnd"));var So=Qr&&window.requestAnimationFrame||setTimeout,To=/\b(transform|all)(,|$)/,jo=a(function(e){return{enterClass:e+"-enter",leaveClass:e+"-leave",appearClass:e+"-enter",enterActiveClass:e+"-enter-active",leaveActiveClass:e+"-leave-active",appearActiveClass:e+"-enter-active"}}),Eo=Qr?{create:function(e,t){t.data.show||Ft(t)},remove:function(e,t){e.data.show?t():Bt(e,t)}}:{},No=[uo,fo,po,vo,bo,Eo],Lo=No.concat(lo),Do=mt({nodeOps:ro,modules:Lo});ti&&document.addEventListener("selectionchange",function(){var e=document.activeElement;e&&e.vmodel&&Wt(e,"input")});var Mo={inserted:function(e,t,n){if("select"===n.tag){var r=function(){Vt(e,t,n.context)};r(),(ei||ni)&&setTimeout(r,0)}else"textarea"!==n.tag&&"text"!==e.type||t.modifiers.lazy||(ri||(e.addEventListener("compositionstart",Kt),e.addEventListener("compositionend",qt)),ti&&(e.vmodel=!0))},componentUpdated:function(e,t,n){if("select"===n.tag){Vt(e,t,n.context);var r=e.multiple?t.value.some(function(t){return zt(t,e.options)}):t.value!==t.oldValue&&zt(t.value,e.options);r&&Wt(e,"change")}}},Po={bind:function(e,t,n){var r=t.value;n=Zt(n);var i=n.data&&n.data.transition;r&&i&&!ti&&Ft(n);var o="none"===e.style.display?"":e.style.display;e.style.display=r?o:"none",e.__vOriginalDisplay=o},update:function(e,t,n){var r=t.value,i=t.oldValue;if(r!==i){n=Zt(n);var o=n.data&&n.data.transition;o&&!ti?r?(Ft(n),e.style.display=e.__vOriginalDisplay):Bt(n,function(){e.style.display="none"}):e.style.display=r?e.__vOriginalDisplay:"none"}}},Ro={model:Mo,show:Po},Io={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String},Fo={name:"transition",props:Io,abstract:!0,
-render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag}),n.length)){var r=this.mode,i=n[0];if(Xt(this.$vnode))return i;var o=Gt(i);if(!o)return i;if(this._leaving)return Qt(e,i);var a=o.key=null==o.key||o.isStatic?"__v"+(o.tag+this._uid)+"__":o.key,s=(o.data||(o.data={})).transition=Yt(this),c=this._vnode,u=Gt(c);if(o.data.directives&&o.data.directives.some(function(e){return"show"===e.name})&&(o.data.show=!0),u&&u.data&&u.key!==a){var f=u.data.transition=l({},s);if("out-in"===r)return this._leaving=!0,ie(f,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()},a),Qt(e,i);if("in-out"===r){var d,p=function(){d()};ie(s,"afterEnter",p,a),ie(s,"enterCancelled",p,a),ie(f,"delayLeave",function(e){d=e},a)}}return i}}},Bo=l({tag:String,moveClass:String},Io);delete Bo.mode;var Uo={props:Bo,render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Yt(this),s=0;s<i.length;s++){var c=i[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf("__vlist")&&(o.push(c),n[c.key]=c,(c.data||(c.data={})).transition=a)}if(r){for(var l=[],u=[],f=0;f<r.length;f++){var d=r[f];d.data.transition=a,d.data.pos=d.elm.getBoundingClientRect(),n[d.key]?l.push(d):u.push(d)}this.kept=e(t,null,l),this.removed=u}return e(t,null,o)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";if(e.length&&this.hasMove(e[0].elm,t)){e.forEach(en),e.forEach(tn),e.forEach(nn);document.body.offsetHeight;e.forEach(function(e){if(e.data.moved){var n=e.elm,r=n.style;Lt(n,t),r.transform=r.WebkitTransform=r.transitionDuration="",n.addEventListener(ko,n._moveCb=function e(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(ko,e),n._moveCb=null,Dt(n,t))})}})}},methods:{hasMove:function(e,t){if(!$o)return!1;if(null!=this._hasMove)return this._hasMove;Lt(e,t);var n=Pt(e);return Dt(e,t),this._hasMove=n.hasTransform}}},Ho={Transition:Fo,TransitionGroup:Uo};Re.config.isUnknownElement=Ge,Re.config.isReservedTag=to,Re.config.getTagNamespace=Ze,Re.config.mustUseProp=Ui,l(Re.options.directives,Ro),l(Re.options.components,Ho),Re.prototype.__patch__=Qr?Do:p,Re.prototype.$mount=function(e,t){return e=e&&Qr?Ye(e):void 0,this._mount(e,t)},setTimeout(function(){li.devtools&&ai&&ai.emit("init",Re)},0);var Vo,zo=!!Qr&&rn("\n","&#10;"),Jo=/([^\s"'<>\/=]+)/,Ko=/(?:=)/,qo=[/"([^"]*)"+/.source,/'([^']*)'+/.source,/([^\s"'=<>`]+)/.source],Wo=new RegExp("^\\s*"+Jo.source+"(?:\\s*("+Ko.source+")\\s*(?:"+qo.join("|")+"))?"),Zo="[a-zA-Z_][\\w\\-\\.]*",Go="((?:"+Zo+"\\:)?"+Zo+")",Yo=new RegExp("^<"+Go),Qo=/^\s*(\/?)>/,Xo=new RegExp("^<\\/"+Go+"[^>]*>"),ea=/^<!DOCTYPE [^>]+>/i,ta=/^<!--/,na=/^<!\[/,ra=!1;"x".replace(/x(.)?/g,function(e,t){ra=""===t});var ia,oa,aa,sa,ca,la,ua,fa,da,pa,va,ha,ma,ga,ya,_a,ba,$a,wa,xa,Ca,ka,Aa,Oa,Sa=n("script,style",!0),Ta=function(e){return"lang"===e.name&&"html"!==e.value},ja=function(e,t,n){return!!Sa(e)||!!t&&!("template"===e&&1===n.length&&!n[0].attrs.some(Ta))},Ea={},Na=/&lt;/g,La=/&gt;/g,Da=/&#10;/g,Ma=/&amp;/g,Pa=/&quot;/g,Ra=/\{\{((?:.|\n)+?)\}\}/g,Ia=/[-.*+?^${}()|[\]\/\\]/g,Fa=a(function(e){var t=e[0].replace(Ia,"\\$&"),n=e[1].replace(Ia,"\\$&");return new RegExp(t+"((?:.|\\n)+?)"+n,"g")}),Ba=/^v-|^@|^:/,Ua=/(.*?)\s+(?:in|of)\s+(.*)/,Ha=/\((\{[^}]*\}|[^,]*),([^,]*)(?:,([^,]*))?\)/,Va=/^:|^v-bind:/,za=/^@|^v-on:/,Ja=/:(.*)$/,Ka=/\.[^.]+/g,qa=a(on),Wa=/^xmlns:NS\d+/,Za=/^NS\d+:/,Ga=a(Jn),Ya=/^\s*([\w$_]+|\([^)]*?\))\s*=>|^function\s*\(/,Qa=/^\s*[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['.*?']|\[".*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*\s*$/,Xa={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},es={stop:"$event.stopPropagation();",prevent:"$event.preventDefault();",self:"if($event.target !== $event.currentTarget)return;"},ts=/^mouse|^pointer|^(click|dblclick|contextmenu|wheel)$/,ns={ctrl:"if(!$event.ctrlKey)return;",shift:"if(!$event.shiftKey)return;",alt:"if(!$event.altKey)return;",meta:"if(!$event.metaKey)return;"},rs={bind:tr,cloak:p},is=(new RegExp("\\b"+"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments".split(",").join("\\b|\\b")+"\\b"),{staticKeys:["staticClass"],transformNode:wr,genData:xr}),os={staticKeys:["staticStyle"],transformNode:Cr,genData:kr},as=[is,os],ss={model:Ar,text:Nr,html:Lr},cs=Object.create(null),ls={expectHTML:!0,modules:as,staticKeys:v(as),directives:ss,isReservedTag:to,isUnaryTag:Gi,mustUseProp:Ui,getTagNamespace:Ze,isPreTag:eo},us=a(function(e){var t=Ye(e);return t&&t.innerHTML}),fs=Re.prototype.$mount;return Re.prototype.$mount=function(e,t){if(e=e&&Ye(e),e===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if("string"==typeof r)"#"===r.charAt(0)&&(r=us(r));else{if(!r.nodeType)return this;r=r.innerHTML}else e&&(r=Rr(e));if(r){var i=Mr(r,{warn:ui,shouldDecodeNewlines:zo,delimiters:n.delimiters},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return fs.call(this,e,t)},Re.compile=Mr,Re});
\ No newline at end of file
diff --git a/html5/test/unit/default/api/methods.js b/html5/test/unit/default/api/methods.js
index 6a7d26a..ec458ff 100644
--- a/html5/test/unit/default/api/methods.js
+++ b/html5/test/unit/default/api/methods.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/api/modules.js b/html5/test/unit/default/api/modules.js
index edf9941..1adf66b 100644
--- a/html5/test/unit/default/api/modules.js
+++ b/html5/test/unit/default/api/modules.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/default/app/bundle.js b/html5/test/unit/default/app/bundle.js
index 183ba49..799ebcb 100644
--- a/html5/test/unit/default/app/bundle.js
+++ b/html5/test/unit/default/app/bundle.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/app/ctrl.js b/html5/test/unit/default/app/ctrl.js
index f7d91f2..4e3163b 100644
--- a/html5/test/unit/default/app/ctrl.js
+++ b/html5/test/unit/default/app/ctrl.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/app/downgrade.js b/html5/test/unit/default/app/downgrade.js
index 593bc4d..562d0d7 100644
--- a/html5/test/unit/default/app/downgrade.js
+++ b/html5/test/unit/default/app/downgrade.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/default/app/index.js b/html5/test/unit/default/app/index.js
index 53a6938..e0e2c3f 100644
--- a/html5/test/unit/default/app/index.js
+++ b/html5/test/unit/default/app/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/app/register.js b/html5/test/unit/default/app/register.js
index df4d108..6c23982 100644
--- a/html5/test/unit/default/app/register.js
+++ b/html5/test/unit/default/app/register.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/app/viewport.js b/html5/test/unit/default/app/viewport.js
index ea914a3..0b0d122 100644
--- a/html5/test/unit/default/app/viewport.js
+++ b/html5/test/unit/default/app/viewport.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/helper/document.js b/html5/test/unit/default/helper/document.js
index 2390f36..bac9c25 100644
--- a/html5/test/unit/default/helper/document.js
+++ b/html5/test/unit/default/helper/document.js
@@ -1,4 +1,21 @@
-// document
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 function Document () {
   this.refs = {}
diff --git a/html5/test/unit/default/runtime.js b/html5/test/unit/default/runtime.js
index 57a36b2..19538c7 100644
--- a/html5/test/unit/default/runtime.js
+++ b/html5/test/unit/default/runtime.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/util/index.js b/html5/test/unit/default/util/index.js
index cf83ba7..a33be27 100644
--- a/html5/test/unit/default/util/index.js
+++ b/html5/test/unit/default/util/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/default/util/shared.js b/html5/test/unit/default/util/shared.js
index a0a17a0..bf24684 100644
--- a/html5/test/unit/default/util/shared.js
+++ b/html5/test/unit/default/util/shared.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { expect } from 'chai'
 
 import * as utils from '../../../../frameworks/legacy/util/shared'
diff --git a/html5/test/unit/default/vm/compiler.js b/html5/test/unit/default/vm/compiler.js
index 23aefbb..654f1ed 100644
--- a/html5/test/unit/default/vm/compiler.js
+++ b/html5/test/unit/default/vm/compiler.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/vm/directive.js b/html5/test/unit/default/vm/directive.js
index a99fcfe..caa93c5 100644
--- a/html5/test/unit/default/vm/directive.js
+++ b/html5/test/unit/default/vm/directive.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/vm/dom-helper.js b/html5/test/unit/default/vm/dom-helper.js
index fbcd8d2..b889468 100644
--- a/html5/test/unit/default/vm/dom-helper.js
+++ b/html5/test/unit/default/vm/dom-helper.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/default/vm/events.js b/html5/test/unit/default/vm/events.js
index e065e7f..131f94e 100644
--- a/html5/test/unit/default/vm/events.js
+++ b/html5/test/unit/default/vm/events.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/default/vm/vm.js b/html5/test/unit/default/vm/vm.js
index ffd9eb7..04e426c 100644
--- a/html5/test/unit/default/vm/vm.js
+++ b/html5/test/unit/default/vm/vm.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/shared/BroadcastChannel.js b/html5/test/unit/shared/BroadcastChannel.js
index 3fda443..bacaf75 100644
--- a/html5/test/unit/shared/BroadcastChannel.js
+++ b/html5/test/unit/shared/BroadcastChannel.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { expect } from 'chai'
 import sinon from 'sinon'
 
diff --git a/html5/test/unit/shared/arrayFrom.js b/html5/test/unit/shared/arrayFrom.js
index be4f007..cc7229f 100644
--- a/html5/test/unit/shared/arrayFrom.js
+++ b/html5/test/unit/shared/arrayFrom.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/shared/console.js b/html5/test/unit/shared/console.js
index 9761cf6..60eb281 100644
--- a/html5/test/unit/shared/console.js
+++ b/html5/test/unit/shared/console.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/shared/index.js b/html5/test/unit/shared/index.js
index 8a07a47..6ac3458 100644
--- a/html5/test/unit/shared/index.js
+++ b/html5/test/unit/shared/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
@@ -42,7 +60,7 @@
 
   it('Object & Object.prototype', () => {
     expect(Object).to.be.frozen
-    expect(Object.prototype).to.be.frozen
+    // expect(Object.prototype).to.be.frozen
   })
   it('Array & Array.prototype', () => {
     expect(Array).to.be.frozen
diff --git a/html5/test/unit/shared/objectAssign.js b/html5/test/unit/shared/objectAssign.js
index c12a06a..7c76a4a 100644
--- a/html5/test/unit/shared/objectAssign.js
+++ b/html5/test/unit/shared/objectAssign.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/shared/objectSetPrototypeOf.js b/html5/test/unit/shared/objectSetPrototypeOf.js
index 297d944..58056bc 100644
--- a/html5/test/unit/shared/objectSetPrototypeOf.js
+++ b/html5/test/unit/shared/objectSetPrototypeOf.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/html5/test/unit/vanilla/index.js b/html5/test/unit/vanilla/index.js
index a0e84e8..f2bd338 100644
--- a/html5/test/unit/vanilla/index.js
+++ b/html5/test/unit/vanilla/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import { expect } from 'chai'
 
 import vanilla from '../../../frameworks/vanilla'
diff --git a/html5/test/unit/vdom/index.js b/html5/test/unit/vdom/index.js
index 7c8d854..be85d84 100644
--- a/html5/test/unit/vdom/index.js
+++ b/html5/test/unit/vdom/index.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/vdom/listener.js b/html5/test/unit/vdom/listener.js
index 84de22b..ca1d95f 100644
--- a/html5/test/unit/vdom/listener.js
+++ b/html5/test/unit/vdom/listener.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 import sinon from 'sinon'
 import sinonChai from 'sinon-chai'
diff --git a/html5/test/unit/vdom/node.js b/html5/test/unit/vdom/node.js
index d9603ef..a6e567e 100644
--- a/html5/test/unit/vdom/node.js
+++ b/html5/test/unit/vdom/node.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 import chai from 'chai'
 const { expect } = chai
 
diff --git a/index.html b/index.html
index 043e137..a251bae 100644
--- a/index.html
+++ b/index.html
@@ -3,11 +3,12 @@
 <head>
 <meta charset="utf-8">
 <title>Weex HTML5</title>
+<meta name="weex-viewport" content="750">
+<meta name="viewport" content="width=750, user-scalable=no">
 <meta name="apple-mobile-web-app-capable" content="yes" />
 <meta name="apple-mobile-web-app-status-bar-style" content="black" />
 <meta name="apple-touch-fullscreen" content="yes" />
 <meta name="format-detection" content="telephone=no, email=no" />
-<meta name="viewport" content="width=750, user-scalable=no">
 <style>
   html, body, #weex {
     width: 100%;
diff --git a/ios/playground/Podfile b/ios/playground/Podfile
index c8d1d35..bda8b39 100644
--- a/ios/playground/Podfile
+++ b/ios/playground/Podfile
@@ -1,13 +1,16 @@
-source 'git@github.com/CocoaPods/Specs.git'
+source 'https://github.com/CocoaPods/Specs.git'
 platform :ios, '7.0'
 #inhibit_all_warnings!
 
 def common
-    pod 'WeexSDK', :path=>'../sdk/'
+    pod 'WeexSDK', :path=>'../../'
     pod 'WXDevtool', '0.9.5'
     pod 'SDWebImage', '3.7.5'
     pod 'SocketRocket', '0.4.2'
     pod 'ATSDK-Weex', '0.0.1'
+    
+    # WeexGcanvas is added by Weex Plugin, more info at https://market.dotwe.org/ext/list.htm
+    pod 'WeexGcanvas'
 end
 
 target 'WeexDemo' do
diff --git a/ios/playground/WeexDemo.app.zip b/ios/playground/WeexDemo.app.zip
deleted file mode 100644
index cef4dca..0000000
--- a/ios/playground/WeexDemo.app.zip
+++ /dev/null
Binary files differ
diff --git a/ios/playground/WeexDemo.xcodeproj/project.pbxproj b/ios/playground/WeexDemo.xcodeproj/project.pbxproj
index 5fb8ccb..5a8b540 100644
--- a/ios/playground/WeexDemo.xcodeproj/project.pbxproj
+++ b/ios/playground/WeexDemo.xcodeproj/project.pbxproj
@@ -30,6 +30,7 @@
 		846FC8DB1E1B853600949E7D /* WXATViewHierarchyPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = DCABAFF21D029685001C8592 /* WXATViewHierarchyPlugin.m */; };
 		84D7CAC71CE3266C00D48D46 /* libsqlite3.0.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 7475ACA01CD8444A0044E96C /* libsqlite3.0.tbd */; };
 		8A0B5EFFF75BF82EA481983D /* libPods-WeexUITestDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E48C20F443AA337D1FE97622 /* libPods-WeexUITestDemo.a */; };
+		DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */ = {isa = PBXBuildFile; fileRef = DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */; };
 		DC5E503E1D0D97130059F0EB /* weex.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503C1D0D97130059F0EB /* weex.png */; };
 		DC5E503F1D0D97130059F0EB /* weex@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DC5E503D1D0D97130059F0EB /* weex@2x.png */; };
 		DC65C4FA1CEB032F00B2F84F /* bundlejs in Resources */ = {isa = PBXBuildFile; fileRef = DC65C4F91CEB032F00B2F84F /* bundlejs */; };
@@ -87,6 +88,8 @@
 		775BEE9A1C1E8ECC008D1629 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		84361D751CA10F8E00F43825 /* WeexUITestDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = WeexUITestDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		9420131417A731ED089B0814 /* Pods-WeexDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-WeexDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo.release.xcconfig"; sourceTree = "<group>"; };
+		DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXScannerHistoryVC.h; path = Scanner/WXScannerHistoryVC.h; sourceTree = "<group>"; };
+		DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXScannerHistoryVC.m; path = Scanner/WXScannerHistoryVC.m; sourceTree = "<group>"; };
 		DC5E503C1D0D97130059F0EB /* weex.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = weex.png; sourceTree = "<group>"; };
 		DC5E503D1D0D97130059F0EB /* weex@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weex@2x.png"; sourceTree = "<group>"; };
 		DC65C4F91CEB032F00B2F84F /* bundlejs */ = {isa = PBXFileReference; lastKnownFileType = folder; path = bundlejs; sourceTree = "<group>"; };
@@ -140,6 +143,8 @@
 			children = (
 				2AE88A2A1C8544E6003329DE /* WXScannerVC.h */,
 				2AE88A2B1C8544E6003329DE /* WXScannerVC.m */,
+				DC5B53671E8CED9400E02125 /* WXScannerHistoryVC.h */,
+				DC5B53681E8CED9400E02125 /* WXScannerHistoryVC.m */,
 			);
 			name = scanner;
 			sourceTree = "<group>";
@@ -359,7 +364,6 @@
 				84361D431CA10F8E00F43825 /* Resources */,
 				84361D6F1CA10F8E00F43825 /* [CP] Copy Pods Resources */,
 				84361D701CA10F8E00F43825 /* [CP] Embed Pods Frameworks */,
-				567369891CE436EB000A646C /* ShellScript */,
 			);
 			buildRules = (
 			);
@@ -442,21 +446,6 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		36DF47C61FC947C616E7CB76 /* [CP] Copy Pods Resources */ = {
-			isa = PBXShellScriptBuildPhase;
-			buildActionMask = 2147483647;
-			files = (
-			);
-			inputPaths = (
-			);
-			name = "[CP] Copy Pods Resources";
-			outputPaths = (
-			);
-			runOnlyForDeploymentPostprocessing = 0;
-			shellPath = /bin/sh;
-			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh\"\n";
-			showEnvVarsInLog = 0;
-		};
 		685399B3421CD1410375A2AD /* [CP] Embed Pods Frameworks */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
@@ -469,7 +458,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "myFile=\"XcodeCoverage/exportenv.sh\"\n\nif [ -f \"$myFile\" ]; then\nXcodeCoverage/exportenv.sh\nfi";
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-frameworks.sh\"\n";
 		};
 		74CC7A221C2C13BF00829368 /* Start Samples */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -483,7 +472,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\n\nif [[ \"$CONFIGURATION\" = \"Debug\" && \"$PLATFORM_NAME\" != \"iphonesimulator\" ]]; then\nipconfig getifaddr en0 | awk '{printf(\"%s\",$0)}' > \"$DEST/localServer-ip.txt\"\nfi\n\nset -x\n\nif nc -w 5 -z localhost 12580 ; then\n    echo \"Port 12580 already in use, server is running\"\nelse\n    open \"$SRCROOT/../../start\"\nfi\n\n";
+			shellScript = "DEST=$CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH\n\nif [[ \"$CONFIGURATION\" = \"Debug\" && \"$PLATFORM_NAME\" != \"iphonesimulator\" ]]; then\nipconfig getifaddr en0 | awk '{printf(\"%s\",$0)}' > \"$DEST/localServer-ip.txt\"\nfi\n\nset -x\n\nif nc -w 5 -z localhost 12580 ; then\n    echo \"Port 12580 already in use, server is running\"\nelse\n    open -a Terminal \"$SRCROOT/../../start\"\nfi\n\n";
 		};
 		84361D271CA10F8E00F43825 /* [CP] Check Pods Manifest.lock */ = {
 			isa = PBXShellScriptBuildPhase;
@@ -557,7 +546,7 @@
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			shellPath = /bin/sh;
-			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-frameworks.sh\"\n";
+			shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-WeexDemo/Pods-WeexDemo-resources.sh\"\n";
 			showEnvVarsInLog = 0;
 		};
 /* End PBXShellScriptBuildPhase section */
@@ -570,6 +559,7 @@
 				DCABAFF31D029685001C8592 /* WXATLoggerPlugin.m in Sources */,
 				2AE88A2C1C8544E6003329DE /* WXScannerVC.m in Sources */,
 				775BEE861C1E8ECC008D1629 /* WXDemoViewController.m in Sources */,
+				DC5B53691E8CED9400E02125 /* WXScannerHistoryVC.m in Sources */,
 				74CC79EB1C2B9E4700829368 /* UIViewController+WXDemoNaviBar.m in Sources */,
 				DCABB0011D02975E001C8592 /* WXEventModule.m in Sources */,
 				7478481E1E0CD4910044500D /* WXSyncTestModule.m in Sources */,
diff --git a/ios/playground/WeexDemo/AppDelegate.h b/ios/playground/WeexDemo/AppDelegate.h
index bb7a454..9840f93 100644
--- a/ios/playground/WeexDemo/AppDelegate.h
+++ b/ios/playground/WeexDemo/AppDelegate.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/AppDelegate.m b/ios/playground/WeexDemo/AppDelegate.m
index 4cb55de..e92b69b 100644
--- a/ios/playground/WeexDemo/AppDelegate.m
+++ b/ios/playground/WeexDemo/AppDelegate.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "AppDelegate.h"
@@ -15,6 +26,7 @@
 #import "WXImgLoaderDefaultImpl.h"
 #import "DemoDefine.h"
 #import "WXScannerVC.h"
+#import "WXScannerHistoryVC.h"
 #import "WXSyncTestModule.h"
 #import "UIView+UIThreadCheck.h"
 #import <WeexSDK/WeexSDK.h>
@@ -55,6 +67,10 @@
         WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
         [(WXRootViewController*)self.window.rootViewController pushViewController:scanViewController animated:YES];
     }
+    if ([shortcutItem.type isEqualToString:QRSCAN_HISTORY]) {
+        WXScannerHistoryVC *scannerHistoryVC = [WXScannerHistoryVC new];
+        [(WXRootViewController*)self.window.rootViewController pushViewController:scannerHistoryVC animated:YES];
+    }
 }
 
 - (void)applicationDidEnterBackground:(UIApplication *)application
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
new file mode 100644
index 0000000..1231572
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "delete.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "delete@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "delete@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png
new file mode 100644
index 0000000..d7cc20a
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete.png
Binary files differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png
new file mode 100644
index 0000000..63aa9cb
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@2x.png
Binary files differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png
new file mode 100644
index 0000000..5963f9c
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/delete.imageset/delete@3x.png
Binary files differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
new file mode 100644
index 0000000..e972e4e
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "idiom" : "universal",
+      "filename" : "history.png",
+      "scale" : "1x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "history@2x.png",
+      "scale" : "2x"
+    },
+    {
+      "idiom" : "universal",
+      "filename" : "history@3x.png",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}
\ No newline at end of file
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png
new file mode 100644
index 0000000..48aac03
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history.png
Binary files differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png
new file mode 100644
index 0000000..dd94cb7
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@2x.png
Binary files differ
diff --git a/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png
new file mode 100644
index 0000000..2d5f2b4
--- /dev/null
+++ b/ios/playground/WeexDemo/Assets.xcassets/scan_history.imageset/history@3x.png
Binary files differ
diff --git a/ios/playground/WeexDemo/DemoBaseViewController.h b/ios/playground/WeexDemo/DemoBaseViewController.h
index 2e09ece..48d01e0 100644
--- a/ios/playground/WeexDemo/DemoBaseViewController.h
+++ b/ios/playground/WeexDemo/DemoBaseViewController.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/DemoBaseViewController.m b/ios/playground/WeexDemo/DemoBaseViewController.m
index 95524d0..edfb8a1 100644
--- a/ios/playground/WeexDemo/DemoBaseViewController.m
+++ b/ios/playground/WeexDemo/DemoBaseViewController.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "DemoBaseViewController.h"
diff --git a/ios/playground/WeexDemo/DemoDefine.h b/ios/playground/WeexDemo/DemoDefine.h
index 478ecb5..1a7abaf 100644
--- a/ios/playground/WeexDemo/DemoDefine.h
+++ b/ios/playground/WeexDemo/DemoDefine.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -18,11 +29,13 @@
 
 #define DEMO_URL(path) [NSString stringWithFormat:@"http://%@:12580/%s", DEMO_HOST, #path]
 
-#define HOME_URL [NSString stringWithFormat:@"http://%@:12580/examples/build/index.js", DEMO_HOST]
+#define HOME_URL [NSString stringWithFormat:@"http://%@:12580/examples/build/vue/index.js", DEMO_HOST]
 
 #define BUNDLE_URL [NSString stringWithFormat:@"file://%@/bundlejs/index.js",[NSBundle mainBundle].bundlePath]
 
 #define UITEST_HOME_URL @"http://test?_wx_tpl=http://localhost:12580/test/build/TC__Home.js"
 
 #define QRSCAN  @"com.taobao.WeexDemo.scan"
+#define QRSCAN_HISTORY  @"com.taobao.WeexDemo.scan.history"
 #define WEEX_COLOR [UIColor colorWithRed:0.27 green:0.71 blue:0.94 alpha:1]
+#define WX_SCANNER_HISTORY @"wx_scanner_history"
diff --git a/ios/playground/WeexDemo/Info.plist b/ios/playground/WeexDemo/Info.plist
index 2da7af7..12ee186 100644
--- a/ios/playground/WeexDemo/Info.plist
+++ b/ios/playground/WeexDemo/Info.plist
@@ -26,7 +26,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>1.4</string>
+	<string>1.5</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleURLTypes</key>
@@ -54,10 +54,20 @@
 	<key>UIApplicationShortcutItems</key>
 	<array>
 		<dict>
+			<key>UIApplicationShortcutItemTitle</key>
+			<string>Scan history</string>
+			<key>UIApplicationShortcutItemType</key>
+			<string>com.taobao.WeexDemo.scan.history</string>
+			<key>UIApplicationShortcutItemSubtitle</key>
+			<string>history</string>
+			<key>UIApplicationShortcutItemIconFile</key>
+			<string>scan_history</string>
+		</dict>
+		<dict>
 			<key>UIApplicationShortcutItemIconFile</key>
 			<string>scan</string>
 			<key>UIApplicationShortcutItemSubtitle</key>
-			<string>scan your QR code</string>
+			<string>scan QR code</string>
 			<key>UIApplicationShortcutItemTitle</key>
 			<string>Scan QR</string>
 			<key>UIApplicationShortcutItemType</key>
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h
new file mode 100644
index 0000000..2dee545
--- /dev/null
+++ b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+
+@interface WXScannerHistoryVC : UITableViewController<UIGestureRecognizerDelegate>
+
+@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m
new file mode 100644
index 0000000..984d8ea
--- /dev/null
+++ b/ios/playground/WeexDemo/Scanner/WXScannerHistoryVC.m
@@ -0,0 +1,207 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXScannerHistoryVC.h"
+#import "DemoDefine.h"
+#import "WXDemoViewController.h"
+#import "UIViewController+WXDemoNaviBar.h"
+#import <CoreText/CoreText.h>
+
+@interface WXScannerHistoryVC ()
+@property(nonatomic)NSMutableArray * scanner_history;
+@property(nonatomic)UIImageView * qrCodeImageView;
+@end
+
+@implementation WXScannerHistoryVC
+
+- (instancetype)init {
+    if (self = [super init]) {
+        _scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
+    }
+    return self;
+}
+
+- (void)viewDidLoad {
+    [super viewDidLoad];
+    [self setupNaviBar];
+    UITapGestureRecognizer * tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleClick:)];
+    [self.tableView addGestureRecognizer:tapGestureRecognizer];
+    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadHistory) name:NSUserDefaultsDidChangeNotification object:nil];
+}
+
+- (void)dealloc {
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+#pragma mark - Table view data source
+
+- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
+    return 1;
+}
+
+- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
+    return 88.0f;
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
+    return [_scanner_history count];
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
+    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"WX_SCANNER_HISTORY_CELL"];
+    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WX_SCANNER_HISTORY_CELL" forIndexPath:indexPath];
+    if (!cell) {
+        cell = [UITableViewCell new];
+    }
+    UILongPressGestureRecognizer * longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
+    longPressGesture.minimumPressDuration = 1.0;
+    [cell addGestureRecognizer:longPressGesture];
+    NSMutableAttributedString * attributeString = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%ld %@",(long)indexPath.row+1,[_scanner_history objectAtIndex:indexPath.row]]];
+    [attributeString addAttribute:(NSString*)NSForegroundColorAttributeName value:(id)[UIColor redColor].CGColor range:NSMakeRange(0, 1)];
+    NSDictionary<NSString*, id> *attributes = @{
+                                               NSForegroundColorAttributeName:[UIColor redColor],
+                                               NSFontAttributeName: [UIFont boldSystemFontOfSize:25.0],
+                                               };
+    [attributeString addAttributes:attributes range:NSMakeRange(0, 2)];
+    cell.textLabel.attributedText = attributeString;
+    cell.textLabel.numberOfLines = 0;
+    
+    return cell;
+}
+
+- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    NSString *urlStr = _scanner_history[indexPath.row];
+    if (urlStr) {
+        WXDemoViewController * demoVC = [WXDemoViewController new];
+        demoVC.url = [NSURL URLWithString:urlStr];
+        [self.navigationController pushViewController:demoVC animated:YES];
+    }
+}
+
+- (void)reloadHistory {
+    if ([_scanner_history count]) {
+        [_qrCodeImageView removeFromSuperview];
+        [_scanner_history removeAllObjects];
+        [self.tableView reloadData];
+    }
+}
+
+- (void)handleClick:(UITapGestureRecognizer*)gestureRecognizer {
+    CGPoint clickPoint = [gestureRecognizer locationInView:self.tableView];
+    if (!CGRectContainsPoint(_qrCodeImageView.frame, clickPoint)) {
+        [_qrCodeImageView removeFromSuperview];
+    }
+    
+}
+
+- (void)handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {
+    if (gestureRecognizer.state != UIGestureRecognizerStateBegan) {
+        return ;
+    }
+    CGPoint pressPoint = [gestureRecognizer locationInView:self.tableView];
+    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:pressPoint];
+    if (indexPath == nil) {
+        return;
+    }
+    
+    NSString * url = _scanner_history[indexPath.row];
+    UIImage * qrCodeImage = [self getQRCodeWithData:url size:CGSizeMake(300, 300)];
+    _qrCodeImageView.contentMode = UIViewContentModeScaleAspectFill;
+    if (![_qrCodeImageView superview]) {
+        _qrCodeImageView = [[UIImageView alloc] initWithImage:qrCodeImage];
+        [_qrCodeImageView setCenter:self.view.center];
+        [self.view addSubview:_qrCodeImageView];
+    }else {
+        _qrCodeImageView.image = qrCodeImage;
+    }
+}
+
+- (UIImage*)getQRCodeWithData:(NSString*)url size:(CGSize)size {
+    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
+    [filter setDefaults];
+    NSString *info = url;
+    NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
+    [filter setValue:infoData forKeyPath:@"inputMessage"];
+    
+    CIImage *outputImage = [filter outputImage];
+    CGRect extent = CGRectIntegral(outputImage.extent);
+    CGFloat scale = MIN(size.width/CGRectGetWidth(extent), size.width/CGRectGetHeight(extent));
+    
+    size_t width = CGRectGetWidth(extent) * scale;
+    size_t height = CGRectGetHeight(extent) * scale;
+    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
+    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
+    CIContext *context = [CIContext contextWithOptions:nil];
+    CGImageRef bitmapImage = [context createCGImage:outputImage fromRect:extent];
+    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
+    CGContextScaleCTM(bitmapRef, scale, scale);
+    CGContextDrawImage(bitmapRef, extent, bitmapImage);
+    
+    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
+    CGContextRelease(bitmapRef);
+    CGImageRelease(bitmapImage);
+    return [UIImage imageWithCGImage:scaledImage];
+}
+
+/*
+// Override to support conditional editing of the table view.
+- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the specified item to be editable.
+    return YES;
+}
+*/
+
+/*
+// Override to support editing the table view.
+- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
+    if (editingStyle == UITableViewCellEditingStyleDelete) {
+        // Delete the row from the data source
+        [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
+    } else if (editingStyle == UITableViewCellEditingStyleInsert) {
+        // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
+    }   
+}
+*/
+
+/*
+// Override to support rearranging the table view.
+- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
+}
+*/
+
+/*
+// Override to support conditional rearranging of the table view.
+- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
+    // Return NO if you do not want the item to be re-orderable.
+    return YES;
+}
+*/
+
+/*
+#pragma mark - Navigation
+
+// In a storyboard-based application, you will often want to do a little preparation before navigation
+- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
+    // Get the new view controller using [segue destinationViewController].
+    // Pass the selected object to the new view controller.
+}
+*/
+
+@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerVC.h b/ios/playground/WeexDemo/Scanner/WXScannerVC.h
index 3618d35..aff1805 100644
--- a/ios/playground/WeexDemo/Scanner/WXScannerVC.h
+++ b/ios/playground/WeexDemo/Scanner/WXScannerVC.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
@@ -11,4 +22,4 @@
 
 @interface WXScannerVC : UIViewController <AVCaptureMetadataOutputObjectsDelegate>
 
-@end
\ No newline at end of file
+@end
diff --git a/ios/playground/WeexDemo/Scanner/WXScannerVC.m b/ios/playground/WeexDemo/Scanner/WXScannerVC.m
index 52f415a..056d678 100644
--- a/ios/playground/WeexDemo/Scanner/WXScannerVC.m
+++ b/ios/playground/WeexDemo/Scanner/WXScannerVC.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXScannerVC.h"
@@ -76,7 +87,8 @@
     [_session stopRunning];
     AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
     if (metadataObjects.count > 0) {
-        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex : 0 ];
+        AVMetadataMachineReadableCodeObject * metadataObject = [metadataObjects objectAtIndex: 0];
+        [self recordScannerHistory:metadataObject.stringValue];
         [self openURL:metadataObject.stringValue];
     }
 }
@@ -211,5 +223,20 @@
 }
 #pragma clang diagnostic pop
 
+- (void)recordScannerHistory:(NSString*)urlStr {
+    
+    NSMutableArray * scanner_history = [[[NSUserDefaults standardUserDefaults] objectForKey:WX_SCANNER_HISTORY] mutableCopy];
+    if (!scanner_history) {
+        scanner_history = [NSMutableArray new];
+    }
+    if ([scanner_history containsObject:urlStr]) {
+        [scanner_history removeObject:urlStr];
+    }
+    if ([scanner_history count] >= 7) {
+        [scanner_history removeLastObject];
+    }
+    [scanner_history insertObject:urlStr atIndex:0];
+    [[NSUserDefaults standardUserDefaults] setObject:scanner_history forKey:WX_SCANNER_HISTORY];
+}
 
 @end
diff --git a/ios/playground/WeexDemo/UIView+UIThreadCheck.h b/ios/playground/WeexDemo/UIView+UIThreadCheck.h
index e6ce600..154b602 100644
--- a/ios/playground/WeexDemo/UIView+UIThreadCheck.h
+++ b/ios/playground/WeexDemo/UIView+UIThreadCheck.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/UIView+UIThreadCheck.m b/ios/playground/WeexDemo/UIView+UIThreadCheck.m
index e499f53..b8d4ed8 100644
--- a/ios/playground/WeexDemo/UIView+UIThreadCheck.m
+++ b/ios/playground/WeexDemo/UIView+UIThreadCheck.m
@@ -1,16 +1,27 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "UIView+UIThreadCheck.h"
 #import <WeexSDK/NSObject+WXSwizzle.h>
 
 #define WXCheckUIThread() NSAssert([NSThread isMainThread], \
-@"You can not change UI on main thread!")
+@"You must change UI on main thread!")
 
 @implementation UIView (UIThreadCheck)
 
diff --git a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h
index e123e48..3ddbfd8 100644
--- a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h
+++ b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m
index dec8505..4490bd4 100644
--- a/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m
+++ b/ios/playground/WeexDemo/UIViewController+WXDemoNaviBar.m
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "UIViewController+WXDemoNaviBar.h"
 #import "WXScannerVC.h"
+#import "WXScannerHistoryVC.h"
 #import "WXDefine.h"
 #import <objc/runtime.h>
 
@@ -34,17 +46,29 @@
     [self.navigationController.navigationBar setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:
                                                                       [UIColor whiteColor], NSForegroundColorAttributeName, nil]];
     self.navigationItem.title = @"Weex Playground";
-    
-    if (self.navigationItem.leftBarButtonItem) return;
-    
-    UIBarButtonItem *leftItem;
-    if(![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) {
-        leftItem = [self backButtonItem];
-    } else {
-        leftItem = [self leftBarButtonItem];
+    if (!self.navigationItem.leftBarButtonItem) {
+        UIBarButtonItem *leftItem;
+        if(![[self.navigationController.viewControllers objectAtIndex:0] isEqual:self]) {
+            leftItem = [self backButtonItem];
+        } else {
+            leftItem = [self leftBarButtonItem];
+        }
+        self.navigationItem.leftBarButtonItems = @[leftItem];
     }
-    
-    self.navigationItem.leftBarButtonItems = @[leftItem];
+    if ([self isKindOfClass:[WXScannerVC class]]) {
+        UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"scan_history"]
+                                                          style:UIBarButtonItemStyleBordered
+                                                         target:self
+                                                         action:@selector(historyButtonClicked:)];
+        self.navigationItem.rightBarButtonItems = @[historyItem];
+    }
+    if([self isKindOfClass:[WXScannerHistoryVC class]]) {
+        UIBarButtonItem *historyItem = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"delete"]
+                                                                        style:UIBarButtonItemStyleBordered
+                                                                       target:self
+                                                                       action:@selector(clearScannerHistory:)];
+        self.navigationItem.rightBarButtonItems = @[historyItem];
+    }
 }
 
 - (void)edgePanGesture:(UIScreenEdgePanGestureRecognizer*)edgePanGestureRecognizer
@@ -97,15 +121,24 @@
 #pragma mark -
 #pragma mark - UIBarButtonItem actions
 
-- (void)scanQR:(id)sender
-{
+- (void)scanQR:(id)sender {
+    
     WXScannerVC * scanViewController = [[WXScannerVC alloc] init];
     [self.navigationController pushViewController:scanViewController animated:YES];
 }
 
-- (void)backButtonClicked:(id)sender
-{
+- (void)backButtonClicked:(id)sender {
+    
     [self.navigationController popViewControllerAnimated:YES];
 }
 
+- (void)historyButtonClicked:(id)sender {
+    
+    [self.navigationController pushViewController:[WXScannerHistoryVC new] animated:YES];
+}
+
+- (void)clearScannerHistory:(id)sender {
+    [[NSUserDefaults standardUserDefaults] removeObjectForKey:WX_SCANNER_HISTORY];
+}
+
 @end
diff --git a/ios/playground/WeexDemo/WXDemoViewController.h b/ios/playground/WeexDemo/WXDemoViewController.h
index 8ea2fd7..fa83801 100644
--- a/ios/playground/WeexDemo/WXDemoViewController.h
+++ b/ios/playground/WeexDemo/WXDemoViewController.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/WXDemoViewController.m b/ios/playground/WeexDemo/WXDemoViewController.m
index d354078..4b98e7b 100644
--- a/ios/playground/WeexDemo/WXDemoViewController.m
+++ b/ios/playground/WeexDemo/WXDemoViewController.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDemoViewController.h"
@@ -94,7 +105,8 @@
 - (void)dealloc
 {
     [_instance destroyInstance];
-#if DEBUG
+    
+#ifdef DEBUG
     [_instance forceGarbageCollection];
 #endif
     
@@ -173,7 +185,7 @@
 
 - (void)setupRightBarItem
 {
-    if ([self.url.scheme isEqualToString:@"http"]) {
+    if ([self.url.scheme hasPrefix:@"http"]) {
         [self loadRefreshCtl];
     }
 }
diff --git a/ios/playground/WeexDemo/WXSyncTestModule.h b/ios/playground/WeexDemo/WXSyncTestModule.h
index 8901436..254af6f 100644
--- a/ios/playground/WeexDemo/WXSyncTestModule.h
+++ b/ios/playground/WeexDemo/WXSyncTestModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/playground/WeexDemo/WXSyncTestModule.m b/ios/playground/WeexDemo/WXSyncTestModule.m
index 99dda0f..784502d 100644
--- a/ios/playground/WeexDemo/WXSyncTestModule.m
+++ b/ios/playground/WeexDemo/WXSyncTestModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSyncTestModule.h"
diff --git a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h
index 23dfceb..1bfbffa 100644
--- a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h
+++ b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m
index 2591efc..66eaf81 100644
--- a/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m
+++ b/ios/playground/WeexDemo/debug/WXATLoggerPlugin.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXATLoggerPlugin.h"
diff --git a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h
index ccc3523..0609e42 100644
--- a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h
+++ b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 //#import <Foundation/Foundation.h>
diff --git a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m
index fe3c29f..6c5fa27 100644
--- a/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m
+++ b/ios/playground/WeexDemo/debug/WXATViewHierarchyPlugin.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 //#import "WXATViewHierarchyPlugin.h"
diff --git a/ios/playground/WeexDemo/extend/component/WXSelectComponent.h b/ios/playground/WeexDemo/extend/component/WXSelectComponent.h
index 7f8616c..a50bd5b 100644
--- a/ios/playground/WeexDemo/extend/component/WXSelectComponent.h
+++ b/ios/playground/WeexDemo/extend/component/WXSelectComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemo/extend/component/WXSelectComponent.m b/ios/playground/WeexDemo/extend/component/WXSelectComponent.m
index 9ec52e9..20bb348 100644
--- a/ios/playground/WeexDemo/extend/component/WXSelectComponent.m
+++ b/ios/playground/WeexDemo/extend/component/WXSelectComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSelectComponent.h"
diff --git a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
index 3d420d4..159e1d1 100644
--- a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
+++ b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
index 37c1ec3..1adaa5e 100644
--- a/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
+++ b/ios/playground/WeexDemo/extend/handler/WXImgLoaderDefaultImpl.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXImgLoaderDefaultImpl.h"
diff --git a/ios/playground/WeexDemo/extend/module/WXEventModule.h b/ios/playground/WeexDemo/extend/module/WXEventModule.h
index 790a187..2fec4ec 100644
--- a/ios/playground/WeexDemo/extend/module/WXEventModule.h
+++ b/ios/playground/WeexDemo/extend/module/WXEventModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/playground/WeexDemo/extend/module/WXEventModule.m b/ios/playground/WeexDemo/extend/module/WXEventModule.m
index 061ec5a..b3b1cfb 100644
--- a/ios/playground/WeexDemo/extend/module/WXEventModule.m
+++ b/ios/playground/WeexDemo/extend/module/WXEventModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXEventModule.h"
diff --git a/ios/playground/WeexDemo/main.m b/ios/playground/WeexDemo/main.m
index 6eb9b2a..f59fa14 100644
--- a/ios/playground/WeexDemo/main.m
+++ b/ios/playground/WeexDemo/main.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/playground/WeexDemoTests/WeexDemoTests.m b/ios/playground/WeexDemoTests/WeexDemoTests.m
index 0596cb1..c143038 100644
--- a/ios/playground/WeexDemoTests/WeexDemoTests.m
+++ b/ios/playground/WeexDemoTests/WeexDemoTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m b/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m
index e5be497..cbeca46 100644
--- a/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m
+++ b/ios/playground/WeexUITestDemoUITests/WeexUITestDemoUITests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/playground/bundlejs/component/image-demo.js b/ios/playground/bundlejs/component/image-demo.js
index d65b994..46264a2 100644
--- a/ios/playground/bundlejs/component/image-demo.js
+++ b/ios/playground/bundlejs/component/image-demo.js
@@ -2318,7 +2318,7 @@
 	__webpack_require__(4);
 	module.exports = {
 	  data: function () {return {
-	    img: '//gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
+	    img: 'http://gw.alicdn.com/tps/i2/TB1DpsmMpXXXXabaXXX20ySQVXX-512-512.png_400x400.jpg'
 	  }}
 	};}
 	/* generated by weex-loader */
diff --git a/ios/playground/bundlejs/component/input-demo.js b/ios/playground/bundlejs/component/input-demo.js
index 343de0a..c8211c5 100644
--- a/ios/playground/bundlejs/component/input-demo.js
+++ b/ios/playground/bundlejs/component/input-demo.js
@@ -40,8 +40,9 @@
 /******/ 	return __webpack_require__(0);
 /******/ })
 /************************************************************************/
-/******/ ([
-/* 0 */
+/******/ ({
+
+/***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __weex_template__ = __webpack_require__(94)
@@ -64,1978 +65,8 @@
 	__weex_bootstrap__('@weex-component/9b05297660bffdeefca2cb266249ee4d',undefined,undefined)
 
 /***/ },
-/* 1 */,
-/* 2 */,
-/* 3 */,
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(5);
-	__webpack_require__(9);
-	__webpack_require__(13);
-	__webpack_require__(17);
-	__webpack_require__(21);
-	__webpack_require__(25);
-	__webpack_require__(66);
-	__webpack_require__(70);
-	__webpack_require__(74);
-	__webpack_require__(78);
-	__webpack_require__(79);
-
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(6)
-	var __weex_style__ = __webpack_require__(7)
-	var __weex_script__ = __webpack_require__(8)
-
-	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 6 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "btn": {
-	    "marginBottom": 0,
-	    "alignItems": "center",
-	    "justifyContent": "center",
-	    "borderWidth": 1,
-	    "borderStyle": "solid",
-	    "borderColor": "#333333"
-	  },
-	  "btn-default": {
-	    "color": "rgb(51,51,51)"
-	  },
-	  "btn-primary": {
-	    "backgroundColor": "rgb(40,96,144)",
-	    "borderColor": "rgb(40,96,144)"
-	  },
-	  "btn-success": {
-	    "backgroundColor": "rgb(92,184,92)",
-	    "borderColor": "rgb(76,174,76)"
-	  },
-	  "btn-info": {
-	    "backgroundColor": "rgb(91,192,222)",
-	    "borderColor": "rgb(70,184,218)"
-	  },
-	  "btn-warning": {
-	    "backgroundColor": "rgb(240,173,78)",
-	    "borderColor": "rgb(238,162,54)"
-	  },
-	  "btn-danger": {
-	    "backgroundColor": "rgb(217,83,79)",
-	    "borderColor": "rgb(212,63,58)"
-	  },
-	  "btn-link": {
-	    "borderColor": "rgba(0,0,0,0)",
-	    "borderRadius": 0
-	  },
-	  "btn-txt-default": {
-	    "color": "rgb(51,51,51)"
-	  },
-	  "btn-txt-primary": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-success": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-info": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-warning": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-danger": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-link": {
-	    "color": "rgb(51,122,183)"
-	  },
-	  "btn-sz-large": {
-	    "width": 300,
-	    "height": 100,
-	    "paddingTop": 25,
-	    "paddingBottom": 25,
-	    "paddingLeft": 40,
-	    "paddingRight": 40,
-	    "borderRadius": 15
-	  },
-	  "btn-sz-middle": {
-	    "width": 240,
-	    "height": 80,
-	    "paddingTop": 15,
-	    "paddingBottom": 15,
-	    "paddingLeft": 30,
-	    "paddingRight": 30,
-	    "borderRadius": 10
-	  },
-	  "btn-sz-small": {
-	    "width": 170,
-	    "height": 60,
-	    "paddingTop": 12,
-	    "paddingBottom": 12,
-	    "paddingLeft": 25,
-	    "paddingRight": 25,
-	    "borderRadius": 7
-	  },
-	  "btn-txt-sz-large": {
-	    "fontSize": 45
-	  },
-	  "btn-txt-sz-middle": {
-	    "fontSize": 35
-	  },
-	  "btn-txt-sz-small": {
-	    "fontSize": 30
-	  }
-	}
-
-/***/ },
-/* 8 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'default',
-	    size: 'large',
-	    value: ''
-	  }},
-	  methods: {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 9 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(10)
-	var __weex_style__ = __webpack_require__(11)
-	var __weex_script__ = __webpack_require__(12)
-
-	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 10 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['h' + (this.level)]},
-	  "style": {
-	    "justifyContent": "center"
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['txt-h' + (this.level)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 11 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "h1": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "h2": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "h3": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "txt-h1": {
-	    "fontSize": 70
-	  },
-	  "txt-h2": {
-	    "fontSize": 52
-	  },
-	  "txt-h3": {
-	    "fontSize": 42
-	  }
-	}
-
-/***/ },
-/* 12 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    level: 1,
-	    value: ''
-	  }},
-	  methods: {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 13 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(14)
-	var __weex_style__ = __webpack_require__(15)
-	var __weex_script__ = __webpack_require__(16)
-
-	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 14 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "item"
-	  ],
-	  "events": {
-	    "touchstart": "touchstart",
-	    "touchend": "touchend"
-	  },
-	  "style": {
-	    "backgroundColor": function () {return this.bgColor}
-	  },
-	  "children": [
-	    {
-	      "type": "content"
-	    }
-	  ]
-	}
-
-/***/ },
-/* 15 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "item": {
-	    "paddingTop": 25,
-	    "paddingBottom": 25,
-	    "paddingLeft": 35,
-	    "paddingRight": 35,
-	    "height": 160,
-	    "justifyContent": "center",
-	    "borderBottomWidth": 1,
-	    "borderColor": "#dddddd"
-	  }
-	}
-
-/***/ },
-/* 16 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    bgColor: '#ffffff'
-	  }},
-	  methods: {
-	    touchstart: function touchstart() {},
-	    touchend: function touchend() {}
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 17 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(18)
-	var __weex_style__ = __webpack_require__(19)
-	var __weex_script__ = __webpack_require__(20)
-
-	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 18 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
-	  "style": {
-	    "borderWidth": function () {return this.border}
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
-	      "style": {
-	        "paddingTop": function () {return this.paddingHead},
-	        "paddingBottom": function () {return this.paddingHead},
-	        "paddingLeft": function () {return this.paddingHead*1.5},
-	        "paddingRight": function () {return this.paddingHead*1.5}
-	      },
-	      "attr": {
-	        "value": function () {return this.title}
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
-	      "style": {
-	        "paddingTop": function () {return this.paddingBody},
-	        "paddingBottom": function () {return this.paddingBody},
-	        "paddingLeft": function () {return this.paddingBody*1.5},
-	        "paddingRight": function () {return this.paddingBody*1.5}
-	      },
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 19 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "panel": {
-	    "marginBottom": 20,
-	    "backgroundColor": "#ffffff",
-	    "borderColor": "#dddddd",
-	    "borderWidth": 1
-	  },
-	  "panel-primary": {
-	    "borderColor": "rgb(40,96,144)"
-	  },
-	  "panel-success": {
-	    "borderColor": "rgb(76,174,76)"
-	  },
-	  "panel-info": {
-	    "borderColor": "rgb(70,184,218)"
-	  },
-	  "panel-warning": {
-	    "borderColor": "rgb(238,162,54)"
-	  },
-	  "panel-danger": {
-	    "borderColor": "rgb(212,63,58)"
-	  },
-	  "panel-header": {
-	    "backgroundColor": "#f5f5f5",
-	    "fontSize": 40,
-	    "color": "#333333"
-	  },
-	  "panel-header-primary": {
-	    "backgroundColor": "rgb(40,96,144)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-success": {
-	    "backgroundColor": "rgb(92,184,92)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-info": {
-	    "backgroundColor": "rgb(91,192,222)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-warning": {
-	    "backgroundColor": "rgb(240,173,78)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-danger": {
-	    "backgroundColor": "rgb(217,83,79)",
-	    "color": "#ffffff"
-	  }
-	}
-
-/***/ },
-/* 20 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'default',
-	    title: '',
-	    paddingBody: 20,
-	    paddingHead: 20,
-	    dataClass: '',
-	    border: 0
-	  }},
-	  ready: function ready() {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 21 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(22)
-	var __weex_style__ = __webpack_require__(23)
-	var __weex_script__ = __webpack_require__(24)
-
-	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 22 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 23 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "tip": {
-	    "paddingLeft": 36,
-	    "paddingRight": 36,
-	    "paddingTop": 36,
-	    "paddingBottom": 36,
-	    "borderRadius": 10
-	  },
-	  "tip-txt": {
-	    "fontSize": 28
-	  },
-	  "tip-success": {
-	    "backgroundColor": "#dff0d8",
-	    "borderColor": "#d6e9c6"
-	  },
-	  "tip-txt-success": {
-	    "color": "#3c763d"
-	  },
-	  "tip-info": {
-	    "backgroundColor": "#d9edf7",
-	    "borderColor": "#bce8f1"
-	  },
-	  "tip-txt-info": {
-	    "color": "#31708f"
-	  },
-	  "tip-warning": {
-	    "backgroundColor": "#fcf8e3",
-	    "borderColor": "#faebcc"
-	  },
-	  "tip-txt-warning": {
-	    "color": "#8a6d3b"
-	  },
-	  "tip-danger": {
-	    "backgroundColor": "#f2dede",
-	    "borderColor": "#ebccd1"
-	  },
-	  "tip-txt-danger": {
-	    "color": "#a94442"
-	  }
-	}
-
-/***/ },
-/* 24 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'success',
-	    value: ''
-	  }}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 25 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(26)
-	var __weex_style__ = __webpack_require__(27)
-	var __weex_script__ = __webpack_require__(28)
-
-	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 26 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "style": {
-	    "overflow": "hidden",
-	    "flexDirection": "row"
-	  },
-	  "events": {
-	    "appear": "appeared",
-	    "disappear": "disappeared"
-	  },
-	  "children": [
-	    {
-	      "type": "content"
-	    }
-	  ]
-	}
-
-/***/ },
-/* 27 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrap": {
-	    "overflow": "hidden"
-	  }
-	}
-
-/***/ },
-/* 28 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	var _assign = __webpack_require__(29);
-
-	var _assign2 = _interopRequireDefault(_assign);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-	module.exports = {
-	    data: function () {return {
-	        now: 0,
-	        remain: 0,
-	        time: {
-	            elapse: 0,
-	            D: '0',
-	            DD: '0',
-	            h: '0',
-	            hh: '00',
-	            H: '0',
-	            HH: '0',
-	            m: '0',
-	            mm: '00',
-	            M: '0',
-	            MM: '0',
-	            s: '0',
-	            ss: '00',
-	            S: '0',
-	            SS: '0'
-	        },
-	        outofview: false
-	    }},
-	    ready: function ready() {
-	        if (this.remain <= 0) {
-	            return;
-	        }
-
-	        this.now = Date.now();
-	        this.nextTick();
-	    },
-	    methods: {
-	        nextTick: function nextTick() {
-	            if (this.outofview) {
-	                setTimeout(this.nextTick.bind(this), 1000);
-	            } else {
-	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
-
-	                if (this.calc()) {
-	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
-	                    setTimeout(this.nextTick.bind(this), 1000);
-	                } else {
-	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
-	                }
-	                this._app.updateActions();
-	            }
-	        },
-	        format: function format(str) {
-	            if (str.length >= 2) {
-	                return str;
-	            } else {
-	                return '0' + str;
-	            }
-	        },
-	        calc: function calc() {
-	            var remain = this.remain - this.time.elapse;
-	            if (remain < 0) {
-	                remain = 0;
-	            }
-	            this.time.D = String(parseInt(remain / 86400));
-	            this.time.DD = this.format(this.time.D);
-	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
-	            this.time.hh = this.format(this.time.h);
-	            this.time.H = String(parseInt(remain / 3600));
-	            this.time.HH = this.format(this.time.H);
-	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
-	            this.time.mm = this.format(this.time.m);
-	            this.time.M = String(parseInt(remain / 60));
-	            this.time.MM = this.format(this.time.M);
-	            this.time.s = String(remain - parseInt(this.time.M) * 60);
-	            this.time.ss = this.format(this.time.s);
-	            this.time.S = String(remain);
-	            this.time.SS = this.format(this.time.S);
-
-	            return remain > 0;
-	        },
-	        appeared: function appeared() {
-	            this.outofview = false;
-	        },
-	        disappeared: function disappeared() {
-	            this.outofview = true;
-	        }
-	    }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 29 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(30), __esModule: true };
-
-/***/ },
-/* 30 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(31);
-	module.exports = __webpack_require__(34).Object.assign;
-
-/***/ },
-/* 31 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 19.1.3.1 Object.assign(target, source)
-	var $export = __webpack_require__(32);
-
-	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
-
-/***/ },
-/* 32 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var global    = __webpack_require__(33)
-	  , core      = __webpack_require__(34)
-	  , ctx       = __webpack_require__(35)
-	  , hide      = __webpack_require__(37)
-	  , PROTOTYPE = 'prototype';
-
-	var $export = function(type, name, source){
-	  var IS_FORCED = type & $export.F
-	    , IS_GLOBAL = type & $export.G
-	    , IS_STATIC = type & $export.S
-	    , IS_PROTO  = type & $export.P
-	    , IS_BIND   = type & $export.B
-	    , IS_WRAP   = type & $export.W
-	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
-	    , expProto  = exports[PROTOTYPE]
-	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
-	    , key, own, out;
-	  if(IS_GLOBAL)source = name;
-	  for(key in source){
-	    // contains in native
-	    own = !IS_FORCED && target && target[key] !== undefined;
-	    if(own && key in exports)continue;
-	    // export native or passed
-	    out = own ? target[key] : source[key];
-	    // prevent global pollution for namespaces
-	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
-	    // bind timers to global for call from export context
-	    : IS_BIND && own ? ctx(out, global)
-	    // wrap global constructors for prevent change them in library
-	    : IS_WRAP && target[key] == out ? (function(C){
-	      var F = function(a, b, c){
-	        if(this instanceof C){
-	          switch(arguments.length){
-	            case 0: return new C;
-	            case 1: return new C(a);
-	            case 2: return new C(a, b);
-	          } return new C(a, b, c);
-	        } return C.apply(this, arguments);
-	      };
-	      F[PROTOTYPE] = C[PROTOTYPE];
-	      return F;
-	    // make static versions for prototype methods
-	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
-	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
-	    if(IS_PROTO){
-	      (exports.virtual || (exports.virtual = {}))[key] = out;
-	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
-	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
-	    }
-	  }
-	};
-	// type bitmap
-	$export.F = 1;   // forced
-	$export.G = 2;   // global
-	$export.S = 4;   // static
-	$export.P = 8;   // proto
-	$export.B = 16;  // bind
-	$export.W = 32;  // wrap
-	$export.U = 64;  // safe
-	$export.R = 128; // real proto method for `library` 
-	module.exports = $export;
-
-/***/ },
-/* 33 */
-/***/ function(module, exports) {
-
-	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
-	var global = module.exports = typeof window != 'undefined' && window.Math == Math
-	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
-	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
-
-/***/ },
-/* 34 */
-/***/ function(module, exports) {
-
-	var core = module.exports = {version: '2.4.0'};
-	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
-
-/***/ },
-/* 35 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// optional / simple context binding
-	var aFunction = __webpack_require__(36);
-	module.exports = function(fn, that, length){
-	  aFunction(fn);
-	  if(that === undefined)return fn;
-	  switch(length){
-	    case 1: return function(a){
-	      return fn.call(that, a);
-	    };
-	    case 2: return function(a, b){
-	      return fn.call(that, a, b);
-	    };
-	    case 3: return function(a, b, c){
-	      return fn.call(that, a, b, c);
-	    };
-	  }
-	  return function(/* ...args */){
-	    return fn.apply(that, arguments);
-	  };
-	};
-
-/***/ },
-/* 36 */
-/***/ function(module, exports) {
-
-	module.exports = function(it){
-	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
-	  return it;
-	};
-
-/***/ },
-/* 37 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var dP         = __webpack_require__(38)
-	  , createDesc = __webpack_require__(46);
-	module.exports = __webpack_require__(42) ? function(object, key, value){
-	  return dP.f(object, key, createDesc(1, value));
-	} : function(object, key, value){
-	  object[key] = value;
-	  return object;
-	};
-
-/***/ },
-/* 38 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var anObject       = __webpack_require__(39)
-	  , IE8_DOM_DEFINE = __webpack_require__(41)
-	  , toPrimitive    = __webpack_require__(45)
-	  , dP             = Object.defineProperty;
-
-	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
-	  anObject(O);
-	  P = toPrimitive(P, true);
-	  anObject(Attributes);
-	  if(IE8_DOM_DEFINE)try {
-	    return dP(O, P, Attributes);
-	  } catch(e){ /* empty */ }
-	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
-	  if('value' in Attributes)O[P] = Attributes.value;
-	  return O;
-	};
-
-/***/ },
-/* 39 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var isObject = __webpack_require__(40);
-	module.exports = function(it){
-	  if(!isObject(it))throw TypeError(it + ' is not an object!');
-	  return it;
-	};
-
-/***/ },
-/* 40 */
-/***/ function(module, exports) {
-
-	module.exports = function(it){
-	  return typeof it === 'object' ? it !== null : typeof it === 'function';
-	};
-
-/***/ },
-/* 41 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
-	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
-	});
-
-/***/ },
-/* 42 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// Thank's IE8 for his funny defineProperty
-	module.exports = !__webpack_require__(43)(function(){
-	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
-	});
-
-/***/ },
-/* 43 */
-/***/ function(module, exports) {
-
-	module.exports = function(exec){
-	  try {
-	    return !!exec();
-	  } catch(e){
-	    return true;
-	  }
-	};
-
-/***/ },
-/* 44 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var isObject = __webpack_require__(40)
-	  , document = __webpack_require__(33).document
-	  // in old IE typeof document.createElement is 'object'
-	  , is = isObject(document) && isObject(document.createElement);
-	module.exports = function(it){
-	  return is ? document.createElement(it) : {};
-	};
-
-/***/ },
-/* 45 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 7.1.1 ToPrimitive(input [, PreferredType])
-	var isObject = __webpack_require__(40);
-	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
-	// and the second argument - flag - preferred type is a string
-	module.exports = function(it, S){
-	  if(!isObject(it))return it;
-	  var fn, val;
-	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
-	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
-	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
-	  throw TypeError("Can't convert object to primitive value");
-	};
-
-/***/ },
-/* 46 */
-/***/ function(module, exports) {
-
-	module.exports = function(bitmap, value){
-	  return {
-	    enumerable  : !(bitmap & 1),
-	    configurable: !(bitmap & 2),
-	    writable    : !(bitmap & 4),
-	    value       : value
-	  };
-	};
-
-/***/ },
-/* 47 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-	// 19.1.2.1 Object.assign(target, source, ...)
-	var getKeys  = __webpack_require__(48)
-	  , gOPS     = __webpack_require__(63)
-	  , pIE      = __webpack_require__(64)
-	  , toObject = __webpack_require__(65)
-	  , IObject  = __webpack_require__(52)
-	  , $assign  = Object.assign;
-
-	// should work with symbols and should have deterministic property order (V8 bug)
-	module.exports = !$assign || __webpack_require__(43)(function(){
-	  var A = {}
-	    , B = {}
-	    , S = Symbol()
-	    , K = 'abcdefghijklmnopqrst';
-	  A[S] = 7;
-	  K.split('').forEach(function(k){ B[k] = k; });
-	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
-	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
-	  var T     = toObject(target)
-	    , aLen  = arguments.length
-	    , index = 1
-	    , getSymbols = gOPS.f
-	    , isEnum     = pIE.f;
-	  while(aLen > index){
-	    var S      = IObject(arguments[index++])
-	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
-	      , length = keys.length
-	      , j      = 0
-	      , key;
-	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
-	  } return T;
-	} : $assign;
-
-/***/ },
-/* 48 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 19.1.2.14 / 15.2.3.14 Object.keys(O)
-	var $keys       = __webpack_require__(49)
-	  , enumBugKeys = __webpack_require__(62);
-
-	module.exports = Object.keys || function keys(O){
-	  return $keys(O, enumBugKeys);
-	};
-
-/***/ },
-/* 49 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var has          = __webpack_require__(50)
-	  , toIObject    = __webpack_require__(51)
-	  , arrayIndexOf = __webpack_require__(55)(false)
-	  , IE_PROTO     = __webpack_require__(59)('IE_PROTO');
-
-	module.exports = function(object, names){
-	  var O      = toIObject(object)
-	    , i      = 0
-	    , result = []
-	    , key;
-	  for(key in O)if(key != IE_PROTO)has(O, key) && result.push(key);
-	  // Don't enum bug & hidden keys
-	  while(names.length > i)if(has(O, key = names[i++])){
-	    ~arrayIndexOf(result, key) || result.push(key);
-	  }
-	  return result;
-	};
-
-/***/ },
-/* 50 */
-/***/ function(module, exports) {
-
-	var hasOwnProperty = {}.hasOwnProperty;
-	module.exports = function(it, key){
-	  return hasOwnProperty.call(it, key);
-	};
-
-/***/ },
-/* 51 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// to indexed object, toObject with fallback for non-array-like ES3 strings
-	var IObject = __webpack_require__(52)
-	  , defined = __webpack_require__(54);
-	module.exports = function(it){
-	  return IObject(defined(it));
-	};
-
-/***/ },
-/* 52 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// fallback for non-array-like ES3 and non-enumerable old V8 strings
-	var cof = __webpack_require__(53);
-	module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){
-	  return cof(it) == 'String' ? it.split('') : Object(it);
-	};
-
-/***/ },
-/* 53 */
-/***/ function(module, exports) {
-
-	var toString = {}.toString;
-
-	module.exports = function(it){
-	  return toString.call(it).slice(8, -1);
-	};
-
-/***/ },
-/* 54 */
-/***/ function(module, exports) {
-
-	// 7.2.1 RequireObjectCoercible(argument)
-	module.exports = function(it){
-	  if(it == undefined)throw TypeError("Can't call method on  " + it);
-	  return it;
-	};
-
-/***/ },
-/* 55 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// false -> Array#indexOf
-	// true  -> Array#includes
-	var toIObject = __webpack_require__(51)
-	  , toLength  = __webpack_require__(56)
-	  , toIndex   = __webpack_require__(58);
-	module.exports = function(IS_INCLUDES){
-	  return function($this, el, fromIndex){
-	    var O      = toIObject($this)
-	      , length = toLength(O.length)
-	      , index  = toIndex(fromIndex, length)
-	      , value;
-	    // Array#includes uses SameValueZero equality algorithm
-	    if(IS_INCLUDES && el != el)while(length > index){
-	      value = O[index++];
-	      if(value != value)return true;
-	    // Array#toIndex ignores holes, Array#includes - not
-	    } else for(;length > index; index++)if(IS_INCLUDES || index in O){
-	      if(O[index] === el)return IS_INCLUDES || index || 0;
-	    } return !IS_INCLUDES && -1;
-	  };
-	};
-
-/***/ },
-/* 56 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 7.1.15 ToLength
-	var toInteger = __webpack_require__(57)
-	  , min       = Math.min;
-	module.exports = function(it){
-	  return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991
-	};
-
-/***/ },
-/* 57 */
-/***/ function(module, exports) {
-
-	// 7.1.4 ToInteger
-	var ceil  = Math.ceil
-	  , floor = Math.floor;
-	module.exports = function(it){
-	  return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);
-	};
-
-/***/ },
-/* 58 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var toInteger = __webpack_require__(57)
-	  , max       = Math.max
-	  , min       = Math.min;
-	module.exports = function(index, length){
-	  index = toInteger(index);
-	  return index < 0 ? max(index + length, 0) : min(index, length);
-	};
-
-/***/ },
-/* 59 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var shared = __webpack_require__(60)('keys')
-	  , uid    = __webpack_require__(61);
-	module.exports = function(key){
-	  return shared[key] || (shared[key] = uid(key));
-	};
-
-/***/ },
-/* 60 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var global = __webpack_require__(33)
-	  , SHARED = '__core-js_shared__'
-	  , store  = global[SHARED] || (global[SHARED] = {});
-	module.exports = function(key){
-	  return store[key] || (store[key] = {});
-	};
-
-/***/ },
-/* 61 */
-/***/ function(module, exports) {
-
-	var id = 0
-	  , px = Math.random();
-	module.exports = function(key){
-	  return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));
-	};
-
-/***/ },
-/* 62 */
-/***/ function(module, exports) {
-
-	// IE 8- don't enum bug keys
-	module.exports = (
-	  'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'
-	).split(',');
-
-/***/ },
-/* 63 */
-/***/ function(module, exports) {
-
-	exports.f = Object.getOwnPropertySymbols;
-
-/***/ },
-/* 64 */
-/***/ function(module, exports) {
-
-	exports.f = {}.propertyIsEnumerable;
-
-/***/ },
-/* 65 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 7.1.13 ToObject(argument)
-	var defined = __webpack_require__(54);
-	module.exports = function(it){
-	  return Object(defined(it));
-	};
-
-/***/ },
-/* 66 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(67)
-	var __weex_style__ = __webpack_require__(68)
-	var __weex_script__ = __webpack_require__(69)
-
-	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 67 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrap"
-	  ],
-	  "events": {
-	    "appear": "appeared",
-	    "disappear": "disappeared"
-	  },
-	  "children": [
-	    {
-	      "type": "div",
-	      "id": "anim",
-	      "classList": [
-	        "anim"
-	      ],
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 68 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrap": {
-	    "overflow": "hidden",
-	    "position": "relative"
-	  },
-	  "anim": {
-	    "flexDirection": "column",
-	    "position": "absolute",
-	    "transform": "translateY(0) translateZ(0)"
-	  }
-	}
-
-/***/ },
-/* 69 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	    data: function () {return {
-	        step: 0,
-	        count: 0,
-	        index: 1,
-	        duration: 0,
-	        interval: 0,
-	        outofview: false
-	    }},
-	    ready: function ready() {
-	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
-	            this.nextTick();
-	        }
-	    },
-	    methods: {
-	        nextTick: function nextTick() {
-	            var self = this;
-	            if (this.outofview) {
-	                setTimeout(self.nextTick.bind(self), self.interval);
-	            } else {
-	                setTimeout(function () {
-	                    self.animation(self.nextTick.bind(self));
-	                }, self.interval);
-	            }
-	        },
-	        animation: function animation(cb) {
-	            var self = this;
-	            var offset = -self.step * self.index;
-	            var $animation = __weex_require__('@weex-module/animation');
-	            $animation.transition(this.$el('anim'), {
-	                styles: {
-	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
-	                },
-	                timingFunction: 'ease',
-	                duration: self.duration
-	            }, function () {
-	                self.index = (self.index + 1) % self.count;
-	                self.$emit('change', {
-	                    index: self.index,
-	                    count: self.count
-	                });
-	                cb && cb();
-	            });
-	        },
-	        appeared: function appeared() {
-	            this.outofview = false;
-	        },
-	        disappeared: function disappeared() {
-	            this.outofview = true;
-	        }
-	    }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 70 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(71)
-	var __weex_style__ = __webpack_require__(72)
-	var __weex_script__ = __webpack_require__(73)
-
-	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 71 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "container"
-	  ],
-	  "style": {
-	    "height": function () {return this.height},
-	    "backgroundColor": function () {return this.backgroundColor}
-	  },
-	  "attr": {
-	    "dataRole": function () {return this.dataRole}
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": [
-	        "right-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.rightItemColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "right",
-	        "value": function () {return this.rightItemTitle}
-	      },
-	      "shown": function () {return !this.rightItemSrc},
-	      "events": {
-	        "click": "onclickrightitem"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "right-image"
-	      ],
-	      "attr": {
-	        "naviItemPosition": "right",
-	        "src": function () {return this.rightItemSrc}
-	      },
-	      "shown": function () {return this.rightItemSrc},
-	      "events": {
-	        "click": "onclickrightitem"
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "left-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.leftItemColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "left",
-	        "value": function () {return this.leftItemTitle}
-	      },
-	      "shown": function () {return !this.leftItemSrc},
-	      "events": {
-	        "click": "onclickleftitem"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "left-image"
-	      ],
-	      "attr": {
-	        "naviItemPosition": "left",
-	        "src": function () {return this.leftItemSrc}
-	      },
-	      "shown": function () {return this.leftItemSrc},
-	      "events": {
-	        "click": "onclickleftitem"
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "center-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.titleColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "center",
-	        "value": function () {return this.title}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 72 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "container": {
-	    "flexDirection": "row",
-	    "position": "fixed",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "width": 750
-	  },
-	  "right-text": {
-	    "position": "absolute",
-	    "bottom": 28,
-	    "right": 32,
-	    "textAlign": "right",
-	    "fontSize": 32,
-	    "fontFamily": "'Open Sans', sans-serif"
-	  },
-	  "left-text": {
-	    "position": "absolute",
-	    "bottom": 28,
-	    "left": 32,
-	    "textAlign": "left",
-	    "fontSize": 32,
-	    "fontFamily": "'Open Sans', sans-serif"
-	  },
-	  "center-text": {
-	    "position": "absolute",
-	    "bottom": 25,
-	    "left": 172,
-	    "right": 172,
-	    "textAlign": "center",
-	    "fontSize": 36,
-	    "fontWeight": "bold"
-	  },
-	  "left-image": {
-	    "position": "absolute",
-	    "bottom": 20,
-	    "left": 28,
-	    "width": 50,
-	    "height": 50
-	  },
-	  "right-image": {
-	    "position": "absolute",
-	    "bottom": 20,
-	    "right": 28,
-	    "width": 50,
-	    "height": 50
-	  }
-	}
-
-/***/ },
-/* 73 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    dataRole: 'navbar',
-
-	    backgroundColor: 'black',
-
-	    height: 88,
-
-	    title: "",
-
-	    titleColor: 'black',
-
-	    rightItemSrc: '',
-
-	    rightItemTitle: '',
-
-	    rightItemColor: 'black',
-
-	    leftItemSrc: '',
-
-	    leftItemTitle: '',
-
-	    leftItemColor: 'black'
-	  }},
-	  methods: {
-	    onclickrightitem: function onclickrightitem(e) {
-	      this.$dispatch('naviBar.rightItem.click', {});
-	    },
-	    onclickleftitem: function onclickleftitem(e) {
-	      this.$dispatch('naviBar.leftItem.click', {});
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 74 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(70)
-	var __weex_template__ = __webpack_require__(75)
-	var __weex_style__ = __webpack_require__(76)
-	var __weex_script__ = __webpack_require__(77)
-
-	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 75 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrapper"
-	  ],
-	  "children": [
-	    {
-	      "type": "wxc-navbar",
-	      "attr": {
-	        "dataRole": function () {return this.dataRole},
-	        "height": function () {return this.height},
-	        "backgroundColor": function () {return this.backgroundColor},
-	        "title": function () {return this.title},
-	        "titleColor": function () {return this.titleColor},
-	        "leftItemSrc": function () {return this.leftItemSrc},
-	        "leftItemTitle": function () {return this.leftItemTitle},
-	        "leftItemColor": function () {return this.leftItemColor},
-	        "rightItemSrc": function () {return this.rightItemSrc},
-	        "rightItemTitle": function () {return this.rightItemTitle},
-	        "rightItemColor": function () {return this.rightItemColor}
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": [
-	        "wrapper"
-	      ],
-	      "style": {
-	        "marginTop": function () {return this.height}
-	      },
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 76 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrapper": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0,
-	    "width": 750
-	  }
-	}
-
-/***/ },
-/* 77 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    dataRole: 'navbar',
-	    backgroundColor: 'black',
-	    height: 88,
-	    title: "",
-	    titleColor: 'black',
-	    rightItemSrc: '',
-	    rightItemTitle: '',
-	    rightItemColor: 'black',
-	    leftItemSrc: '',
-	    leftItemTitle: '',
-	    leftItemColor: 'black'
-	  }}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 78 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(79)
-	var __weex_template__ = __webpack_require__(83)
-	var __weex_style__ = __webpack_require__(84)
-	var __weex_script__ = __webpack_require__(85)
-
-	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 79 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(80)
-	var __weex_style__ = __webpack_require__(81)
-	var __weex_script__ = __webpack_require__(82)
-
-	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 80 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "container"
-	  ],
-	  "style": {
-	    "backgroundColor": function () {return this.backgroundColor}
-	  },
-	  "events": {
-	    "click": "onclickitem"
-	  },
-	  "children": [
-	    {
-	      "type": "image",
-	      "classList": [
-	        "top-line"
-	      ],
-	      "attr": {
-	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "tab-icon"
-	      ],
-	      "attr": {
-	        "src": function () {return this.icon}
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "tab-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.titleColor}
-	      },
-	      "attr": {
-	        "value": function () {return this.title}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 81 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "container": {
-	    "flex": 1,
-	    "flexDirection": "column",
-	    "alignItems": "center",
-	    "justifyContent": "center",
-	    "height": 88
-	  },
-	  "top-line": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "height": 2
-	  },
-	  "tab-icon": {
-	    "marginTop": 5,
-	    "width": 40,
-	    "height": 40
-	  },
-	  "tab-text": {
-	    "marginTop": 5,
-	    "textAlign": "center",
-	    "fontSize": 20
-	  }
-	}
-
-/***/ },
-/* 82 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    index: 0,
-	    title: '',
-	    titleColor: '#000000',
-	    icon: '',
-	    backgroundColor: '#ffffff'
-	  }},
-	  methods: {
-	    onclickitem: function onclickitem(e) {
-	      var vm = this;
-	      var params = {
-	        index: vm.index
-	      };
-	      vm.$dispatch('tabItem.onClick', params);
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 83 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrapper"
-	  ],
-	  "children": [
-	    {
-	      "type": "embed",
-	      "classList": [
-	        "content"
-	      ],
-	      "style": {
-	        "visibility": function () {return this.visibility}
-	      },
-	      "repeat": function () {return this.tabItems},
-	      "attr": {
-	        "src": function () {return this.src},
-	        "type": "weex"
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": [
-	        "tabbar"
-	      ],
-	      "append": "tree",
-	      "children": [
-	        {
-	          "type": "wxc-tabitem",
-	          "repeat": function () {return this.tabItems},
-	          "attr": {
-	            "index": function () {return this.index},
-	            "icon": function () {return this.icon},
-	            "title": function () {return this.title},
-	            "titleColor": function () {return this.titleColor}
-	          }
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 84 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrapper": {
-	    "width": 750,
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0
-	  },
-	  "content": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0,
-	    "marginTop": 0,
-	    "marginBottom": 88
-	  },
-	  "tabbar": {
-	    "flexDirection": "row",
-	    "position": "fixed",
-	    "bottom": 0,
-	    "left": 0,
-	    "right": 0,
-	    "height": 88
-	  }
-	}
-
-/***/ },
-/* 85 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    tabItems: [],
-	    selectedIndex: 0,
-	    selectedColor: '#ff0000',
-	    unselectedColor: '#000000'
-	  }},
-	  created: function created() {
-	    this.selected(this.selectedIndex);
-
-	    this.$on('tabItem.onClick', function (e) {
-	      var detail = e.detail;
-	      this.selectedIndex = detail.index;
-	      this.selected(detail.index);
-
-	      var params = {
-	        index: detail.index
-	      };
-	      this.$dispatch('tabBar.onClick', params);
-	    });
-	  },
-	  methods: {
-	    selected: function selected(index) {
-	      for (var i = 0; i < this.tabItems.length; i++) {
-	        var tabItem = this.tabItems[i];
-	        if (i == index) {
-	          tabItem.icon = tabItem.selectedImage;
-	          tabItem.titleColor = this.selectedColor;
-	          tabItem.visibility = 'visible';
-	        } else {
-	          tabItem.icon = tabItem.image;
-	          tabItem.titleColor = this.unselectedColor;
-	          tabItem.visibility = 'hidden';
-	        }
-	      }
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 86 */,
-/* 87 */,
-/* 88 */,
-/* 89 */,
-/* 90 */,
-/* 91 */,
-/* 92 */,
-/* 93 */,
-/* 94 */
+/***/ 94:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2061,6 +92,24 @@
 	          "attr": {
 	            "value": function () {return 'onchange: ' + (this.txtChange)}
 	          }
+	        },
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 40
+	          },
+	          "attr": {
+	            "value": function () {return 'onreturntype: ' + (this.txtReturnType)}
+	          }
+	        },
+	        {
+	          "type": "text",
+	          "style": {
+	            "fontSize": 40
+	          },
+	          "attr": {
+	            "value": function () {return 'onrange: ' + (this.txtRange)}
+	          }
 	        }
 	      ]
 	    },
@@ -2068,18 +117,36 @@
 	      "type": "scroller",
 	      "children": [
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = text",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = text"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "text",
 	                "placeholder": "Input Text",
-	                "autofocus": function () {return this.autofocus},
+	                ":autofocus": "autofocus",
 	                "value": ""
 	              },
 	              "classList": [
@@ -2093,13 +160,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = password",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = password"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "password",
@@ -2116,13 +201,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = url",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = url"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "url",
@@ -2139,13 +242,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = email",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = email"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "email",
@@ -2162,13 +283,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = tel",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = tel"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "tel",
@@ -2185,13 +324,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = time",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = time"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "time",
@@ -2208,13 +365,31 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "input type = date",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input type = date"
+	                  }
+	                }
+	              ]
+	            },
+	            {
 	              "type": "input",
 	              "attr": {
 	                "type": "date",
@@ -2233,22 +408,301 @@
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "function focus() & blur()",
-	            "type": "primary"
-	          },
+	          "type": "div",
 	          "children": [
 	            {
 	              "type": "div",
 	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = default"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "default"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = go"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "go"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = next"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "next"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = search"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "search"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = send"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "send"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input keyboard = done"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "returnKeyType": "done"
+	              },
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "function focus() & blur()"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "div",
+	              "style": {
 	                "flexDirection": "row",
 	                "marginBottom": 16,
 	                "justifyContent": "space-between"
 	              },
 	              "children": [
 	                {
-	                  "type": "wxc-button",
+	                  "type": "text",
+	                  "classList": [
+	                    "button"
+	                  ],
 	                  "attr": {
 	                    "value": "Focus",
 	                    "type": "primary"
@@ -2258,7 +712,10 @@
 	                  }
 	                },
 	                {
-	                  "type": "wxc-button",
+	                  "type": "text",
+	                  "classList": [
+	                    "button"
+	                  ],
 	                  "attr": {
 	                    "value": "Blur",
 	                    "type": "primary"
@@ -2282,6 +739,86 @@
 	              "id": "input1"
 	            }
 	          ]
+	        },
+	        {
+	          "type": "div",
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "backgroundColor": "#286090"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "title"
+	                  ],
+	                  "style": {
+	                    "height": 80,
+	                    "padding": 20,
+	                    "color": "#FFFFFF"
+	                  },
+	                  "attr": {
+	                    "value": "input selection"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "div",
+	              "style": {
+	                "flexDirection": "row",
+	                "marginBottom": 16,
+	                "justifyContent": "space-between"
+	              },
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "button"
+	                  ],
+	                  "attr": {
+	                    "value": "setRange",
+	                    "type": "primary"
+	                  },
+	                  "events": {
+	                    "click": "setRange"
+	                  }
+	                },
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "button"
+	                  ],
+	                  "attr": {
+	                    "value": "getRange",
+	                    "type": "primary"
+	                  },
+	                  "events": {
+	                    "click": "getRange"
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "input",
+	              "attr": {
+	                "type": "text",
+	                "placeholder": "please input",
+	                "value": "123456789"
+	              },
+	              "id": "inputselection",
+	              "classList": [
+	                "input"
+	              ],
+	              "events": {
+	                "change": "onchange",
+	                "return": "onreturn",
+	                "input": "oninput"
+	              }
+	            }
+	          ]
 	        }
 	      ]
 	    }
@@ -2289,7 +826,8 @@
 	}
 
 /***/ },
-/* 95 */
+
+/***/ 95:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2297,22 +835,40 @@
 	    "fontSize": 60,
 	    "height": 80,
 	    "width": 750
+	  },
+	  "button": {
+	    "fontSize": 36,
+	    "width": 200,
+	    "color": "#41B883",
+	    "textAlign": "center",
+	    "paddingTop": 10,
+	    "paddingBottom": 10,
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "marginRight": 20,
+	    "borderColor": "rgb(162,217,192)",
+	    "backgroundColor": "rgba(162,217,192,0.2)"
 	  }
 	}
 
 /***/ },
-/* 96 */
-/***/ function(module, exports, __webpack_require__) {
+
+/***/ 96:
+/***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(4);
 	module.exports = {
-	    data: function () {return {
-	        txtInput: '',
-	        txtChange: '',
-	        autofocus: false
-	    }},
+	    data: function data() {
+	        return {
+	            txtInput: '',
+	            txtChange: '',
+	            txtReturnType: '',
+	            txtSelection: '',
+	            autofocus: false,
+	            txtRange: ''
+	        };
+	    },
 	    methods: {
 	        ready: function ready() {
 	            var self = this;
@@ -2324,6 +880,10 @@
 	            this.txtChange = event.value;
 	            console.log('onchange', event.value);
 	        },
+	        onreturn: function onreturn(event) {
+	            this.txtReturnType = event.returnKeyType;
+	            console.log('onreturn', event.type);
+	        },
 	        oninput: function oninput(event) {
 	            this.txtInput = event.value;
 	            console.log('oninput', event.value);
@@ -2333,6 +893,16 @@
 	        },
 	        blur: function blur() {
 	            this.$el('input1').blur();
+	        },
+	        setRange: function setRange() {
+	            console.log(this.$el["inputselection"]);
+	            this.$el("inputselection").setSelectionRange(2, 6);
+	        },
+	        getRange: function getRange() {
+	            var self = this;
+	            this.$el("inputselection").getSelectionRange(function (e) {
+	                self.txtRange = e.selectionStart + '-' + e.selectionEnd;
+	            });
 	        }
 	    }
 	};}
@@ -2340,4 +910,5 @@
 
 
 /***/ }
-/******/ ]);
\ No newline at end of file
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/component/lengthunitwx-demo.js b/ios/playground/bundlejs/component/lengthunitwx-demo.js
new file mode 100644
index 0000000..eabc4ec
--- /dev/null
+++ b/ios/playground/bundlejs/component/lengthunitwx-demo.js
@@ -0,0 +1,329 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(97)
+	var __weex_style__ = __webpack_require__(98)
+	var __weex_script__ = __webpack_require__(99)
+
+	__weex_define__('@weex-component/1cedab9e17186432a3ad57749557d3a0', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/1cedab9e17186432a3ad57749557d3a0',undefined,undefined)
+
+/***/ },
+
+/***/ 34:
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 97:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "children": [
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 100
+	      },
+	      "attr": {
+	        "value": "width:100"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 200
+	      },
+	      "attr": {
+	        "value": "width:200"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 300
+	      },
+	      "attr": {
+	        "value": "width:300"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 400
+	      },
+	      "attr": {
+	        "value": "width:400"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 700
+	      },
+	      "attr": {
+	        "value": "width:700"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": 750
+	      },
+	      "attr": {
+	        "value": "width:750"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "50wx"
+	      },
+	      "attr": {
+	        "value": "width:50wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "100wx"
+	      },
+	      "attr": {
+	        "value": "width:100wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "200wx"
+	      },
+	      "attr": {
+	        "value": "width:200wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "300wx"
+	      },
+	      "attr": {
+	        "value": "width:300wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "320wx"
+	      },
+	      "attr": {
+	        "value": "width:320wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "360wx"
+	      },
+	      "attr": {
+	        "value": "width:360wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "style": {
+	        "fontSize": 20,
+	        "backgroundColor": "#ff0000",
+	        "marginTop": 10,
+	        "width": "375wx"
+	      },
+	      "attr": {
+	        "value": "width:375wx"
+	      }
+	    },
+	    {
+	      "type": "text",
+	      "id": "theText",
+	      "classList": [
+	        "unitwx"
+	      ],
+	      "attr": {
+	        "value": "hello world"
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 98:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "unitwx": {
+	    "width": "200wx",
+	    "height": "130wx",
+	    "marginTop": 80,
+	    "backgroundColor": "#00ff00",
+	    "color": "#FFFFFF"
+	  }
+	}
+
+/***/ },
+
+/***/ 99:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var _stringify = __webpack_require__(100);
+
+	var _stringify2 = _interopRequireDefault(_stringify);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	module.exports = {
+	  data: function () {return {
+	    theWidth: 100
+	  }},
+	  methods: {
+	    ready: function ready() {
+	      console.log('in ready ' + (0, _stringify2.default)(WXEnvironment));
+
+	      var me = this;
+	      setTimeout(function () {
+	        me.theWidth = 200;
+	      }, 2000);
+
+	      setTimeout(function () {
+	        me.theWidth = '200wx';
+	      }, 4000);
+	    },
+
+	    setTo200: function setTo200() {
+	      this.theWidth = '200';
+	    },
+	    setTo200wx: function setTo200wx() {
+	      this.theWidth = '200wx';
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 100:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+
+/***/ 101:
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/component/list/list-basic.js b/ios/playground/bundlejs/component/list/list-basic.js
index f059d98..174c140 100644
--- a/ios/playground/bundlejs/component/list/list-basic.js
+++ b/ios/playground/bundlejs/component/list/list-basic.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(97)
-	var __weex_style__ = __webpack_require__(98)
-	var __weex_script__ = __webpack_require__(99)
+	var __weex_template__ = __webpack_require__(102)
+	var __weex_style__ = __webpack_require__(103)
+	var __weex_script__ = __webpack_require__(104)
 
 	__weex_define__('@weex-component/e4cde146096cc51ec5ab930a518ea157', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,17 +66,97 @@
 
 /***/ },
 
-/***/ 97:
+/***/ 34:
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 100:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+
+/***/ 101:
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
+
+/***/ 102:
 /***/ function(module, exports) {
 
 	module.exports = {
 	  "type": "div",
 	  "children": [
 	    {
+	      "type": "div",
+	      "style": {
+	        "backgroundColor": "#eeeeee"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "count"
+	          ],
+	          "attr": {
+	            "value": function () {return 'Appear items:' + (this.appearMin) + ' - ' + (this.appearMax)}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "height": 20,
+	            "width": 750,
+	            "borderColor": "#000000",
+	            "borderWidth": 2,
+	            "justifyContent": "center"
+	          },
+	          "children": [
+	            {
+	              "type": "div",
+	              "style": {
+	                "height": 14,
+	                "width": function () {return this.progress_width},
+	                "marginLeft": function () {return this.progress},
+	                "backgroundColor": "#808080"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "text",
+	          "style": {
+	            "width": 750
+	          },
+	          "attr": {
+	            "value": function () {return this.event}
+	          }
+	        }
+	      ]
+	    },
+	    {
 	      "type": "list",
+	      "id": "list",
 	      "classList": [
 	        "list"
 	      ],
+	      "events": {
+	        "scroll": "onScroll"
+	      },
+	      "attr": {
+	        "offsetAccuracy": "5"
+	      },
 	      "children": [
 	        {
 	          "type": "refresh",
@@ -167,22 +247,13 @@
 	          ]
 	        }
 	      ]
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "count"
-	      ],
-	      "attr": {
-	        "value": function () {return 'Appear items:' + (this.appearMin) + ' - ' + (this.appearMax)}
-	      }
 	    }
 	  ]
 	}
 
 /***/ },
 
-/***/ 98:
+/***/ 103:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -210,7 +281,8 @@
 	    "borderBottomWidth": 2,
 	    "borderBottomColor": "#c0c0c0",
 	    "height": 100,
-	    "padding": 20
+	    "padding": 20,
+	    "backgroundColor:active": "#00BFFF"
 	  },
 	  "refresh-view": {
 	    "width": 750,
@@ -234,11 +306,19 @@
 
 /***/ },
 
-/***/ 99:
-/***/ function(module, exports) {
+/***/ 104:
+/***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
+	var _stringify = __webpack_require__(100);
+
+	var _stringify2 = _interopRequireDefault(_stringify);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	var dom = weex.requireModule('dom');
+	var isFirst = true;
 	module.exports = {
 	  methods: {
 	    onappear: function onappear(e) {
@@ -291,9 +371,27 @@
 	        }
 	        self.loading_display = 'hide';
 	      }, 3000);
+	    },
+
+	    onScroll: function onScroll(e) {
+	      var self = this;
+	      this.event = 'contentOffset: ' + (0, _stringify2.default)(e.contentOffset) + '\ncontentSize: ' + (0, _stringify2.default)(e.contentSize);
+	      dom.getComponentRect(this.$el('list'), function (ret) {
+	        if (e.contentOffset.x == 0 && e.contentOffset.y == 0 && isFirst) {
+	          isFirst = false;
+	          return;
+	        }
+	        var listHeight = ret.size.height;
+	        self.progress_width = listHeight / e.contentSize.height * 750;
+	        var offsetY = e.contentOffset.y > 0 ? 0 : Math.abs(e.contentOffset.y);
+	        self.progress = offsetY / (e.contentSize.height - listHeight) * (750 - self.progress_width);
+	      });
 	    }
 	  },
 	  data: function () {return {
+	    progress_width: 0,
+	    progress: 0,
+	    event: '-',
 	    refresh_display: 'hide',
 	    loading_display: 'hide',
 	    appearMin: 1,
diff --git a/ios/playground/bundlejs/component/list/list-demo-horizon.js b/ios/playground/bundlejs/component/list/list-demo-horizon.js
index ab83a04..056d26d 100644
--- a/ios/playground/bundlejs/component/list/list-demo-horizon.js
+++ b/ios/playground/bundlejs/component/list/list-demo-horizon.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(103)
-	var __weex_style__ = __webpack_require__(104)
-	var __weex_script__ = __webpack_require__(105)
+	var __weex_template__ = __webpack_require__(108)
+	var __weex_style__ = __webpack_require__(109)
+	var __weex_script__ = __webpack_require__(110)
 
 	__weex_define__('@weex-component/a089a89d3221f94935162af3aa4db1af', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 103:
+/***/ 108:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -853,7 +853,7 @@
 
 /***/ },
 
-/***/ 104:
+/***/ 109:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -929,7 +929,7 @@
 
 /***/ },
 
-/***/ 105:
+/***/ 110:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/list/list-demo.js b/ios/playground/bundlejs/component/list/list-demo.js
index af38db0..559552a 100644
--- a/ios/playground/bundlejs/component/list/list-demo.js
+++ b/ios/playground/bundlejs/component/list/list-demo.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(100)
-	var __weex_style__ = __webpack_require__(101)
-	var __weex_script__ = __webpack_require__(102)
+	var __weex_template__ = __webpack_require__(105)
+	var __weex_style__ = __webpack_require__(106)
+	var __weex_script__ = __webpack_require__(107)
 
 	__weex_define__('@weex-component/3226d5b3a8f5b1ae43875db22de0785e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 100:
+/***/ 105:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -810,7 +810,7 @@
 
 /***/ },
 
-/***/ 101:
+/***/ 106:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -888,7 +888,7 @@
 
 /***/ },
 
-/***/ 102:
+/***/ 107:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/list/waterfall.js b/ios/playground/bundlejs/component/list/waterfall.js
new file mode 100644
index 0000000..9cfa83b
--- /dev/null
+++ b/ios/playground/bundlejs/component/list/waterfall.js
@@ -0,0 +1,877 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(464)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(465)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(466)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/admin/Workspace/incubator-weex/examples/vue/components/waterfall.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-388ea278"
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
+	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 464:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "page": {
+	    "backgroundColor": "#EFEFEF"
+	  },
+	  "refresh": {
+	    "height": 128,
+	    "width": 750,
+	    "flexDirection": "row",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "refreshText": {
+	    "color": "#888888",
+	    "fontWeight": "bold"
+	  },
+	  "indicator": {
+	    "color": "#888888",
+	    "height": 40,
+	    "width": 40,
+	    "marginRight": 30
+	  },
+	  "banner": {
+	    "height": 377,
+	    "flexDirection": "row"
+	  },
+	  "bannerInfo": {
+	    "width": 270,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "avatar": {
+	    "width": 148,
+	    "height": 108,
+	    "borderRadius": 54,
+	    "borderWidth": 4,
+	    "borderColor": "#FFFFFF",
+	    "marginBottom": 14
+	  },
+	  "name": {
+	    "fontWeight": "bold",
+	    "fontSize": 32,
+	    "color": "#ffffff",
+	    "lineHeight": 32,
+	    "textAlign": "center",
+	    "marginBottom": 16
+	  },
+	  "titleWrap": {
+	    "width": 100,
+	    "height": 24,
+	    "marginBottom": 10,
+	    "backgroundColor": "rgba(255,255,255,0.8)",
+	    "borderRadius": 12,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "title": {
+	    "fontSize": 20,
+	    "color": "#000000"
+	  },
+	  "bannerPhotoWrap": {
+	    "width": 449,
+	    "height": 305,
+	    "backgroundColor": "#FFFFFF",
+	    "borderRadius": 12,
+	    "marginTop": 35,
+	    "padding": 12,
+	    "flexDirection": "row",
+	    "justifyContent": "space-between",
+	    "flexWrap": "wrap"
+	  },
+	  "bannerPhoto": {
+	    "width": 137,
+	    "height": 137,
+	    "marginBottom": 6
+	  },
+	  "stickyHeader": {
+	    "position": "sticky",
+	    "height": 94,
+	    "flexDirection": "row",
+	    "paddingBottom": 6
+	  },
+	  "stickyWrapper": {
+	    "flexDirection": "row",
+	    "backgroundColor": "#00cc99",
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flex": 1
+	  },
+	  "stickyTextImageWrapper": {
+	    "flex": 1,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flexDirection": "row"
+	  },
+	  "stickyText": {
+	    "color": "#FFFFFF",
+	    "fontWeight": "bold",
+	    "fontSize": 32,
+	    "marginRight": 12
+	  },
+	  "stickyImage": {
+	    "width": 64,
+	    "height": 64,
+	    "borderRadius": 32
+	  },
+	  "cell": {
+	    "paddingTop": 6,
+	    "paddingBottom": 6
+	  },
+	  "item": {
+	    "backgroundColor": "#FFFFFF",
+	    "alignItems": "center"
+	  },
+	  "itemName": {
+	    "fontSize": 28,
+	    "color": "#333333",
+	    "lineHeight": 42,
+	    "textAlign": "left",
+	    "marginTop": 24
+	  },
+	  "itemPhoto": {
+	    "marginTop": 18,
+	    "width": 220,
+	    "height": 220,
+	    "marginBottom": 18
+	  },
+	  "itemDesc": {
+	    "fontSize": 24,
+	    "margin": 12,
+	    "color": "#999999",
+	    "lineHeight": 36,
+	    "textAlign": "left"
+	  },
+	  "itemClickBehaviour": {
+	    "fontSize": 36,
+	    "color": "#00cc99",
+	    "lineHeight": 36,
+	    "textAlign": "center",
+	    "marginTop": 6,
+	    "marginLeft": 24,
+	    "marginRight": 24,
+	    "marginBottom": 30
+	  },
+	  "footer": {
+	    "height": 94,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "backgroundColor": "#00cc99"
+	  },
+	  "fixedItem": {
+	    "position": "fixed",
+	    "width": 78,
+	    "height": 78,
+	    "backgroundColor": "#00cc99",
+	    "right": 32,
+	    "bottom": 32,
+	    "borderRadius": 39,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "fixedText": {
+	    "fontSize": 36,
+	    "color": "#FFFFFF",
+	    "lineHeight": 36
+	  }
+	}
+
+/***/ },
+
+/***/ 465:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	exports.default = {
+	  data: function data() {
+	    var items = [{
+	      src: 'https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg',
+	      name: 'Thomas Carlyle',
+	      desc: 'Genius only means hard-working all one\'s life',
+	      behaviourName: 'Change count',
+	      behaviour: 'changeColumnCount'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
+	      desc: 'The man who has made up his mind to win will never say "impossible "',
+	      behaviourName: 'Change gap',
+	      behaviour: 'changeColumnGap'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1eNKuPFXXXXc_XpXXXXXXXXXX-370-370.jpg',
+	      desc: 'There is no such thing as a great talent without great will - power',
+	      behaviourName: 'Show scrollbar',
+	      behaviour: 'showScrollbar'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1DCh8PFXXXXX7aXXXXXXXXXXX-370-370.jpg',
+	      name: 'Addison',
+	      desc: 'Cease to struggle and you cease to live',
+	      behaviourName: 'Change width',
+	      behaviour: 'changeColumnWidth'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
+	      desc: 'A strong man will struggle with the storms of fate',
+	      behaviourName: 'Listen appear',
+	      behaviour: 'listenAppear'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
+	      name: 'Ruskin',
+	      desc: 'Living without an aim is like sailing without a compass',
+	      behaviourName: 'Set scrollable',
+	      behaviour: 'setScrollable'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'waterfall padding',
+	      behaviour: 'setPadding'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
+	      name: 'Balzac',
+	      desc: 'There is no such thing as a great talent without great will - power',
+	      behaviourName: 'listen scroll',
+	      behaviour: 'listenScroll'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'Remove cell',
+	      behaviour: 'removeCell'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'Move cell',
+	      behaviour: 'moveCell'
+	    }];
+
+	    var repeatItems = [];
+	    for (var i = 0; i < 3; i++) {
+	      repeatItems.push.apply(repeatItems, items);
+	    }
+
+	    return {
+	      padding: 0,
+	      refreshing: false,
+	      refreshText: '↓   pull to refresh...',
+	      columnCount: 2,
+	      columnGap: 12,
+	      columnWidth: 'auto',
+	      contentOffset: '0',
+	      showHeader: true,
+	      showScrollbar: false,
+	      scrollable: true,
+	      showStickyHeader: false,
+	      appearImage: null,
+	      disappearImage: null,
+	      stickyHeaderType: 'none',
+	      banner: {
+	        photos: [{ src: 'https://gw.alicdn.com/tps/TB1JyaCPFXXXXc9XXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1MwSFPFXXXXbdXXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1U8avPFXXXXaDXpXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB17Xh8PFXXXXbkaXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1cTmLPFXXXXXRXXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1oCefPFXXXXbVXVXXXXXXXXXX-140-140.jpg' }]
+	      },
+	      items: repeatItems
+	    };
+	  },
+
+	  methods: {
+	    recylerScroll: function recylerScroll(e) {
+	      this.contentOffset = e.contentOffset.y;
+	    },
+	    loadmore: function loadmore(e) {
+	      console.log('receive loadmore event');
+	      // this.$refs.waterfall.resetLoadmore()
+	    },
+	    showOrRemoveHeader: function showOrRemoveHeader() {
+	      this.showHeader = !this.showHeader;
+	    },
+	    onItemclick: function onItemclick(behaviour, index) {
+	      console.log('click...' + behaviour + ' at index ' + index);
+	      switch (behaviour) {
+	        case 'changeColumnCount':
+	          this.changeColumnCount();
+	          break;
+	        case 'changeColumnGap':
+	          this.changeColumnGap();
+	          break;
+	        case 'changeColumnWidth':
+	          this.changeColumnWidth();
+	          break;
+	        case 'showScrollbar':
+	          this.showOrHideScrollbar();
+	          break;
+	        case 'listenAppear':
+	          this.listenAppearAndDisappear();
+	          break;
+	        case 'setScrollable':
+	          this.setScrollable();
+	          break;
+	        case 'setPadding':
+	          this.setRecyclerPadding();
+	          break;
+	        case 'listenScroll':
+	          this.listenScrollEvent();
+	          break;
+	        case 'removeCell':
+	          this.removeCell(index);
+	          break;
+	        case 'moveCell':
+	          this.moveCell(index);
+	          break;
+	      }
+	    },
+
+	    itemAppear: function itemAppear(src) {
+	      this.appearImage = src;
+	    },
+
+	    itemDisappear: function itemDisappear(src) {
+	      this.disappearImage = src;
+	    },
+
+	    changeColumnCount: function changeColumnCount() {
+	      if (this.columnCount === 2) {
+	        this.columnCount = 3;
+	      } else {
+	        this.columnCount = 2;
+	      }
+	    },
+
+	    changeColumnGap: function changeColumnGap() {
+	      if (this.columnGap === 12) {
+	        this.columnGap = 'normal';
+	      } else {
+	        this.columnGap = 12;
+	      }
+	    },
+
+	    changeColumnWidth: function changeColumnWidth() {
+	      if (this.columnWidth === 'auto') {
+	        this.columnWidth = 600;
+	      } else {
+	        this.columnWidth = 'auto';
+	      }
+	    },
+
+	    showOrHideScrollbar: function showOrHideScrollbar() {
+	      this.showScrollbar = !this.showScrollbar;
+	    },
+
+	    setScrollable: function setScrollable() {
+	      this.scrollable = !this.scrollable;
+	    },
+
+	    listenAppearAndDisappear: function listenAppearAndDisappear() {
+	      this.stickyHeaderType = this.stickyHeaderType === 'appear' ? 'none' : 'appear';
+	    },
+
+	    listenScrollEvent: function listenScrollEvent() {
+	      this.stickyHeaderType = this.stickyHeaderType === 'scroll' ? 'none' : 'scroll';
+	    },
+
+	    scrollToTop: function scrollToTop() {
+	      weex.requireModule('dom').scrollToElement(this.$refs.header);
+	    },
+
+	    setRecyclerPadding: function setRecyclerPadding() {
+	      this.padding = this.padding == 0 ? 12 : 0;
+	    },
+
+	    removeCell: function removeCell(index) {
+	      this.items.splice(index, 1);
+	    },
+
+	    moveCell: function moveCell(index) {
+	      if (index == 0) {
+	        this.items.splice(this.items.length - 1, 0, this.items.splice(index, 1)[0]);
+	      } else {
+	        this.items.splice(0, 0, this.items.splice(index, 1)[0]);
+	      }
+	    },
+
+	    onrefresh: function onrefresh(event) {
+	      var _this = this;
+
+	      this.refreshing = true;
+	      this.refreshText = "loading...";
+	      setTimeout(function () {
+	        _this.refreshing = false;
+	        _this.refreshText = '↓   pull to refresh...';
+	      }, 2000);
+	    },
+	    onpullingdown: function onpullingdown(event) {
+	      // console.log(`${event.pullingDistance}`)
+	      if (event.pullingDistance < -64) {
+	        this.refreshText = '↑   release to refresh...';
+	      } else {
+	        this.refreshText = '↓   pull to refresh...';
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 466:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('waterfall', {
+	    ref: "waterfall",
+	    staticClass: ["page"],
+	    style: {
+	      padding: _vm.padding
+	    },
+	    attrs: {
+	      "columnWidth": _vm.columnWidth,
+	      "columnCount": _vm.columnCount,
+	      "columnGap": _vm.columnGap,
+	      "showScrollbar": _vm.showScrollbar,
+	      "scrollable": _vm.scrollable,
+	      "loadmoreoffset": "3000"
+	    },
+	    on: {
+	      "scroll": _vm.recylerScroll,
+	      "loadmore": _vm.loadmore
+	    }
+	  }, [_c('refresh', {
+	    staticClass: ["refresh"],
+	    attrs: {
+	      "display": _vm.refreshing ? 'show' : 'hide'
+	    },
+	    on: {
+	      "refresh": _vm.onrefresh,
+	      "pullingdown": _vm.onpullingdown
+	    }
+	  }, [_c('loading-indicator', {
+	    staticClass: ["indicator"]
+	  }), _c('text', {
+	    staticClass: ["refreshText"]
+	  }, [_vm._v(_vm._s(_vm.refreshText))])], 1), (_vm.showHeader) ? _c('header', {
+	    ref: "header",
+	    staticClass: ["header"]
+	  }, [_c('image', {
+	    staticClass: ["banner"],
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1ESN1PFXXXXX1apXXXXXXXXXX-1000-600.jpg",
+	      "resize": "cover"
+	    }
+	  }, [_c('div', {
+	    staticClass: ["bannerInfo"]
+	  }, [_c('image', {
+	    staticClass: ["avatar"],
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg",
+	      "resize": "cover"
+	    }
+	  }), _c('text', {
+	    staticClass: ["name"]
+	  }, [_vm._v("Adam Cat")]), _c('div', {
+	    staticClass: ["titleWrap"]
+	  }, [_c('text', {
+	    staticClass: ["title"]
+	  }, [_vm._v("Genius")])])]), _c('div', {
+	    staticClass: ["bannerPhotoWrap"]
+	  }, _vm._l((_vm.banner.photos), function(photo) {
+	    return _c('image', {
+	      staticClass: ["bannerPhoto"],
+	      attrs: {
+	        "src": photo.src
+	      }
+	    })
+	  }))])]) : _vm._e(), _c('header', {
+	    staticClass: ["stickyHeader"],
+	    on: {
+	      "click": _vm.showOrRemoveHeader
+	    }
+	  }, [(_vm.stickyHeaderType === 'none') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Sticky Header")])]) : _vm._e(), (_vm.stickyHeaderType === 'appear') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('div', {
+	    staticClass: ["stickyTextImageWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Last Appear:")]), _c('image', {
+	    staticClass: ["stickyImage"],
+	    attrs: {
+	      "src": _vm.appearImage
+	    }
+	  })]), _c('div', {
+	    staticClass: ["stickyTextImageWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Last Disappear:")]), _c('image', {
+	    staticClass: ["stickyImage"],
+	    attrs: {
+	      "src": _vm.disappearImage
+	    }
+	  })])]) : _vm._e(), (_vm.stickyHeaderType === 'scroll') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Content Offset:" + _vm._s(_vm.contentOffset))])]) : _vm._e()]), _vm._l((_vm.items), function(item, index) {
+	    return _c('cell', {
+	      key: item.src,
+	      staticClass: ["cell"],
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree"
+	      }
+	    }, [_c('div', {
+	      staticClass: ["item"],
+	      on: {
+	        "click": function($event) {
+	          _vm.onItemclick(item.behaviour, index)
+	        },
+	        "appear": function($event) {
+	          _vm.itemAppear(item.src)
+	        },
+	        "disappear": function($event) {
+	          _vm.itemDisappear(item.src)
+	        }
+	      }
+	    }, [(item.name) ? _c('text', {
+	      staticClass: ["itemName"]
+	    }, [_vm._v(_vm._s(item.name))]) : _vm._e(), _c('image', {
+	      staticClass: ["itemPhoto"],
+	      attrs: {
+	        "src": item.src
+	      }
+	    }), (item.desc) ? _c('text', {
+	      staticClass: ["itemDesc"]
+	    }, [_vm._v(_vm._s(item.desc))]) : _vm._e(), (item.behaviourName) ? _c('text', {
+	      staticClass: ["itemClickBehaviour"]
+	    }, [_vm._v(" " + _vm._s(item.behaviourName))]) : _vm._e()])])
+	  }), _c('header', {
+	    staticClass: ["footer"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Footer")])]), _c('div', {
+	    staticClass: ["fixedItem"],
+	    on: {
+	      "click": _vm.scrollToTop
+	    }
+	  }, [_c('text', {
+	    staticClass: ["fixedText"]
+	  }, [_vm._v("Top")])])], 2)
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/component/marquee-demo.js b/ios/playground/bundlejs/component/marquee-demo.js
index 0cde2dc..1998ed5 100644
--- a/ios/playground/bundlejs/component/marquee-demo.js
+++ b/ios/playground/bundlejs/component/marquee-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(106)
-	var __weex_script__ = __webpack_require__(107)
+	var __weex_template__ = __webpack_require__(111)
+	var __weex_script__ = __webpack_require__(112)
 
 	__weex_define__('@weex-component/eeaccd3d9c9113871c5ec6aa21c1c2cd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2044,7 +2044,12 @@
 /* 103 */,
 /* 104 */,
 /* 105 */,
-/* 106 */
+/* 106 */,
+/* 107 */,
+/* 108 */,
+/* 109 */,
+/* 110 */,
+/* 111 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2106,7 +2111,7 @@
 	}
 
 /***/ },
-/* 107 */
+/* 112 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/process-bar-demo.js b/ios/playground/bundlejs/component/process-bar-demo.js
index f0ece8f..5f63bc4 100644
--- a/ios/playground/bundlejs/component/process-bar-demo.js
+++ b/ios/playground/bundlejs/component/process-bar-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(145)
-	var __weex_style__ = __webpack_require__(146)
-	var __weex_script__ = __webpack_require__(147)
+	var __weex_template__ = __webpack_require__(150)
+	var __weex_style__ = __webpack_require__(151)
+	var __weex_script__ = __webpack_require__(152)
 
 	__weex_define__('@weex-component/0a82ae39306363e81eeac009d30abc0a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2086,7 +2086,12 @@
 /* 142 */,
 /* 143 */,
 /* 144 */,
-/* 145 */
+/* 145 */,
+/* 146 */,
+/* 147 */,
+/* 148 */,
+/* 149 */,
+/* 150 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2124,13 +2129,13 @@
 	}
 
 /***/ },
-/* 146 */
+/* 151 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 147 */
+/* 152 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/scroller-demo.js b/ios/playground/bundlejs/component/scroller-demo.js
index ec6656b..9709d4c 100644
--- a/ios/playground/bundlejs/component/scroller-demo.js
+++ b/ios/playground/bundlejs/component/scroller-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(148)
-	var __weex_style__ = __webpack_require__(149)
-	var __weex_script__ = __webpack_require__(150)
+	var __weex_template__ = __webpack_require__(153)
+	var __weex_style__ = __webpack_require__(154)
+	var __weex_script__ = __webpack_require__(155)
 
 	__weex_define__('@weex-component/3999ea06e04b487185c2565d7cda9180', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2041,8 +2041,22 @@
 /* 97 */,
 /* 98 */,
 /* 99 */,
-/* 100 */,
-/* 101 */,
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
 /* 102 */,
 /* 103 */,
 /* 104 */,
@@ -2089,72 +2103,84 @@
 /* 145 */,
 /* 146 */,
 /* 147 */,
-/* 148 */
+/* 148 */,
+/* 149 */,
+/* 150 */,
+/* 151 */,
+/* 152 */,
+/* 153 */
 /***/ function(module, exports) {
 
 	module.exports = {
-	  "type": "scroller",
-	  "classList": [
-	    "list"
-	  ],
-	  "attr": {
-	    "append=\"tree\"": ""
-	  },
+	  "type": "div",
 	  "children": [
 	    {
-	      "type": "refresh",
-	      "classList": [
-	        "refresh-view"
-	      ],
-	      "attr": {
-	        "display": function () {return this.refresh_display}
-	      },
-	      "events": {
-	        "refresh": "onrefresh"
+	      "type": "div",
+	      "style": {
+	        "height": 20,
+	        "width": 750,
+	        "borderColor": "#000000",
+	        "borderWidth": 2,
+	        "justifyContent": "center"
 	      },
 	      "children": [
 	        {
-	          "type": "loading-indicator",
-	          "classList": [
-	            "indicator"
-	          ]
-	        },
-	        {
-	          "type": "text",
-	          "classList": [
-	            "refresh-arrow"
-	          ],
+	          "type": "div",
 	          "style": {
-	            "textAlign": "center",
-	            "color": "rgb(238,162,54)"
-	          },
-	          "shown": function () {return (this.refresh_display==='hide')},
-	          "attr": {
-	            "value": "Pull To Refresh"
+	            "height": 14,
+	            "width": function () {return this.progress_width},
+	            "marginLeft": function () {return this.progress},
+	            "backgroundColor": "#808080"
 	          }
 	        }
 	      ]
 	    },
 	    {
-	      "type": "div",
-	      "classList": [
-	        "section"
-	      ],
-	      "repeat": function () {return this.sections},
+	      "type": "text",
+	      "style": {
+	        "width": 750
+	      },
+	      "attr": {
+	        "value": function () {return this.event}
+	      }
+	    },
+	    {
+	      "type": "scroller",
+	      "id": "scroller",
+	      "events": {
+	        "scroll": "onScroll"
+	      },
 	      "children": [
 	        {
-	          "type": "div",
+	          "type": "refresh",
 	          "classList": [
-	            "header"
+	            "refresh-view"
 	          ],
+	          "attr": {
+	            "display": function () {return this.refresh_display}
+	          },
+	          "events": {
+	            "refresh": "onrefresh"
+	          },
 	          "children": [
 	            {
+	              "type": "loading-indicator",
+	              "classList": [
+	                "indicator"
+	              ]
+	            },
+	            {
 	              "type": "text",
 	              "classList": [
-	                "header-title"
+	                "refresh-arrow"
 	              ],
+	              "style": {
+	                "textAlign": "center",
+	                "color": "rgb(238,162,54)"
+	              },
+	              "shown": function () {return (this.refresh_display==='hide')},
 	              "attr": {
-	                "value": function () {return this.title}
+	                "value": "Pull To Refresh"
 	              }
 	            }
 	          ]
@@ -2162,39 +2188,65 @@
 	        {
 	          "type": "div",
 	          "classList": [
-	            "item"
+	            "section"
 	          ],
-	          "repeat": function () {return this.items},
+	          "repeat": function () {return this.sections},
 	          "children": [
 	            {
-	              "type": "text",
+	              "type": "div",
 	              "classList": [
-	                "item-title"
+	                "header"
 	              ],
-	              "attr": {
-	                "value": function () {return 'row ' + (this.id)}
-	              }
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "header-title"
+	                  ],
+	                  "attr": {
+	                    "value": function () {return this.title}
+	                  }
+	                }
+	              ]
+	            },
+	            {
+	              "type": "div",
+	              "classList": [
+	                "item"
+	              ],
+	              "repeat": function () {return this.items},
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "item-title"
+	                  ],
+	                  "attr": {
+	                    "value": function () {return 'row ' + (this.id)}
+	                  }
+	                }
+	              ]
 	            }
 	          ]
-	        }
-	      ]
-	    },
-	    {
-	      "type": "loading",
-	      "classList": [
-	        "loading-view"
-	      ],
-	      "attr": {
-	        "display": function () {return this.loading_display}
-	      },
-	      "events": {
-	        "loading": "onloading"
-	      },
-	      "children": [
+	        },
 	        {
-	          "type": "loading-indicator",
+	          "type": "loading",
 	          "classList": [
-	            "indicator"
+	            "loading-view"
+	          ],
+	          "attr": {
+	            "display": function () {return this.loading_display}
+	          },
+	          "events": {
+	            "loading": "onloading"
+	          },
+	          "children": [
+	            {
+	              "type": "loading-indicator",
+	              "classList": [
+	                "indicator"
+	              ]
+	            }
 	          ]
 	        }
 	      ]
@@ -2203,7 +2255,7 @@
 	}
 
 /***/ },
-/* 149 */
+/* 154 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2254,12 +2306,19 @@
 	}
 
 /***/ },
-/* 150 */
+/* 155 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
+	var _stringify = __webpack_require__(100);
+
+	var _stringify2 = _interopRequireDefault(_stringify);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
 	__webpack_require__(4);
+	var dom = weex.requireModule('dom');
 	module.exports = {
 	  methods: {
 	    onrefresh: function onrefresh(e) {
@@ -2284,9 +2343,23 @@
 	        }
 	        self.loading_display = 'hide';
 	      }, 3000);
+	    },
+	    onScroll: function onScroll(e) {
+	      var self = this;
+	      this.event = 'contentOffset: ' + (0, _stringify2.default)(e.contentOffset) + '\ncontentSize: ' + (0, _stringify2.default)(e.contentSize);
+	      dom.getComponentRect(this.$el('scroller'), function (ret) {
+	        console.log(ret.size.height);
+	        var listHeight = ret.size.height;
+	        self.progress_width = listHeight / e.contentSize.height * 750;
+	        var offsetY = e.contentOffset.y > 0 ? 0 : Math.abs(e.contentOffset.y);
+	        self.progress = offsetY / (e.contentSize.height - listHeight) * (750 - self.progress_width);
+	      });
 	    }
 	  },
 	  data: function () {return {
+	    event: '-',
+	    progress_width: 0,
+	    progress: 0,
 	    refresh_display: 'hide',
 	    loading_display: 'hide',
 	    sections: [{
diff --git a/ios/playground/bundlejs/component/slider-neighbor/index.js b/ios/playground/bundlejs/component/slider-neighbor/index.js
index a6ce716..443677a 100644
--- a/ios/playground/bundlejs/component/slider-neighbor/index.js
+++ b/ios/playground/bundlejs/component/slider-neighbor/index.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(151)
-	var __weex_script__ = __webpack_require__(152)
+	var __weex_template__ = __webpack_require__(156)
+	var __weex_script__ = __webpack_require__(157)
 
 	__weex_define__('@weex-component/3157b803090c07c091af8fa3147f3d5c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 151:
+/***/ 156:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -215,7 +215,7 @@
 
 /***/ },
 
-/***/ 152:
+/***/ 157:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-item.js b/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-item.js
index 79eed2a..057e60f 100644
--- a/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-item.js
+++ b/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-item.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(153)
-	var __weex_style__ = __webpack_require__(154)
-	var __weex_script__ = __webpack_require__(155)
+	var __weex_template__ = __webpack_require__(158)
+	var __weex_style__ = __webpack_require__(159)
+	var __weex_script__ = __webpack_require__(160)
 
 	__weex_define__('@weex-component/d723bedd436352d63e4fa599317a8037', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 153:
+/***/ 158:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -89,7 +89,7 @@
 
 /***/ },
 
-/***/ 154:
+/***/ 159:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -108,7 +108,7 @@
 
 /***/ },
 
-/***/ 155:
+/***/ 160:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-page.js b/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-page.js
index 335e7e6..c440f76 100644
--- a/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-page.js
+++ b/ios/playground/bundlejs/component/slider-neighbor/slider-neighbor-page.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(156)
-	var __weex_template__ = __webpack_require__(157)
-	var __weex_style__ = __webpack_require__(158)
-	var __weex_script__ = __webpack_require__(159)
+	__webpack_require__(161)
+	var __weex_template__ = __webpack_require__(162)
+	var __weex_style__ = __webpack_require__(163)
+	var __weex_script__ = __webpack_require__(164)
 
 	__weex_define__('@weex-component/01b832918f8c3165cebb597eb613f790', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,7 +67,7 @@
 
 /***/ },
 
-/***/ 153:
+/***/ 158:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 154:
+/***/ 159:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +109,7 @@
 
 /***/ },
 
-/***/ 155:
+/***/ 160:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -131,12 +131,12 @@
 
 /***/ },
 
-/***/ 156:
+/***/ 161:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(153)
-	var __weex_style__ = __webpack_require__(154)
-	var __weex_script__ = __webpack_require__(155)
+	var __weex_template__ = __webpack_require__(158)
+	var __weex_style__ = __webpack_require__(159)
+	var __weex_script__ = __webpack_require__(160)
 
 	__weex_define__('@weex-component/slider-neighbor-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -154,7 +154,7 @@
 
 /***/ },
 
-/***/ 157:
+/***/ 162:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -172,7 +172,7 @@
 
 /***/ },
 
-/***/ 158:
+/***/ 163:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -184,7 +184,7 @@
 
 /***/ },
 
-/***/ 159:
+/***/ 164:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/component/slider-tab.js b/ios/playground/bundlejs/component/slider-tab.js
new file mode 100644
index 0000000..c1816d3
--- /dev/null
+++ b/ios/playground/bundlejs/component/slider-tab.js
@@ -0,0 +1,633 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(165)
+	var __weex_style__ = __webpack_require__(166)
+	var __weex_script__ = __webpack_require__(167)
+
+	__weex_define__('@weex-component/80b287cd7ee83071ff869144c4552259', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/80b287cd7ee83071ff869144c4552259',undefined,undefined)
+
+/***/ },
+
+/***/ 32:
+/***/ function(module, exports, __webpack_require__) {
+
+	var global    = __webpack_require__(33)
+	  , core      = __webpack_require__(34)
+	  , ctx       = __webpack_require__(35)
+	  , hide      = __webpack_require__(37)
+	  , PROTOTYPE = 'prototype';
+
+	var $export = function(type, name, source){
+	  var IS_FORCED = type & $export.F
+	    , IS_GLOBAL = type & $export.G
+	    , IS_STATIC = type & $export.S
+	    , IS_PROTO  = type & $export.P
+	    , IS_BIND   = type & $export.B
+	    , IS_WRAP   = type & $export.W
+	    , exports   = IS_GLOBAL ? core : core[name] || (core[name] = {})
+	    , expProto  = exports[PROTOTYPE]
+	    , target    = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE]
+	    , key, own, out;
+	  if(IS_GLOBAL)source = name;
+	  for(key in source){
+	    // contains in native
+	    own = !IS_FORCED && target && target[key] !== undefined;
+	    if(own && key in exports)continue;
+	    // export native or passed
+	    out = own ? target[key] : source[key];
+	    // prevent global pollution for namespaces
+	    exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]
+	    // bind timers to global for call from export context
+	    : IS_BIND && own ? ctx(out, global)
+	    // wrap global constructors for prevent change them in library
+	    : IS_WRAP && target[key] == out ? (function(C){
+	      var F = function(a, b, c){
+	        if(this instanceof C){
+	          switch(arguments.length){
+	            case 0: return new C;
+	            case 1: return new C(a);
+	            case 2: return new C(a, b);
+	          } return new C(a, b, c);
+	        } return C.apply(this, arguments);
+	      };
+	      F[PROTOTYPE] = C[PROTOTYPE];
+	      return F;
+	    // make static versions for prototype methods
+	    })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;
+	    // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%
+	    if(IS_PROTO){
+	      (exports.virtual || (exports.virtual = {}))[key] = out;
+	      // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%
+	      if(type & $export.R && expProto && !expProto[key])hide(expProto, key, out);
+	    }
+	  }
+	};
+	// type bitmap
+	$export.F = 1;   // forced
+	$export.G = 2;   // global
+	$export.S = 4;   // static
+	$export.P = 8;   // proto
+	$export.B = 16;  // bind
+	$export.W = 32;  // wrap
+	$export.U = 64;  // safe
+	$export.R = 128; // real proto method for `library` 
+	module.exports = $export;
+
+/***/ },
+
+/***/ 33:
+/***/ function(module, exports) {
+
+	// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
+	var global = module.exports = typeof window != 'undefined' && window.Math == Math
+	  ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')();
+	if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 34:
+/***/ function(module, exports) {
+
+	var core = module.exports = {version: '2.4.0'};
+	if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
+
+/***/ },
+
+/***/ 35:
+/***/ function(module, exports, __webpack_require__) {
+
+	// optional / simple context binding
+	var aFunction = __webpack_require__(36);
+	module.exports = function(fn, that, length){
+	  aFunction(fn);
+	  if(that === undefined)return fn;
+	  switch(length){
+	    case 1: return function(a){
+	      return fn.call(that, a);
+	    };
+	    case 2: return function(a, b){
+	      return fn.call(that, a, b);
+	    };
+	    case 3: return function(a, b, c){
+	      return fn.call(that, a, b, c);
+	    };
+	  }
+	  return function(/* ...args */){
+	    return fn.apply(that, arguments);
+	  };
+	};
+
+/***/ },
+
+/***/ 36:
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  if(typeof it != 'function')throw TypeError(it + ' is not a function!');
+	  return it;
+	};
+
+/***/ },
+
+/***/ 37:
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP         = __webpack_require__(38)
+	  , createDesc = __webpack_require__(46);
+	module.exports = __webpack_require__(42) ? function(object, key, value){
+	  return dP.f(object, key, createDesc(1, value));
+	} : function(object, key, value){
+	  object[key] = value;
+	  return object;
+	};
+
+/***/ },
+
+/***/ 38:
+/***/ function(module, exports, __webpack_require__) {
+
+	var anObject       = __webpack_require__(39)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , toPrimitive    = __webpack_require__(45)
+	  , dP             = Object.defineProperty;
+
+	exports.f = __webpack_require__(42) ? Object.defineProperty : function defineProperty(O, P, Attributes){
+	  anObject(O);
+	  P = toPrimitive(P, true);
+	  anObject(Attributes);
+	  if(IE8_DOM_DEFINE)try {
+	    return dP(O, P, Attributes);
+	  } catch(e){ /* empty */ }
+	  if('get' in Attributes || 'set' in Attributes)throw TypeError('Accessors not supported!');
+	  if('value' in Attributes)O[P] = Attributes.value;
+	  return O;
+	};
+
+/***/ },
+
+/***/ 39:
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40);
+	module.exports = function(it){
+	  if(!isObject(it))throw TypeError(it + ' is not an object!');
+	  return it;
+	};
+
+/***/ },
+
+/***/ 40:
+/***/ function(module, exports) {
+
+	module.exports = function(it){
+	  return typeof it === 'object' ? it !== null : typeof it === 'function';
+	};
+
+/***/ },
+
+/***/ 41:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = !__webpack_require__(42) && !__webpack_require__(43)(function(){
+	  return Object.defineProperty(__webpack_require__(44)('div'), 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+
+/***/ 42:
+/***/ function(module, exports, __webpack_require__) {
+
+	// Thank's IE8 for his funny defineProperty
+	module.exports = !__webpack_require__(43)(function(){
+	  return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7;
+	});
+
+/***/ },
+
+/***/ 43:
+/***/ function(module, exports) {
+
+	module.exports = function(exec){
+	  try {
+	    return !!exec();
+	  } catch(e){
+	    return true;
+	  }
+	};
+
+/***/ },
+
+/***/ 44:
+/***/ function(module, exports, __webpack_require__) {
+
+	var isObject = __webpack_require__(40)
+	  , document = __webpack_require__(33).document
+	  // in old IE typeof document.createElement is 'object'
+	  , is = isObject(document) && isObject(document.createElement);
+	module.exports = function(it){
+	  return is ? document.createElement(it) : {};
+	};
+
+/***/ },
+
+/***/ 45:
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.1.1 ToPrimitive(input [, PreferredType])
+	var isObject = __webpack_require__(40);
+	// instead of the ES6 spec version, we didn't implement @@toPrimitive case
+	// and the second argument - flag - preferred type is a string
+	module.exports = function(it, S){
+	  if(!isObject(it))return it;
+	  var fn, val;
+	  if(S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it)))return val;
+	  if(!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it)))return val;
+	  throw TypeError("Can't convert object to primitive value");
+	};
+
+/***/ },
+
+/***/ 46:
+/***/ function(module, exports) {
+
+	module.exports = function(bitmap, value){
+	  return {
+	    enumerable  : !(bitmap & 1),
+	    configurable: !(bitmap & 2),
+	    writable    : !(bitmap & 4),
+	    value       : value
+	  };
+	};
+
+/***/ },
+
+/***/ 165:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "style": {
+	    "padding": 25
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "height": 80,
+	        "flexDirection": "row"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "style": {
+	            "flex": 1,
+	            "backgroundColor": "#008B8B",
+	            "justifyContent": "center",
+	            "alignItems": "center"
+	          },
+	          "events": {
+	            "click": function ($event) {this.goto(0,$event)}
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "page-title"
+	              ],
+	              "attr": {
+	                "value": "Page 1"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "flex": 1,
+	            "backgroundColor": "#7FFFD4",
+	            "justifyContent": "center",
+	            "alignItems": "center"
+	          },
+	          "events": {
+	            "click": function ($event) {this.goto(1,$event)}
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "page-title"
+	              ],
+	              "attr": {
+	                "value": "Page 2"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "flex": 1,
+	            "backgroundColor": "#008B8B",
+	            "justifyContent": "center",
+	            "alignItems": "center"
+	          },
+	          "events": {
+	            "click": function ($event) {this.goto(2,$event)}
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "page-title"
+	              ],
+	              "attr": {
+	                "value": "Page 3"
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "height": 10,
+	        "backgroundColor": "#87CEEB"
+	      },
+	      "children": [
+	        {
+	          "type": "div",
+	          "style": {
+	            "width": 233,
+	            "height": 10,
+	            "marginLeft": function () {return this.progress},
+	            "backgroundColor": "#00008B"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "slider",
+	      "classList": [
+	        "slider"
+	      ],
+	      "attr": {
+	        "interval": "4500",
+	        "index": function () {return this.index},
+	        "offsetXAccuracy": "0.01"
+	      },
+	      "events": {
+	        "change": "onchange",
+	        "scroll": "onscroll"
+	      },
+	      "append": "tree",
+	      "children": [
+	        {
+	          "type": "div",
+	          "classList": [
+	            "frame"
+	          ],
+	          "repeat": {
+	            "expression": function () {return this.imageList},
+	            "value": "img"
+	          },
+	          "children": [
+	            {
+	              "type": "image",
+	              "classList": [
+	                "image"
+	              ],
+	              "attr": {
+	                "resize": "cover",
+	                "src": function () {return this.img.src}
+	              }
+	            },
+	            {
+	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "attr": {
+	                "value": function () {return this.img.title}
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "indicator",
+	          "style": {
+	            "height": 20
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 166:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "page-title": {
+	    "color": "#000000",
+	    "fontSize": 40,
+	    "fontWeight": "bold"
+	  },
+	  "image": {
+	    "width": 700,
+	    "height": 700
+	  },
+	  "slider": {
+	    "width": 700,
+	    "height": 700,
+	    "position": "absolute",
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "borderColor": "#41B883"
+	  },
+	  "title": {
+	    "position": "absolute",
+	    "top": 20,
+	    "left": 20,
+	    "paddingLeft": 20,
+	    "width": 200,
+	    "color": "#FFFFFF",
+	    "fontSize": 36,
+	    "lineHeight": 60,
+	    "backgroundColor": "rgba(0,0,0,0.3)"
+	  },
+	  "frame": {
+	    "width": 700,
+	    "height": 700
+	  }
+	}
+
+/***/ },
+
+/***/ 167:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+
+	var _defineProperty2 = __webpack_require__(168);
+
+	var _defineProperty3 = _interopRequireDefault(_defineProperty2);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	exports.default = {
+	  data: {
+	    imageList: [{ title: 'Page 1', src: 'https://gd2.alicdn.com/bao/uploaded/i2/T14H1LFwBcXXXXXXXX_!!0-item_pic.jpg' }, {
+	      title: 'Page 2',
+	      src: 'https://gd1.alicdn.com/bao/uploaded/i1/TB1PXJCJFXXXXciXFXXXXXXXXXX_!!0-item_pic.jpg'
+	    }, {
+	      title: 'Page 3',
+	      src: 'https://gd3.alicdn.com/bao/uploaded/i3/TB1x6hYLXXXXXazXVXXXXXXXXXX_!!0-item_pic.jpg'
+	    }],
+	    index: 0,
+	    progress: 0
+	  },
+	  methods: (0, _defineProperty3.default)({
+	    onchange: function onchange(event) {
+	      console.log('changed:', event.index);
+	    },
+	    goto: function goto(i) {
+	      this.index = i;
+	      this.progress = i * 233;
+	    },
+	    onscroll: function onscroll(e) {
+	      var ratio = parseFloat(e.offsetXRatio);
+	      this.progress = 233 * this.index + 233 * -ratio;
+	    }
+	  }, 'onchange', function onchange(e) {
+	    this.goto(parseInt(e.index));
+	  })
+	};}
+	/* generated by weex-loader */
+
+
+/***/ },
+
+/***/ 168:
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	exports.__esModule = true;
+
+	var _defineProperty = __webpack_require__(169);
+
+	var _defineProperty2 = _interopRequireDefault(_defineProperty);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	exports.default = function (obj, key, value) {
+	  if (key in obj) {
+	    (0, _defineProperty2.default)(obj, key, {
+	      value: value,
+	      enumerable: true,
+	      configurable: true,
+	      writable: true
+	    });
+	  } else {
+	    obj[key] = value;
+	  }
+
+	  return obj;
+	};
+
+/***/ },
+
+/***/ 169:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(170), __esModule: true };
+
+/***/ },
+
+/***/ 170:
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(171);
+	var $Object = __webpack_require__(34).Object;
+	module.exports = function defineProperty(it, key, desc){
+	  return $Object.defineProperty(it, key, desc);
+	};
+
+/***/ },
+
+/***/ 171:
+/***/ function(module, exports, __webpack_require__) {
+
+	var $export = __webpack_require__(32);
+	// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)
+	$export($export.S + $export.F * !__webpack_require__(42), 'Object', {defineProperty: __webpack_require__(38).f});
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/component/slider/index.js b/ios/playground/bundlejs/component/slider/index.js
index 942e7b5..d1bfe1f 100644
--- a/ios/playground/bundlejs/component/slider/index.js
+++ b/ios/playground/bundlejs/component/slider/index.js
@@ -44,10 +44,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(160)
-	var __weex_template__ = __webpack_require__(168)
-	var __weex_style__ = __webpack_require__(169)
-	var __weex_script__ = __webpack_require__(170)
+	__webpack_require__(172)
+	var __weex_template__ = __webpack_require__(180)
+	var __weex_style__ = __webpack_require__(181)
+	var __weex_script__ = __webpack_require__(182)
 
 	__weex_define__('@weex-component/0f29733e34d42a0cdfe7b98eb53bff4c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2102,13 +2102,25 @@
 /* 157 */,
 /* 158 */,
 /* 159 */,
-/* 160 */
+/* 160 */,
+/* 161 */,
+/* 162 */,
+/* 163 */,
+/* 164 */,
+/* 165 */,
+/* 166 */,
+/* 167 */,
+/* 168 */,
+/* 169 */,
+/* 170 */,
+/* 171 */,
+/* 172 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(161)
-	var __weex_template__ = __webpack_require__(165)
-	var __weex_style__ = __webpack_require__(166)
-	var __weex_script__ = __webpack_require__(167)
+	__webpack_require__(173)
+	var __weex_template__ = __webpack_require__(177)
+	var __weex_style__ = __webpack_require__(178)
+	var __weex_script__ = __webpack_require__(179)
 
 	__weex_define__('@weex-component/slider-page', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2125,12 +2137,12 @@
 
 
 /***/ },
-/* 161 */
+/* 173 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(162)
-	var __weex_style__ = __webpack_require__(163)
-	var __weex_script__ = __webpack_require__(164)
+	var __weex_template__ = __webpack_require__(174)
+	var __weex_style__ = __webpack_require__(175)
+	var __weex_script__ = __webpack_require__(176)
 
 	__weex_define__('@weex-component/slider-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2147,7 +2159,7 @@
 
 
 /***/ },
-/* 162 */
+/* 174 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2161,7 +2173,7 @@
 	}
 
 /***/ },
-/* 163 */
+/* 175 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2172,7 +2184,7 @@
 	}
 
 /***/ },
-/* 164 */
+/* 176 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2193,7 +2205,7 @@
 
 
 /***/ },
-/* 165 */
+/* 177 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2210,7 +2222,7 @@
 	}
 
 /***/ },
-/* 166 */
+/* 178 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2223,7 +2235,7 @@
 	}
 
 /***/ },
-/* 167 */
+/* 179 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
@@ -2248,7 +2260,7 @@
 
 
 /***/ },
-/* 168 */
+/* 180 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2588,7 +2600,7 @@
 	}
 
 /***/ },
-/* 169 */
+/* 181 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2612,7 +2624,7 @@
 	}
 
 /***/ },
-/* 170 */
+/* 182 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/slider/slider-item.js b/ios/playground/bundlejs/component/slider/slider-item.js
index 2465a57..9111e0d 100644
--- a/ios/playground/bundlejs/component/slider/slider-item.js
+++ b/ios/playground/bundlejs/component/slider/slider-item.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(162)
-	var __weex_style__ = __webpack_require__(163)
-	var __weex_script__ = __webpack_require__(164)
+	var __weex_template__ = __webpack_require__(174)
+	var __weex_style__ = __webpack_require__(175)
+	var __weex_script__ = __webpack_require__(176)
 
 	__weex_define__('@weex-component/acad2f79d78cffd36dfaedd0c65d980d', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 162:
+/***/ 174:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -81,7 +81,7 @@
 
 /***/ },
 
-/***/ 163:
+/***/ 175:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -93,7 +93,7 @@
 
 /***/ },
 
-/***/ 164:
+/***/ 176:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/slider/slider-page.js b/ios/playground/bundlejs/component/slider/slider-page.js
index 908b680..5b89589 100644
--- a/ios/playground/bundlejs/component/slider/slider-page.js
+++ b/ios/playground/bundlejs/component/slider/slider-page.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(161)
-	var __weex_template__ = __webpack_require__(165)
-	var __weex_style__ = __webpack_require__(166)
-	var __weex_script__ = __webpack_require__(167)
+	__webpack_require__(173)
+	var __weex_template__ = __webpack_require__(177)
+	var __weex_style__ = __webpack_require__(178)
+	var __weex_script__ = __webpack_require__(179)
 
 	__weex_define__('@weex-component/ea51bd2d36d6d5354af97da097043629', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,12 +67,12 @@
 
 /***/ },
 
-/***/ 161:
+/***/ 173:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(162)
-	var __weex_style__ = __webpack_require__(163)
-	var __weex_script__ = __webpack_require__(164)
+	var __weex_template__ = __webpack_require__(174)
+	var __weex_style__ = __webpack_require__(175)
+	var __weex_script__ = __webpack_require__(176)
 
 	__weex_define__('@weex-component/slider-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 162:
+/***/ 174:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 163:
+/***/ 175:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -117,7 +117,7 @@
 
 /***/ },
 
-/***/ 164:
+/***/ 176:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -139,7 +139,7 @@
 
 /***/ },
 
-/***/ 165:
+/***/ 177:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -157,7 +157,7 @@
 
 /***/ },
 
-/***/ 166:
+/***/ 178:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -171,7 +171,7 @@
 
 /***/ },
 
-/***/ 167:
+/***/ 179:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/component/text-demo.js b/ios/playground/bundlejs/component/text-demo.js
index 44bf5b6..8f530d0 100644
--- a/ios/playground/bundlejs/component/text-demo.js
+++ b/ios/playground/bundlejs/component/text-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(176)
-	var __weex_style__ = __webpack_require__(177)
-	var __weex_script__ = __webpack_require__(178)
+	var __weex_template__ = __webpack_require__(188)
+	var __weex_style__ = __webpack_require__(189)
+	var __weex_script__ = __webpack_require__(190)
 
 	__weex_define__('@weex-component/c0ea4ed580d5c38f82bd25b5602f26fe', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2117,7 +2117,19 @@
 /* 173 */,
 /* 174 */,
 /* 175 */,
-/* 176 */
+/* 176 */,
+/* 177 */,
+/* 178 */,
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2605,7 +2617,7 @@
 	}
 
 /***/ },
-/* 177 */
+/* 189 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2616,7 +2628,7 @@
 	}
 
 /***/ },
-/* 178 */
+/* 190 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/video-demo.js b/ios/playground/bundlejs/component/video-demo.js
index f2ada38..018e830 100644
--- a/ios/playground/bundlejs/component/video-demo.js
+++ b/ios/playground/bundlejs/component/video-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(179)
-	var __weex_style__ = __webpack_require__(180)
-	var __weex_script__ = __webpack_require__(181)
+	var __weex_template__ = __webpack_require__(191)
+	var __weex_style__ = __webpack_require__(192)
+	var __weex_script__ = __webpack_require__(193)
 
 	__weex_define__('@weex-component/a6ac855fc70c0bffbf2b317f9487878f', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2120,7 +2120,19 @@
 /* 176 */,
 /* 177 */,
 /* 178 */,
-/* 179 */
+/* 179 */,
+/* 180 */,
+/* 181 */,
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2178,7 +2190,7 @@
 	}
 
 /***/ },
-/* 180 */
+/* 192 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2190,7 +2202,7 @@
 	}
 
 /***/ },
-/* 181 */
+/* 193 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/component/web-demo.js b/ios/playground/bundlejs/component/web-demo.js
index 2ae03fe..705f1be 100644
--- a/ios/playground/bundlejs/component/web-demo.js
+++ b/ios/playground/bundlejs/component/web-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(182)
-	var __weex_style__ = __webpack_require__(183)
-	var __weex_script__ = __webpack_require__(184)
+	var __weex_template__ = __webpack_require__(194)
+	var __weex_style__ = __webpack_require__(195)
+	var __weex_script__ = __webpack_require__(196)
 
 	__weex_define__('@weex-component/1a81fb780319a63605d941949f4ff5d7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2123,7 +2123,19 @@
 /* 179 */,
 /* 180 */,
 /* 181 */,
-/* 182 */
+/* 182 */,
+/* 183 */,
+/* 184 */,
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2211,7 +2223,7 @@
 	}
 
 /***/ },
-/* 183 */
+/* 195 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2243,7 +2255,7 @@
 	}
 
 /***/ },
-/* 184 */
+/* 196 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2253,6 +2265,7 @@
 	module.exports = {
 	    methods: {
 	        goback: function goback() {
+	            var $webview = __weex_require__('@weex-module/webview');
 	            var webElement = this.$el('webview');
 	            $webview.goBack(webElement.ref);
 	        },
diff --git a/ios/playground/bundlejs/error.js b/ios/playground/bundlejs/error.js
index 556750f..437063d 100644
--- a/ios/playground/bundlejs/error.js
+++ b/ios/playground/bundlejs/error.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(185)
-	var __weex_script__ = __webpack_require__(186)
+	var __weex_template__ = __webpack_require__(197)
+	var __weex_script__ = __webpack_require__(198)
 
 	__weex_define__('@weex-component/a62071d3ca8239528c69d72539119e08', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2123,7 +2123,19 @@
 /* 182 */,
 /* 183 */,
 /* 184 */,
-/* 185 */
+/* 185 */,
+/* 186 */,
+/* 187 */,
+/* 188 */,
+/* 189 */,
+/* 190 */,
+/* 191 */,
+/* 192 */,
+/* 193 */,
+/* 194 */,
+/* 195 */,
+/* 196 */,
+/* 197 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2195,7 +2207,7 @@
 	}
 
 /***/ },
-/* 186 */
+/* 198 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/geolocation.js b/ios/playground/bundlejs/geolocation.js
index 09b72b4..1eb2a74 100644
--- a/ios/playground/bundlejs/geolocation.js
+++ b/ios/playground/bundlejs/geolocation.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(187)
-	var __weex_script__ = __webpack_require__(188)
+	var __weex_template__ = __webpack_require__(199)
+	var __weex_script__ = __webpack_require__(200)
 
 	__weex_define__('@weex-component/c1022e7ee9ce09ed1eadcf7bffe1b341', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -71,7 +71,25 @@
 
 /***/ },
 
-/***/ 187:
+/***/ 100:
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+
+/***/ 101:
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
+
+/***/ 199:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -110,12 +128,12 @@
 
 /***/ },
 
-/***/ 188:
+/***/ 200:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
@@ -160,24 +178,6 @@
 	/* generated by weex-loader */
 
 
-/***/ },
-
-/***/ 189:
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
-
-/***/ },
-
-/***/ 190:
-/***/ function(module, exports, __webpack_require__) {
-
-	var core  = __webpack_require__(34)
-	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
-	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
-	  return $JSON.stringify.apply($JSON, arguments);
-	};
-
 /***/ }
 
 /******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/hello.js b/ios/playground/bundlejs/hello.js
index f445dee..9ea5b4d 100644
--- a/ios/playground/bundlejs/hello.js
+++ b/ios/playground/bundlejs/hello.js
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(191)
+	var __weex_template__ = __webpack_require__(201)
 
 	__weex_define__('@weex-component/3bfdbb5ef29172e6db527e1bc85ec8fd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 191:
+/***/ 201:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/iconfont.js b/ios/playground/bundlejs/iconfont.js
index 06176a5..445907f 100644
--- a/ios/playground/bundlejs/iconfont.js
+++ b/ios/playground/bundlejs/iconfont.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(192)
-	var __weex_style__ = __webpack_require__(193)
-	var __weex_script__ = __webpack_require__(194)
+	var __weex_template__ = __webpack_require__(202)
+	var __weex_style__ = __webpack_require__(203)
+	var __weex_script__ = __webpack_require__(204)
 
 	__weex_define__('@weex-component/c90fb40e28668dc487c3cb9e5dc4fabd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 192:
+/***/ 202:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -113,7 +113,7 @@
 
 /***/ },
 
-/***/ 193:
+/***/ 203:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -141,7 +141,7 @@
 
 /***/ },
 
-/***/ 194:
+/***/ 204:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/index.js b/ios/playground/bundlejs/index.js
index bae4a96..b4cf207 100644
--- a/ios/playground/bundlejs/index.js
+++ b/ios/playground/bundlejs/index.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(195)
-	var __weex_script__ = __webpack_require__(196)
+	var __weex_template__ = __webpack_require__(205)
+	var __weex_script__ = __webpack_require__(206)
 
 	__weex_define__('@weex-component/677c57764d82d558f236d5241843a2a2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2048,18 +2048,23 @@
 /* 107 */,
 /* 108 */,
 /* 109 */,
-/* 110 */
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */
 /***/ function(module, exports, __webpack_require__) {
 
 	"use strict";
 
 	exports.__esModule = true;
 
-	var _iterator = __webpack_require__(111);
+	var _iterator = __webpack_require__(116);
 
 	var _iterator2 = _interopRequireDefault(_iterator);
 
-	var _symbol = __webpack_require__(131);
+	var _symbol = __webpack_require__(136);
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
@@ -2074,28 +2079,28 @@
 	};
 
 /***/ },
-/* 111 */
+/* 116 */
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(112), __esModule: true };
+	module.exports = { "default": __webpack_require__(117), __esModule: true };
 
 /***/ },
-/* 112 */
+/* 117 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(113);
-	__webpack_require__(126);
-	module.exports = __webpack_require__(130).f('iterator');
+	__webpack_require__(118);
+	__webpack_require__(131);
+	module.exports = __webpack_require__(135).f('iterator');
 
 /***/ },
-/* 113 */
+/* 118 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var $at  = __webpack_require__(114)(true);
+	var $at  = __webpack_require__(119)(true);
 
 	// 21.1.3.27 String.prototype[@@iterator]()
-	__webpack_require__(115)(String, 'String', function(iterated){
+	__webpack_require__(120)(String, 'String', function(iterated){
 	  this._t = String(iterated); // target
 	  this._i = 0;                // next index
 	// 21.1.5.2.1 %StringIteratorPrototype%.next()
@@ -2110,7 +2115,7 @@
 	});
 
 /***/ },
-/* 114 */
+/* 119 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var toInteger = __webpack_require__(57)
@@ -2132,20 +2137,20 @@
 	};
 
 /***/ },
-/* 115 */
+/* 120 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var LIBRARY        = __webpack_require__(116)
+	var LIBRARY        = __webpack_require__(121)
 	  , $export        = __webpack_require__(32)
-	  , redefine       = __webpack_require__(117)
+	  , redefine       = __webpack_require__(122)
 	  , hide           = __webpack_require__(37)
 	  , has            = __webpack_require__(50)
-	  , Iterators      = __webpack_require__(118)
-	  , $iterCreate    = __webpack_require__(119)
-	  , setToStringTag = __webpack_require__(123)
-	  , getPrototypeOf = __webpack_require__(125)
-	  , ITERATOR       = __webpack_require__(124)('iterator')
+	  , Iterators      = __webpack_require__(123)
+	  , $iterCreate    = __webpack_require__(124)
+	  , setToStringTag = __webpack_require__(128)
+	  , getPrototypeOf = __webpack_require__(130)
+	  , ITERATOR       = __webpack_require__(129)('iterator')
 	  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
 	  , FF_ITERATOR    = '@@iterator'
 	  , KEYS           = 'keys'
@@ -2207,35 +2212,35 @@
 	};
 
 /***/ },
-/* 116 */
+/* 121 */
 /***/ function(module, exports) {
 
 	module.exports = true;
 
 /***/ },
-/* 117 */
+/* 122 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = __webpack_require__(37);
 
 /***/ },
-/* 118 */
+/* 123 */
 /***/ function(module, exports) {
 
 	module.exports = {};
 
 /***/ },
-/* 119 */
+/* 124 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var create         = __webpack_require__(120)
+	var create         = __webpack_require__(125)
 	  , descriptor     = __webpack_require__(46)
-	  , setToStringTag = __webpack_require__(123)
+	  , setToStringTag = __webpack_require__(128)
 	  , IteratorPrototype = {};
 
 	// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-	__webpack_require__(37)(IteratorPrototype, __webpack_require__(124)('iterator'), function(){ return this; });
+	__webpack_require__(37)(IteratorPrototype, __webpack_require__(129)('iterator'), function(){ return this; });
 
 	module.exports = function(Constructor, NAME, next){
 	  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
@@ -2243,12 +2248,12 @@
 	};
 
 /***/ },
-/* 120 */
+/* 125 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
 	var anObject    = __webpack_require__(39)
-	  , dPs         = __webpack_require__(121)
+	  , dPs         = __webpack_require__(126)
 	  , enumBugKeys = __webpack_require__(62)
 	  , IE_PROTO    = __webpack_require__(59)('IE_PROTO')
 	  , Empty       = function(){ /* empty */ }
@@ -2263,7 +2268,7 @@
 	    , gt     = '>'
 	    , iframeDocument;
 	  iframe.style.display = 'none';
-	  __webpack_require__(122).appendChild(iframe);
+	  __webpack_require__(127).appendChild(iframe);
 	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
 	  // createDict = iframe.contentWindow.Object;
 	  // html.removeChild(iframe);
@@ -2290,7 +2295,7 @@
 
 
 /***/ },
-/* 121 */
+/* 126 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var dP       = __webpack_require__(38)
@@ -2308,25 +2313,25 @@
 	};
 
 /***/ },
-/* 122 */
+/* 127 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = __webpack_require__(33).document && document.documentElement;
 
 /***/ },
-/* 123 */
+/* 128 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var def = __webpack_require__(38).f
 	  , has = __webpack_require__(50)
-	  , TAG = __webpack_require__(124)('toStringTag');
+	  , TAG = __webpack_require__(129)('toStringTag');
 
 	module.exports = function(it, tag, stat){
 	  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
 	};
 
 /***/ },
-/* 124 */
+/* 129 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var store      = __webpack_require__(60)('wks')
@@ -2342,7 +2347,7 @@
 	$exports.store = store;
 
 /***/ },
-/* 125 */
+/* 130 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
@@ -2360,14 +2365,14 @@
 	};
 
 /***/ },
-/* 126 */
+/* 131 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(127);
+	__webpack_require__(132);
 	var global        = __webpack_require__(33)
 	  , hide          = __webpack_require__(37)
-	  , Iterators     = __webpack_require__(118)
-	  , TO_STRING_TAG = __webpack_require__(124)('toStringTag');
+	  , Iterators     = __webpack_require__(123)
+	  , TO_STRING_TAG = __webpack_require__(129)('toStringTag');
 
 	for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
 	  var NAME       = collections[i]
@@ -2378,20 +2383,20 @@
 	}
 
 /***/ },
-/* 127 */
+/* 132 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var addToUnscopables = __webpack_require__(128)
-	  , step             = __webpack_require__(129)
-	  , Iterators        = __webpack_require__(118)
+	var addToUnscopables = __webpack_require__(133)
+	  , step             = __webpack_require__(134)
+	  , Iterators        = __webpack_require__(123)
 	  , toIObject        = __webpack_require__(51);
 
 	// 22.1.3.4 Array.prototype.entries()
 	// 22.1.3.13 Array.prototype.keys()
 	// 22.1.3.29 Array.prototype.values()
 	// 22.1.3.30 Array.prototype[@@iterator]()
-	module.exports = __webpack_require__(115)(Array, 'Array', function(iterated, kind){
+	module.exports = __webpack_require__(120)(Array, 'Array', function(iterated, kind){
 	  this._t = toIObject(iterated); // target
 	  this._i = 0;                   // next index
 	  this._k = kind;                // kind
@@ -2417,13 +2422,13 @@
 	addToUnscopables('entries');
 
 /***/ },
-/* 128 */
+/* 133 */
 /***/ function(module, exports) {
 
 	module.exports = function(){ /* empty */ };
 
 /***/ },
-/* 129 */
+/* 134 */
 /***/ function(module, exports) {
 
 	module.exports = function(done, value){
@@ -2431,29 +2436,29 @@
 	};
 
 /***/ },
-/* 130 */
+/* 135 */
 /***/ function(module, exports, __webpack_require__) {
 
-	exports.f = __webpack_require__(124);
+	exports.f = __webpack_require__(129);
 
 /***/ },
-/* 131 */
+/* 136 */
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(132), __esModule: true };
+	module.exports = { "default": __webpack_require__(137), __esModule: true };
 
 /***/ },
-/* 132 */
+/* 137 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(133);
-	__webpack_require__(142);
-	__webpack_require__(143);
-	__webpack_require__(144);
+	__webpack_require__(138);
+	__webpack_require__(147);
+	__webpack_require__(148);
+	__webpack_require__(149);
 	module.exports = __webpack_require__(34).Symbol;
 
 /***/ },
-/* 133 */
+/* 138 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -2462,25 +2467,25 @@
 	  , has            = __webpack_require__(50)
 	  , DESCRIPTORS    = __webpack_require__(42)
 	  , $export        = __webpack_require__(32)
-	  , redefine       = __webpack_require__(117)
-	  , META           = __webpack_require__(134).KEY
+	  , redefine       = __webpack_require__(122)
+	  , META           = __webpack_require__(139).KEY
 	  , $fails         = __webpack_require__(43)
 	  , shared         = __webpack_require__(60)
-	  , setToStringTag = __webpack_require__(123)
+	  , setToStringTag = __webpack_require__(128)
 	  , uid            = __webpack_require__(61)
-	  , wks            = __webpack_require__(124)
-	  , wksExt         = __webpack_require__(130)
-	  , wksDefine      = __webpack_require__(135)
-	  , keyOf          = __webpack_require__(136)
-	  , enumKeys       = __webpack_require__(137)
-	  , isArray        = __webpack_require__(138)
+	  , wks            = __webpack_require__(129)
+	  , wksExt         = __webpack_require__(135)
+	  , wksDefine      = __webpack_require__(140)
+	  , keyOf          = __webpack_require__(141)
+	  , enumKeys       = __webpack_require__(142)
+	  , isArray        = __webpack_require__(143)
 	  , anObject       = __webpack_require__(39)
 	  , toIObject      = __webpack_require__(51)
 	  , toPrimitive    = __webpack_require__(45)
 	  , createDesc     = __webpack_require__(46)
-	  , _create        = __webpack_require__(120)
-	  , gOPNExt        = __webpack_require__(139)
-	  , $GOPD          = __webpack_require__(141)
+	  , _create        = __webpack_require__(125)
+	  , gOPNExt        = __webpack_require__(144)
+	  , $GOPD          = __webpack_require__(146)
 	  , $DP            = __webpack_require__(38)
 	  , $keys          = __webpack_require__(48)
 	  , gOPD           = $GOPD.f
@@ -2605,11 +2610,11 @@
 
 	  $GOPD.f = $getOwnPropertyDescriptor;
 	  $DP.f   = $defineProperty;
-	  __webpack_require__(140).f = gOPNExt.f = $getOwnPropertyNames;
+	  __webpack_require__(145).f = gOPNExt.f = $getOwnPropertyNames;
 	  __webpack_require__(64).f  = $propertyIsEnumerable;
 	  __webpack_require__(63).f = $getOwnPropertySymbols;
 
-	  if(DESCRIPTORS && !__webpack_require__(116)){
+	  if(DESCRIPTORS && !__webpack_require__(121)){
 	    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
 	  }
 
@@ -2693,7 +2698,7 @@
 	setToStringTag(global.JSON, 'JSON', true);
 
 /***/ },
-/* 134 */
+/* 139 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var META     = __webpack_require__(61)('meta')
@@ -2751,13 +2756,13 @@
 	};
 
 /***/ },
-/* 135 */
+/* 140 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var global         = __webpack_require__(33)
 	  , core           = __webpack_require__(34)
-	  , LIBRARY        = __webpack_require__(116)
-	  , wksExt         = __webpack_require__(130)
+	  , LIBRARY        = __webpack_require__(121)
+	  , wksExt         = __webpack_require__(135)
 	  , defineProperty = __webpack_require__(38).f;
 	module.exports = function(name){
 	  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
@@ -2765,7 +2770,7 @@
 	};
 
 /***/ },
-/* 136 */
+/* 141 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var getKeys   = __webpack_require__(48)
@@ -2780,7 +2785,7 @@
 	};
 
 /***/ },
-/* 137 */
+/* 142 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// all enumerable object keys, includes symbols
@@ -2800,7 +2805,7 @@
 	};
 
 /***/ },
-/* 138 */
+/* 143 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 7.2.2 IsArray(argument)
@@ -2810,12 +2815,12 @@
 	};
 
 /***/ },
-/* 139 */
+/* 144 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
 	var toIObject = __webpack_require__(51)
-	  , gOPN      = __webpack_require__(140).f
+	  , gOPN      = __webpack_require__(145).f
 	  , toString  = {}.toString;
 
 	var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
@@ -2835,7 +2840,7 @@
 
 
 /***/ },
-/* 140 */
+/* 145 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
@@ -2847,7 +2852,7 @@
 	};
 
 /***/ },
-/* 141 */
+/* 146 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var pIE            = __webpack_require__(64)
@@ -2868,29 +2873,24 @@
 	};
 
 /***/ },
-/* 142 */
+/* 147 */
 /***/ function(module, exports) {
 
 	
 
 /***/ },
-/* 143 */
+/* 148 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(135)('asyncIterator');
+	__webpack_require__(140)('asyncIterator');
 
 /***/ },
-/* 144 */
+/* 149 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(135)('observable');
+	__webpack_require__(140)('observable');
 
 /***/ },
-/* 145 */,
-/* 146 */,
-/* 147 */,
-/* 148 */,
-/* 149 */,
 /* 150 */,
 /* 151 */,
 /* 152 */,
@@ -2936,7 +2936,17 @@
 /* 192 */,
 /* 193 */,
 /* 194 */,
-/* 195 */
+/* 195 */,
+/* 196 */,
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2948,29 +2958,29 @@
 	}
 
 /***/ },
-/* 196 */
+/* 206 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(197);
+	__webpack_require__(207);
 	module.exports = {
 	  data: function () {return {
 	    root: 'examples',
-	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'linear-gradient', title: 'Gradient Color' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/slider-neighbor/index', title: 'Slider Neighbor' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'Instance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/websocket-demo', title: 'WebSocket' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }, { name: 'showcase/pseudo-class', title: 'PseudoClass' }]
+	    items: [{ name: 'hello', title: 'Hello World' }, { name: 'style/index', title: 'Common Style' }, { name: 'animation', title: 'Animation' }, { name: 'linear-gradient', title: 'Gradient Color' }, { name: 'component/text-demo', title: 'Text' }, { name: 'component/image-demo', title: 'Image' }, { name: 'component/input-demo', title: 'Input' }, { name: 'component/scroller-demo', title: 'Scroller' }, { name: 'component/list/list-basic', title: 'List (Basic)' }, { name: 'component/list/list-demo', title: 'List (Advanced)' }, { name: 'component/list/waterfall', title: 'List (WaterFall)' }, { name: 'component/slider/index', title: 'Slider' }, { name: 'component/slider-neighbor/index', title: 'Slider Neighbor' }, { name: 'component/slider-tab', title: 'Slider Tab' }, { name: 'component/a-demo', title: 'A' }, { name: 'component/video-demo', title: 'Video' }, { name: 'component/countdown-demo', title: 'Countdown' }, { name: 'component/marquee-demo', title: 'Marquee' }, { name: 'component/web-demo', title: 'Web' }, { name: 'component/navigator-demo', title: 'Navigator' }, { name: 'component/tabbar/tabbar-demo', title: 'Tabbar' }, { name: 'component/process-bar-demo', title: 'ProcessBar' }, { name: 'module/instance-api', title: 'Instance API' }, { name: 'module/modal', title: 'Modal' }, { name: 'module/stream-demo', title: 'Stream' }, { name: 'module/websocket-demo', title: 'WebSocket' }, { name: 'module/storage-demo', title: 'Storage' }, { name: 'module/picker-demo', title: 'Picker' }, { name: 'module/componentRect', title: 'componentRect' }, { name: 'module/clipboard', title: 'Clipboard' }, { name: 'showcase/new-fashion/index', title: 'Activity' }, { name: 'showcase/calculator', title: 'Calculator' }, { name: 'showcase/minesweeper', title: 'Minesweeper' }, { name: 'showcase/ui', title: 'UI Gallery' }, { name: 'showcase/dropdown/dropdown-demo', title: 'Dropdown' }, { name: 'showcase/pseudo-class', title: 'PseudoClass' }, { name: 'showcase/boxshadow', title: 'boxshadow' }]
 	  }}
 	};}
 	/* generated by weex-loader */
 
 
 /***/ },
-/* 197 */
+/* 207 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(198)
-	var __weex_template__ = __webpack_require__(202)
-	var __weex_style__ = __webpack_require__(203)
-	var __weex_script__ = __webpack_require__(204)
+	__webpack_require__(208)
+	var __weex_template__ = __webpack_require__(212)
+	var __weex_style__ = __webpack_require__(213)
+	var __weex_script__ = __webpack_require__(214)
 
 	__weex_define__('@weex-component/example-list', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2987,12 +2997,12 @@
 
 
 /***/ },
-/* 198 */
+/* 208 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(199)
-	var __weex_style__ = __webpack_require__(200)
-	var __weex_script__ = __webpack_require__(201)
+	var __weex_template__ = __webpack_require__(209)
+	var __weex_style__ = __webpack_require__(210)
+	var __weex_script__ = __webpack_require__(211)
 
 	__weex_define__('@weex-component/example-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -3009,11 +3019,17 @@
 
 
 /***/ },
-/* 199 */
+/* 209 */
 /***/ function(module, exports) {
 
 	module.exports = {
-	  "type": "wxc-list-item",
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
 	  "events": {
 	    "click": "redirect"
 	  },
@@ -3031,18 +3047,37 @@
 	}
 
 /***/ },
-/* 200 */
+/* 210 */
 /***/ function(module, exports) {
 
 	module.exports = {
 	  "item-txt": {
 	    "fontSize": 48,
 	    "color": "#555555"
+	  },
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd",
+	    "paddingTop:active": 25,
+	    "paddingBottom:active": 25,
+	    "paddingLeft:active": 35,
+	    "paddingRight:active": 35,
+	    "height:active": 160,
+	    "justifyContent:active": "center",
+	    "backgroundColor:active": "#00BDFF",
+	    "borderBottomWidth:active": 1,
+	    "borderColor:active": "#dddddd"
 	  }
 	}
 
 /***/ },
-/* 201 */
+/* 211 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3051,7 +3086,8 @@
 	module.exports = {
 	  data: function () {return {
 	    title: '',
-	    url: ''
+	    url: '',
+	    bgColor: '#ffffff'
 	  }},
 	  methods: {
 	    redirect: function redirect() {
@@ -3063,7 +3099,7 @@
 
 
 /***/ },
-/* 202 */
+/* 212 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3087,18 +3123,18 @@
 	}
 
 /***/ },
-/* 203 */
+/* 213 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 204 */
+/* 214 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _typeof2 = __webpack_require__(110);
+	var _typeof2 = __webpack_require__(115);
 
 	var _typeof3 = _interopRequireDefault(_typeof2);
 
diff --git a/ios/playground/bundlejs/linear-gradient.js b/ios/playground/bundlejs/linear-gradient.js
index 3866ce5..8e4859e 100644
--- a/ios/playground/bundlejs/linear-gradient.js
+++ b/ios/playground/bundlejs/linear-gradient.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(205)
-	var __weex_style__ = __webpack_require__(206)
+	var __weex_template__ = __webpack_require__(215)
+	var __weex_style__ = __webpack_require__(216)
 
 	__weex_define__('@weex-component/695f94322dfa977e2812d2616f20e495', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -60,7 +60,7 @@
 
 /***/ },
 
-/***/ 205:
+/***/ 215:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -334,7 +334,7 @@
 
 /***/ },
 
-/***/ 206:
+/***/ 216:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/module/chatroom-demo.js b/ios/playground/bundlejs/module/chatroom-demo.js
new file mode 100644
index 0000000..a99ff43
--- /dev/null
+++ b/ios/playground/bundlejs/module/chatroom-demo.js
@@ -0,0 +1,370 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(217)
+	var __weex_style__ = __webpack_require__(218)
+	var __weex_script__ = __webpack_require__(219)
+
+	__weex_define__('@weex-component/29706d742e69367afe49c8e240836540', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/29706d742e69367afe49c8e240836540',undefined,undefined)
+
+/***/ },
+
+/***/ 217:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "container"
+	  ],
+	  "children": [
+	    {
+	      "type": "list",
+	      "classList": [
+	        "list"
+	      ],
+	      "attr": {
+	        "loadmore": "loadmore",
+	        "loadmoreoffset": "500"
+	      },
+	      "children": [
+	        {
+	          "type": "cell",
+	          "append": "tree",
+	          "repeat": {
+	            "expression": function () {return this.rows},
+	            "value": "row"
+	          },
+	          "children": [
+	            {
+	              "type": "div",
+	              "classList": [
+	                "item"
+	              ],
+	              "children": [
+	                {
+	                  "type": "text",
+	                  "classList": [
+	                    "item-title"
+	                  ],
+	                  "style": {
+	                    "textAlign": function () {return this.row.align},
+	                    "backgroundColor": function () {return this.row.bg}
+	                  },
+	                  "attr": {
+	                    "value": function () {return this.row.message}
+	                  }
+	                }
+	              ]
+	            }
+	          ]
+	        },
+	        {
+	          "type": "cell",
+	          "append": "tree",
+	          "children": [
+	            {
+	              "type": "text",
+	              "id": "cellfoot",
+	              "style": {
+	                "marginBottom": 40
+	              }
+	            }
+	          ]
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "flexDirection": "row",
+	        "justifyContent": "center"
+	      },
+	      "children": [
+	        {
+	          "type": "input",
+	          "attr": {
+	            "type": "text",
+	            "placeholder": "请输入聊天信息",
+	            "autofocus": "false",
+	            "value": ""
+	          },
+	          "classList": [
+	            "input"
+	          ],
+	          "events": {
+	            "change": "onchange",
+	            "input": "oninput"
+	          },
+	          "id": "input"
+	        },
+	        {
+	          "type": "text",
+	          "classList": [
+	            "button"
+	          ],
+	          "events": {
+	            "click": "send"
+	          },
+	          "attr": {
+	            "value": "发送"
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "text",
+	      "id": "foot",
+	      "style": {
+	        "color": "#000000",
+	        "height": 40
+	      }
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 218:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "input": {
+	    "fontSize": 40,
+	    "height": 80,
+	    "width": 500,
+	    "marginBottom": 40,
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "borderColor": "rgb(162,217,192)"
+	  },
+	  "button": {
+	    "fontSize": 36,
+	    "width": 150,
+	    "height": 80,
+	    "textAlign": "center",
+	    "paddingTop": 15,
+	    "paddingBottom": 15,
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "marginRight": 20,
+	    "marginLeft": 20,
+	    "borderColor": "rgb(162,217,192)",
+	    "backgroundColor": "#00BFFF",
+	    "color": "#FFFFFF",
+	    "fontWeight": "900",
+	    "boxShadow": "1 1px 8px rgba(205, 155, 29, 0.85)",
+	    "backgroundColor:active": "#1E90FF",
+	    "boxShadow:active": "1 4px 6px rgba(255, 99, 71, 0.85)"
+	  },
+	  "container": {
+	    "flex": 1,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flexDirection": "column",
+	    "borderTopStyle": "solid",
+	    "borderTopWidth": 2,
+	    "borderTopColor": "#DFDFDF"
+	  },
+	  "list": {
+	    "flex": 1,
+	    "width": 750,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flexDirection": "column",
+	    "borderTopStyle": "solid",
+	    "borderTopWidth": 2,
+	    "borderTopColor": "#DFDFDF"
+	  },
+	  "item": {
+	    "justifyContent": "center",
+	    "height": 60,
+	    "padding": 20,
+	    "marginTop": 5
+	  },
+	  "item-title": {
+	    "fontSize": 30,
+	    "height": 60,
+	    "paddingTop": 10,
+	    "paddingRight": 20,
+	    "paddingLeft": 20
+	  }
+	}
+
+/***/ },
+
+/***/ 219:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	var dom = __weex_require__('@weex-module/dom');
+	var websocket = __weex_require__('@weex-module/webSocket');
+	module.exports = {
+	  data: function () {return {
+	    rows: [],
+	    names: ['A', 'B', 'C', 'D', 'E', 'F', 'H', 'G'],
+	    connectinfo: '',
+	    sendinfo: '',
+	    onopeninfo: '',
+	    onmessage: '',
+	    oncloseinfo: '',
+	    onerrorinfo: '',
+	    closeinfo: '',
+	    txtInput: '',
+	    info: '',
+	    message: '',
+	    align: 'left',
+	    bg: 'white',
+	    from_client_id: '',
+	    name: '',
+	    number: 1
+	  }},
+	  methods: {
+	    ready: function ready() {
+	      var self = this;
+	      self.connect();
+	    },
+	    connect: function connect() {
+	      websocket.WebSocket('ws://chat.workerman.net:7272/', '');
+	      var self = this;
+	      self.info = 'connecting...';
+	      websocket.onopen = function (e) {
+	        self.info = 'websocket open';
+	        var count = self.names.length;
+	        var id = Math.ceil(Math.random() * count);
+	        self.name = self.names[id];
+	        var loginData = '{"type":"login","client_name":"' + self.name + '","room_id":"1"}';
+	        self.login(loginData);
+	      };
+
+	      websocket.onmessage = function (e) {
+	        self.onmessage = e.data;
+	        var message = JSON.parse(e.data);
+	        self.align = 'left';
+	        self.bg = 'white';
+	        var loginMessage = '';
+	        if (message.type == 'login') {
+	          if (self.from_client_id.length == 0) {
+	            self.from_client_id = message.client_id;
+
+	            self.align = 'right';
+	            self.bg = '#00CD00';
+	            loginMessage = self.name + ' 欢迎您加入了聊天室';
+	          } else {
+	            self.info = 'type is login';
+	            self.align = 'left';
+	            self.bg = 'white';
+	            loginMessage = message.client_name + '加入了聊天室';
+	          }
+	        }
+	        if (self.from_client_id == message.from_client_id) {
+	          self.align = 'right';
+	          self.bg = '#00CD00';
+	        }
+
+	        if (message.type == 'ping') {}
+
+	        if (message.type == 'login') {
+	          self.rows.push({ message: loginMessage, align: self.align, bg: self.bg });
+	        } else if (message.type == 'logout') {
+	          self.rows.push({ message: message.from_client_name + '离开了聊天室', align: self.align, bg: self.bg });
+	        }
+
+	        if (message.content) {
+	          self.rows.push({ message: message.from_client_name + ':' + message.content, align: self.align, bg: self.bg });
+	          if (self.rows.length > 16) {
+	            dom.scrollToElement(self.$el('cellfoot'), { offset: 0 });
+	          }
+	        }
+	      };
+	      websocket.onerror = function (e) {
+	        self.onerrorinfo = e.data;
+	      };
+	      websocket.onclose = function (e) {
+	        self.onopeninfo = '';
+	        self.onerrorinfo = e.code;
+	      };
+	    },
+	    login: function login(loginInfo) {
+	      websocket.send(loginInfo);
+	    },
+	    send: function send(e) {
+
+	      var input = this.$el('input');
+	      input.blur();
+	      var self = this;
+	      var sendinfo = '{"type":"say","from_client_id":"' + self.from_client_id + '","from_client_name":"' + '游客' + '","to_client_id":"all","content":"' + this.txtInput + '","time":"2017-03-15 01:04:00"}';
+	      websocket.send(sendinfo);
+	    },
+	    oninput: function oninput(event) {
+	      this.txtInput = event.value;
+	    },
+	    close: function close(e) {
+	      websocket.close();
+	    }
+	  }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/module/clipboard.js b/ios/playground/bundlejs/module/clipboard.js
index 58aff6c..55ae588 100644
--- a/ios/playground/bundlejs/module/clipboard.js
+++ b/ios/playground/bundlejs/module/clipboard.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(205)
-	var __weex_script__ = __webpack_require__(206)
+	var __weex_template__ = __webpack_require__(220)
+	var __weex_script__ = __webpack_require__(221)
 
 	__weex_define__('@weex-component/e93e729eb05598f04027627a24c804bf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2038,8 +2038,22 @@
 /* 97 */,
 /* 98 */,
 /* 99 */,
-/* 100 */,
-/* 101 */,
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
 /* 102 */,
 /* 103 */,
 /* 104 */,
@@ -2127,22 +2141,8 @@
 /* 186 */,
 /* 187 */,
 /* 188 */,
-/* 189 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
-
-/***/ },
-/* 190 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var core  = __webpack_require__(34)
-	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
-	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
-	  return $JSON.stringify.apply($JSON, arguments);
-	};
-
-/***/ },
+/* 189 */,
+/* 190 */,
 /* 191 */,
 /* 192 */,
 /* 193 */,
@@ -2157,7 +2157,22 @@
 /* 202 */,
 /* 203 */,
 /* 204 */,
-/* 205 */
+/* 205 */,
+/* 206 */,
+/* 207 */,
+/* 208 */,
+/* 209 */,
+/* 210 */,
+/* 211 */,
+/* 212 */,
+/* 213 */,
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2251,12 +2266,12 @@
 	}
 
 /***/ },
-/* 206 */
+/* 221 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
diff --git a/ios/playground/bundlejs/module/componentRect.js b/ios/playground/bundlejs/module/componentRect.js
index 3e1e81f..85c709f 100644
--- a/ios/playground/bundlejs/module/componentRect.js
+++ b/ios/playground/bundlejs/module/componentRect.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(207)
-	var __weex_template__ = __webpack_require__(211)
-	var __weex_style__ = __webpack_require__(212)
-	var __weex_script__ = __webpack_require__(213)
+	__webpack_require__(222)
+	var __weex_template__ = __webpack_require__(226)
+	var __weex_style__ = __webpack_require__(227)
+	var __weex_script__ = __webpack_require__(228)
 
 	__weex_define__('@weex-component/3cccb00caad47f9888c7597d009c670e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,12 +67,12 @@
 
 /***/ },
 
-/***/ 207:
+/***/ 222:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(208)
-	var __weex_style__ = __webpack_require__(209)
-	var __weex_script__ = __webpack_require__(210)
+	var __weex_template__ = __webpack_require__(223)
+	var __weex_style__ = __webpack_require__(224)
+	var __weex_script__ = __webpack_require__(225)
 
 	__weex_define__('@weex-component/multi-text', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 208:
+/***/ 223:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -124,7 +124,7 @@
 
 /***/ },
 
-/***/ 209:
+/***/ 224:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -145,7 +145,7 @@
 
 /***/ },
 
-/***/ 210:
+/***/ 225:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -161,7 +161,7 @@
 
 /***/ },
 
-/***/ 211:
+/***/ 226:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -430,7 +430,7 @@
 
 /***/ },
 
-/***/ 212:
+/***/ 227:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -507,7 +507,7 @@
 
 /***/ },
 
-/***/ 213:
+/***/ 228:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/module/instance-api.js b/ios/playground/bundlejs/module/instance-api.js
index adc1613..db5b1c3 100644
--- a/ios/playground/bundlejs/module/instance-api.js
+++ b/ios/playground/bundlejs/module/instance-api.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(214)
-	var __weex_script__ = __webpack_require__(215)
+	var __weex_template__ = __webpack_require__(229)
+	var __weex_script__ = __webpack_require__(230)
 
 	__weex_define__('@weex-component/2c1f438ffab50b73880065c54d5a1b0c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2038,8 +2038,22 @@
 /* 97 */,
 /* 98 */,
 /* 99 */,
-/* 100 */,
-/* 101 */,
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
 /* 102 */,
 /* 103 */,
 /* 104 */,
@@ -2127,22 +2141,8 @@
 /* 186 */,
 /* 187 */,
 /* 188 */,
-/* 189 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
-
-/***/ },
-/* 190 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var core  = __webpack_require__(34)
-	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
-	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
-	  return $JSON.stringify.apply($JSON, arguments);
-	};
-
-/***/ },
+/* 189 */,
+/* 190 */,
 /* 191 */,
 /* 192 */,
 /* 193 */,
@@ -2166,7 +2166,22 @@
 /* 211 */,
 /* 212 */,
 /* 213 */,
-/* 214 */
+/* 214 */,
+/* 215 */,
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2191,12 +2206,12 @@
 	}
 
 /***/ },
-/* 215 */
+/* 230 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
diff --git a/ios/playground/bundlejs/module/modal.js b/ios/playground/bundlejs/module/modal.js
index 9d43515..71a2c2a 100644
--- a/ios/playground/bundlejs/module/modal.js
+++ b/ios/playground/bundlejs/module/modal.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(216)
-	var __weex_style__ = __webpack_require__(217)
-	var __weex_script__ = __webpack_require__(218)
+	var __weex_template__ = __webpack_require__(231)
+	var __weex_style__ = __webpack_require__(232)
+	var __weex_script__ = __webpack_require__(233)
 
 	__weex_define__('@weex-component/3e30f1e2562a57b329ab7ebd1387f07b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2157,7 +2157,22 @@
 /* 213 */,
 /* 214 */,
 /* 215 */,
-/* 216 */
+/* 216 */,
+/* 217 */,
+/* 218 */,
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2231,13 +2246,13 @@
 	}
 
 /***/ },
-/* 217 */
+/* 232 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 218 */
+/* 233 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/module/picker-demo.js b/ios/playground/bundlejs/module/picker-demo.js
index 9d3d0d2..8511d04 100644
--- a/ios/playground/bundlejs/module/picker-demo.js
+++ b/ios/playground/bundlejs/module/picker-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(219)
-	var __weex_style__ = __webpack_require__(220)
-	var __weex_script__ = __webpack_require__(221)
+	var __weex_template__ = __webpack_require__(234)
+	var __weex_style__ = __webpack_require__(235)
+	var __weex_script__ = __webpack_require__(236)
 
 	__weex_define__('@weex-component/713f21e067b638ad251dbcb7d5b37be5', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2160,7 +2160,22 @@
 /* 216 */,
 /* 217 */,
 /* 218 */,
-/* 219 */
+/* 219 */,
+/* 220 */,
+/* 221 */,
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2271,7 +2286,7 @@
 	}
 
 /***/ },
-/* 220 */
+/* 235 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2283,7 +2298,7 @@
 	}
 
 /***/ },
-/* 221 */
+/* 236 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/module/storage-demo.js b/ios/playground/bundlejs/module/storage-demo.js
index 6dccf7f..467c9c7 100644
--- a/ios/playground/bundlejs/module/storage-demo.js
+++ b/ios/playground/bundlejs/module/storage-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(222)
-	var __weex_script__ = __webpack_require__(223)
+	var __weex_template__ = __webpack_require__(237)
+	var __weex_script__ = __webpack_require__(238)
 
 	__weex_define__('@weex-component/6f110d391fd7b90c9a19583f6ee1a7cf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2038,8 +2038,22 @@
 /* 97 */,
 /* 98 */,
 /* 99 */,
-/* 100 */,
-/* 101 */,
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
 /* 102 */,
 /* 103 */,
 /* 104 */,
@@ -2127,22 +2141,8 @@
 /* 186 */,
 /* 187 */,
 /* 188 */,
-/* 189 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
-
-/***/ },
-/* 190 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var core  = __webpack_require__(34)
-	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
-	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
-	  return $JSON.stringify.apply($JSON, arguments);
-	};
-
-/***/ },
+/* 189 */,
+/* 190 */,
 /* 191 */,
 /* 192 */,
 /* 193 */,
@@ -2174,7 +2174,22 @@
 /* 219 */,
 /* 220 */,
 /* 221 */,
-/* 222 */
+/* 222 */,
+/* 223 */,
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2263,12 +2278,12 @@
 	}
 
 /***/ },
-/* 223 */
+/* 238 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
diff --git a/ios/playground/bundlejs/module/stream-demo.js b/ios/playground/bundlejs/module/stream-demo.js
index 30b93a2..a34fdad 100644
--- a/ios/playground/bundlejs/module/stream-demo.js
+++ b/ios/playground/bundlejs/module/stream-demo.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(224)
-	var __weex_script__ = __webpack_require__(225)
+	var __weex_template__ = __webpack_require__(239)
+	var __weex_script__ = __webpack_require__(240)
 
 	__weex_define__('@weex-component/2c445dcf67fa0895d197edb5ffa2f439', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2038,8 +2038,22 @@
 /* 97 */,
 /* 98 */,
 /* 99 */,
-/* 100 */,
-/* 101 */,
+/* 100 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
+
+/***/ },
+/* 101 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var core  = __webpack_require__(34)
+	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
+	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
+	  return $JSON.stringify.apply($JSON, arguments);
+	};
+
+/***/ },
 /* 102 */,
 /* 103 */,
 /* 104 */,
@@ -2127,22 +2141,8 @@
 /* 186 */,
 /* 187 */,
 /* 188 */,
-/* 189 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
-
-/***/ },
-/* 190 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var core  = __webpack_require__(34)
-	  , $JSON = core.JSON || (core.JSON = {stringify: JSON.stringify});
-	module.exports = function stringify(it){ // eslint-disable-line no-unused-vars
-	  return $JSON.stringify.apply($JSON, arguments);
-	};
-
-/***/ },
+/* 189 */,
+/* 190 */,
 /* 191 */,
 /* 192 */,
 /* 193 */,
@@ -2176,7 +2176,22 @@
 /* 221 */,
 /* 222 */,
 /* 223 */,
-/* 224 */
+/* 224 */,
+/* 225 */,
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2293,12 +2308,12 @@
 	}
 
 /***/ },
-/* 225 */
+/* 240 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
diff --git a/ios/playground/bundlejs/module/websocket-demo.js b/ios/playground/bundlejs/module/websocket-demo.js
index 0d9ba97..a60abb6 100644
--- a/ios/playground/bundlejs/module/websocket-demo.js
+++ b/ios/playground/bundlejs/module/websocket-demo.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(226)
-	var __weex_style__ = __webpack_require__(227)
-	var __weex_script__ = __webpack_require__(228)
+	var __weex_template__ = __webpack_require__(241)
+	var __weex_style__ = __webpack_require__(242)
+	var __weex_script__ = __webpack_require__(243)
 
 	__weex_define__('@weex-component/f1edaa994f4c5a505cfb7f32ca9ee569', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -67,760 +67,34 @@
 /* 1 */,
 /* 2 */,
 /* 3 */,
-/* 4 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(5);
-	__webpack_require__(9);
-	__webpack_require__(13);
-	__webpack_require__(17);
-	__webpack_require__(21);
-	__webpack_require__(25);
-	__webpack_require__(66);
-	__webpack_require__(70);
-	__webpack_require__(74);
-	__webpack_require__(78);
-	__webpack_require__(79);
-
-
-/***/ },
-/* 5 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(6)
-	var __weex_style__ = __webpack_require__(7)
-	var __weex_script__ = __webpack_require__(8)
-
-	__weex_define__('@weex-component/wxc-button', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 6 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['btn', 'btn-' + (this.type), 'btn-sz-' + (this.size)]},
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['btn-txt', 'btn-txt-' + (this.type), 'btn-txt-sz-' + (this.size)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 7 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "btn": {
-	    "marginBottom": 0,
-	    "alignItems": "center",
-	    "justifyContent": "center",
-	    "borderWidth": 1,
-	    "borderStyle": "solid",
-	    "borderColor": "#333333"
-	  },
-	  "btn-default": {
-	    "color": "rgb(51,51,51)"
-	  },
-	  "btn-primary": {
-	    "backgroundColor": "rgb(40,96,144)",
-	    "borderColor": "rgb(40,96,144)"
-	  },
-	  "btn-success": {
-	    "backgroundColor": "rgb(92,184,92)",
-	    "borderColor": "rgb(76,174,76)"
-	  },
-	  "btn-info": {
-	    "backgroundColor": "rgb(91,192,222)",
-	    "borderColor": "rgb(70,184,218)"
-	  },
-	  "btn-warning": {
-	    "backgroundColor": "rgb(240,173,78)",
-	    "borderColor": "rgb(238,162,54)"
-	  },
-	  "btn-danger": {
-	    "backgroundColor": "rgb(217,83,79)",
-	    "borderColor": "rgb(212,63,58)"
-	  },
-	  "btn-link": {
-	    "borderColor": "rgba(0,0,0,0)",
-	    "borderRadius": 0
-	  },
-	  "btn-txt-default": {
-	    "color": "rgb(51,51,51)"
-	  },
-	  "btn-txt-primary": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-success": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-info": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-warning": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-danger": {
-	    "color": "rgb(255,255,255)"
-	  },
-	  "btn-txt-link": {
-	    "color": "rgb(51,122,183)"
-	  },
-	  "btn-sz-large": {
-	    "width": 300,
-	    "height": 100,
-	    "paddingTop": 25,
-	    "paddingBottom": 25,
-	    "paddingLeft": 40,
-	    "paddingRight": 40,
-	    "borderRadius": 15
-	  },
-	  "btn-sz-middle": {
-	    "width": 240,
-	    "height": 80,
-	    "paddingTop": 15,
-	    "paddingBottom": 15,
-	    "paddingLeft": 30,
-	    "paddingRight": 30,
-	    "borderRadius": 10
-	  },
-	  "btn-sz-small": {
-	    "width": 170,
-	    "height": 60,
-	    "paddingTop": 12,
-	    "paddingBottom": 12,
-	    "paddingLeft": 25,
-	    "paddingRight": 25,
-	    "borderRadius": 7
-	  },
-	  "btn-txt-sz-large": {
-	    "fontSize": 45
-	  },
-	  "btn-txt-sz-middle": {
-	    "fontSize": 35
-	  },
-	  "btn-txt-sz-small": {
-	    "fontSize": 30
-	  }
-	}
-
-/***/ },
-/* 8 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'default',
-	    size: 'large',
-	    value: ''
-	  }},
-	  methods: {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 9 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(10)
-	var __weex_style__ = __webpack_require__(11)
-	var __weex_script__ = __webpack_require__(12)
-
-	__weex_define__('@weex-component/wxc-hn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 10 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['h' + (this.level)]},
-	  "style": {
-	    "justifyContent": "center"
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['txt-h' + (this.level)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 11 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "h1": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "h2": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "h3": {
-	    "height": 110,
-	    "paddingTop": 20,
-	    "paddingBottom": 20
-	  },
-	  "txt-h1": {
-	    "fontSize": 70
-	  },
-	  "txt-h2": {
-	    "fontSize": 52
-	  },
-	  "txt-h3": {
-	    "fontSize": 42
-	  }
-	}
-
-/***/ },
-/* 12 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    level: 1,
-	    value: ''
-	  }},
-	  methods: {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 13 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(14)
-	var __weex_style__ = __webpack_require__(15)
-	var __weex_script__ = __webpack_require__(16)
-
-	__weex_define__('@weex-component/wxc-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 14 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "item"
-	  ],
-	  "events": {
-	    "touchstart": "touchstart",
-	    "touchend": "touchend"
-	  },
-	  "style": {
-	    "backgroundColor": function () {return this.bgColor}
-	  },
-	  "children": [
-	    {
-	      "type": "content"
-	    }
-	  ]
-	}
-
-/***/ },
-/* 15 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "item": {
-	    "paddingTop": 25,
-	    "paddingBottom": 25,
-	    "paddingLeft": 35,
-	    "paddingRight": 35,
-	    "height": 160,
-	    "justifyContent": "center",
-	    "borderBottomWidth": 1,
-	    "borderColor": "#dddddd"
-	  }
-	}
-
-/***/ },
-/* 16 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    bgColor: '#ffffff'
-	  }},
-	  methods: {
-	    touchstart: function touchstart() {},
-	    touchend: function touchend() {}
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 17 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(18)
-	var __weex_style__ = __webpack_require__(19)
-	var __weex_script__ = __webpack_require__(20)
-
-	__weex_define__('@weex-component/wxc-panel', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 18 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['panel', 'panel-' + (this.type)]},
-	  "style": {
-	    "borderWidth": function () {return this.border}
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['panel-header', 'panel-header-' + (this.type)]},
-	      "style": {
-	        "paddingTop": function () {return this.paddingHead},
-	        "paddingBottom": function () {return this.paddingHead},
-	        "paddingLeft": function () {return this.paddingHead*1.5},
-	        "paddingRight": function () {return this.paddingHead*1.5}
-	      },
-	      "attr": {
-	        "value": function () {return this.title}
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": function () {return ['panel-body', 'panel-body-' + (this.type)]},
-	      "style": {
-	        "paddingTop": function () {return this.paddingBody},
-	        "paddingBottom": function () {return this.paddingBody},
-	        "paddingLeft": function () {return this.paddingBody*1.5},
-	        "paddingRight": function () {return this.paddingBody*1.5}
-	      },
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 19 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "panel": {
-	    "marginBottom": 20,
-	    "backgroundColor": "#ffffff",
-	    "borderColor": "#dddddd",
-	    "borderWidth": 1
-	  },
-	  "panel-primary": {
-	    "borderColor": "rgb(40,96,144)"
-	  },
-	  "panel-success": {
-	    "borderColor": "rgb(76,174,76)"
-	  },
-	  "panel-info": {
-	    "borderColor": "rgb(70,184,218)"
-	  },
-	  "panel-warning": {
-	    "borderColor": "rgb(238,162,54)"
-	  },
-	  "panel-danger": {
-	    "borderColor": "rgb(212,63,58)"
-	  },
-	  "panel-header": {
-	    "backgroundColor": "#f5f5f5",
-	    "fontSize": 40,
-	    "color": "#333333"
-	  },
-	  "panel-header-primary": {
-	    "backgroundColor": "rgb(40,96,144)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-success": {
-	    "backgroundColor": "rgb(92,184,92)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-info": {
-	    "backgroundColor": "rgb(91,192,222)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-warning": {
-	    "backgroundColor": "rgb(240,173,78)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-danger": {
-	    "backgroundColor": "rgb(217,83,79)",
-	    "color": "#ffffff"
-	  }
-	}
-
-/***/ },
-/* 20 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'default',
-	    title: '',
-	    paddingBody: 20,
-	    paddingHead: 20,
-	    dataClass: '',
-	    border: 0
-	  }},
-	  ready: function ready() {}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 21 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(22)
-	var __weex_style__ = __webpack_require__(23)
-	var __weex_script__ = __webpack_require__(24)
-
-	__weex_define__('@weex-component/wxc-tip', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 22 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": function () {return ['tip', 'tip-' + (this.type)]},
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": function () {return ['tip-txt', 'tip-txt-' + (this.type)]},
-	      "attr": {
-	        "value": function () {return this.value}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 23 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "tip": {
-	    "paddingLeft": 36,
-	    "paddingRight": 36,
-	    "paddingTop": 36,
-	    "paddingBottom": 36,
-	    "borderRadius": 10
-	  },
-	  "tip-txt": {
-	    "fontSize": 28
-	  },
-	  "tip-success": {
-	    "backgroundColor": "#dff0d8",
-	    "borderColor": "#d6e9c6"
-	  },
-	  "tip-txt-success": {
-	    "color": "#3c763d"
-	  },
-	  "tip-info": {
-	    "backgroundColor": "#d9edf7",
-	    "borderColor": "#bce8f1"
-	  },
-	  "tip-txt-info": {
-	    "color": "#31708f"
-	  },
-	  "tip-warning": {
-	    "backgroundColor": "#fcf8e3",
-	    "borderColor": "#faebcc"
-	  },
-	  "tip-txt-warning": {
-	    "color": "#8a6d3b"
-	  },
-	  "tip-danger": {
-	    "backgroundColor": "#f2dede",
-	    "borderColor": "#ebccd1"
-	  },
-	  "tip-txt-danger": {
-	    "color": "#a94442"
-	  }
-	}
-
-/***/ },
-/* 24 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    type: 'success',
-	    value: ''
-	  }}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 25 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(26)
-	var __weex_style__ = __webpack_require__(27)
-	var __weex_script__ = __webpack_require__(28)
-
-	__weex_define__('@weex-component/wxc-countdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 26 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "style": {
-	    "overflow": "hidden",
-	    "flexDirection": "row"
-	  },
-	  "events": {
-	    "appear": "appeared",
-	    "disappear": "disappeared"
-	  },
-	  "children": [
-	    {
-	      "type": "content"
-	    }
-	  ]
-	}
-
-/***/ },
-/* 27 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrap": {
-	    "overflow": "hidden"
-	  }
-	}
-
-/***/ },
-/* 28 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	var _assign = __webpack_require__(29);
-
-	var _assign2 = _interopRequireDefault(_assign);
-
-	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
-
-	module.exports = {
-	    data: function () {return {
-	        now: 0,
-	        remain: 0,
-	        time: {
-	            elapse: 0,
-	            D: '0',
-	            DD: '0',
-	            h: '0',
-	            hh: '00',
-	            H: '0',
-	            HH: '0',
-	            m: '0',
-	            mm: '00',
-	            M: '0',
-	            MM: '0',
-	            s: '0',
-	            ss: '00',
-	            S: '0',
-	            SS: '0'
-	        },
-	        outofview: false
-	    }},
-	    ready: function ready() {
-	        if (this.remain <= 0) {
-	            return;
-	        }
-
-	        this.now = Date.now();
-	        this.nextTick();
-	    },
-	    methods: {
-	        nextTick: function nextTick() {
-	            if (this.outofview) {
-	                setTimeout(this.nextTick.bind(this), 1000);
-	            } else {
-	                this.time.elapse = parseInt((Date.now() - this.now) / 1000);
-
-	                if (this.calc()) {
-	                    this.$emit('tick', (0, _assign2.default)({}, this.time));
-	                    setTimeout(this.nextTick.bind(this), 1000);
-	                } else {
-	                    this.$emit('alarm', (0, _assign2.default)({}, this.time));
-	                }
-	                this._app.updateActions();
-	            }
-	        },
-	        format: function format(str) {
-	            if (str.length >= 2) {
-	                return str;
-	            } else {
-	                return '0' + str;
-	            }
-	        },
-	        calc: function calc() {
-	            var remain = this.remain - this.time.elapse;
-	            if (remain < 0) {
-	                remain = 0;
-	            }
-	            this.time.D = String(parseInt(remain / 86400));
-	            this.time.DD = this.format(this.time.D);
-	            this.time.h = String(parseInt((remain - parseInt(this.time.D) * 86400) / 3600));
-	            this.time.hh = this.format(this.time.h);
-	            this.time.H = String(parseInt(remain / 3600));
-	            this.time.HH = this.format(this.time.H);
-	            this.time.m = String(parseInt((remain - parseInt(this.time.H) * 3600) / 60));
-	            this.time.mm = this.format(this.time.m);
-	            this.time.M = String(parseInt(remain / 60));
-	            this.time.MM = this.format(this.time.M);
-	            this.time.s = String(remain - parseInt(this.time.M) * 60);
-	            this.time.ss = this.format(this.time.s);
-	            this.time.S = String(remain);
-	            this.time.SS = this.format(this.time.S);
-
-	            return remain > 0;
-	        },
-	        appeared: function appeared() {
-	            this.outofview = false;
-	        },
-	        disappeared: function disappeared() {
-	            this.outofview = true;
-	        }
-	    }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 29 */
-/***/ function(module, exports, __webpack_require__) {
-
-	module.exports = { "default": __webpack_require__(30), __esModule: true };
-
-/***/ },
-/* 30 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(31);
-	module.exports = __webpack_require__(34).Object.assign;
-
-/***/ },
-/* 31 */
-/***/ function(module, exports, __webpack_require__) {
-
-	// 19.1.3.1 Object.assign(target, source)
-	var $export = __webpack_require__(32);
-
-	$export($export.S + $export.F, 'Object', {assign: __webpack_require__(47)});
-
-/***/ },
+/* 4 */,
+/* 5 */,
+/* 6 */,
+/* 7 */,
+/* 8 */,
+/* 9 */,
+/* 10 */,
+/* 11 */,
+/* 12 */,
+/* 13 */,
+/* 14 */,
+/* 15 */,
+/* 16 */,
+/* 17 */,
+/* 18 */,
+/* 19 */,
+/* 20 */,
+/* 21 */,
+/* 22 */,
+/* 23 */,
+/* 24 */,
+/* 25 */,
+/* 26 */,
+/* 27 */,
+/* 28 */,
+/* 29 */,
+/* 30 */,
+/* 31 */,
 /* 32 */
 /***/ function(module, exports, __webpack_require__) {
 
@@ -1060,44 +334,7 @@
 	};
 
 /***/ },
-/* 47 */
-/***/ function(module, exports, __webpack_require__) {
-
-	'use strict';
-	// 19.1.2.1 Object.assign(target, source, ...)
-	var getKeys  = __webpack_require__(48)
-	  , gOPS     = __webpack_require__(63)
-	  , pIE      = __webpack_require__(64)
-	  , toObject = __webpack_require__(65)
-	  , IObject  = __webpack_require__(52)
-	  , $assign  = Object.assign;
-
-	// should work with symbols and should have deterministic property order (V8 bug)
-	module.exports = !$assign || __webpack_require__(43)(function(){
-	  var A = {}
-	    , B = {}
-	    , S = Symbol()
-	    , K = 'abcdefghijklmnopqrst';
-	  A[S] = 7;
-	  K.split('').forEach(function(k){ B[k] = k; });
-	  return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;
-	}) ? function assign(target, source){ // eslint-disable-line no-unused-vars
-	  var T     = toObject(target)
-	    , aLen  = arguments.length
-	    , index = 1
-	    , getSymbols = gOPS.f
-	    , isEnum     = pIE.f;
-	  while(aLen > index){
-	    var S      = IObject(arguments[index++])
-	      , keys   = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S)
-	      , length = keys.length
-	      , j      = 0
-	      , key;
-	    while(length > j)if(isEnum.call(S, key = keys[j++]))T[key] = S[key];
-	  } return T;
-	} : $assign;
-
-/***/ },
+/* 47 */,
 /* 48 */
 /***/ function(module, exports, __webpack_require__) {
 
@@ -1304,729 +541,26 @@
 	};
 
 /***/ },
-/* 66 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(67)
-	var __weex_style__ = __webpack_require__(68)
-	var __weex_script__ = __webpack_require__(69)
-
-	__weex_define__('@weex-component/wxc-marquee', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 67 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrap"
-	  ],
-	  "events": {
-	    "appear": "appeared",
-	    "disappear": "disappeared"
-	  },
-	  "children": [
-	    {
-	      "type": "div",
-	      "id": "anim",
-	      "classList": [
-	        "anim"
-	      ],
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 68 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrap": {
-	    "overflow": "hidden",
-	    "position": "relative"
-	  },
-	  "anim": {
-	    "flexDirection": "column",
-	    "position": "absolute",
-	    "transform": "translateY(0) translateZ(0)"
-	  }
-	}
-
-/***/ },
-/* 69 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	    data: function () {return {
-	        step: 0,
-	        count: 0,
-	        index: 1,
-	        duration: 0,
-	        interval: 0,
-	        outofview: false
-	    }},
-	    ready: function ready() {
-	        if (this.interval > 0 && this.step > 0 && this.duration > 0) {
-	            this.nextTick();
-	        }
-	    },
-	    methods: {
-	        nextTick: function nextTick() {
-	            var self = this;
-	            if (this.outofview) {
-	                setTimeout(self.nextTick.bind(self), self.interval);
-	            } else {
-	                setTimeout(function () {
-	                    self.animation(self.nextTick.bind(self));
-	                }, self.interval);
-	            }
-	        },
-	        animation: function animation(cb) {
-	            var self = this;
-	            var offset = -self.step * self.index;
-	            var $animation = __weex_require__('@weex-module/animation');
-	            $animation.transition(this.$el('anim'), {
-	                styles: {
-	                    transform: 'translateY(' + String(offset) + 'px) translateZ(0)'
-	                },
-	                timingFunction: 'ease',
-	                duration: self.duration
-	            }, function () {
-	                self.index = (self.index + 1) % self.count;
-	                self.$emit('change', {
-	                    index: self.index,
-	                    count: self.count
-	                });
-	                cb && cb();
-	            });
-	        },
-	        appeared: function appeared() {
-	            this.outofview = false;
-	        },
-	        disappeared: function disappeared() {
-	            this.outofview = true;
-	        }
-	    }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 70 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(71)
-	var __weex_style__ = __webpack_require__(72)
-	var __weex_script__ = __webpack_require__(73)
-
-	__weex_define__('@weex-component/wxc-navbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 71 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "container"
-	  ],
-	  "style": {
-	    "height": function () {return this.height},
-	    "backgroundColor": function () {return this.backgroundColor}
-	  },
-	  "attr": {
-	    "dataRole": function () {return this.dataRole}
-	  },
-	  "children": [
-	    {
-	      "type": "text",
-	      "classList": [
-	        "right-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.rightItemColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "right",
-	        "value": function () {return this.rightItemTitle}
-	      },
-	      "shown": function () {return !this.rightItemSrc},
-	      "events": {
-	        "click": "onclickrightitem"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "right-image"
-	      ],
-	      "attr": {
-	        "naviItemPosition": "right",
-	        "src": function () {return this.rightItemSrc}
-	      },
-	      "shown": function () {return this.rightItemSrc},
-	      "events": {
-	        "click": "onclickrightitem"
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "left-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.leftItemColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "left",
-	        "value": function () {return this.leftItemTitle}
-	      },
-	      "shown": function () {return !this.leftItemSrc},
-	      "events": {
-	        "click": "onclickleftitem"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "left-image"
-	      ],
-	      "attr": {
-	        "naviItemPosition": "left",
-	        "src": function () {return this.leftItemSrc}
-	      },
-	      "shown": function () {return this.leftItemSrc},
-	      "events": {
-	        "click": "onclickleftitem"
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "center-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.titleColor}
-	      },
-	      "attr": {
-	        "naviItemPosition": "center",
-	        "value": function () {return this.title}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 72 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "container": {
-	    "flexDirection": "row",
-	    "position": "fixed",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "width": 750
-	  },
-	  "right-text": {
-	    "position": "absolute",
-	    "bottom": 28,
-	    "right": 32,
-	    "textAlign": "right",
-	    "fontSize": 32,
-	    "fontFamily": "'Open Sans', sans-serif"
-	  },
-	  "left-text": {
-	    "position": "absolute",
-	    "bottom": 28,
-	    "left": 32,
-	    "textAlign": "left",
-	    "fontSize": 32,
-	    "fontFamily": "'Open Sans', sans-serif"
-	  },
-	  "center-text": {
-	    "position": "absolute",
-	    "bottom": 25,
-	    "left": 172,
-	    "right": 172,
-	    "textAlign": "center",
-	    "fontSize": 36,
-	    "fontWeight": "bold"
-	  },
-	  "left-image": {
-	    "position": "absolute",
-	    "bottom": 20,
-	    "left": 28,
-	    "width": 50,
-	    "height": 50
-	  },
-	  "right-image": {
-	    "position": "absolute",
-	    "bottom": 20,
-	    "right": 28,
-	    "width": 50,
-	    "height": 50
-	  }
-	}
-
-/***/ },
-/* 73 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    dataRole: 'navbar',
-
-	    backgroundColor: 'black',
-
-	    height: 88,
-
-	    title: "",
-
-	    titleColor: 'black',
-
-	    rightItemSrc: '',
-
-	    rightItemTitle: '',
-
-	    rightItemColor: 'black',
-
-	    leftItemSrc: '',
-
-	    leftItemTitle: '',
-
-	    leftItemColor: 'black'
-	  }},
-	  methods: {
-	    onclickrightitem: function onclickrightitem(e) {
-	      this.$dispatch('naviBar.rightItem.click', {});
-	    },
-	    onclickleftitem: function onclickleftitem(e) {
-	      this.$dispatch('naviBar.leftItem.click', {});
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 74 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(70)
-	var __weex_template__ = __webpack_require__(75)
-	var __weex_style__ = __webpack_require__(76)
-	var __weex_script__ = __webpack_require__(77)
-
-	__weex_define__('@weex-component/wxc-navpage', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 75 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrapper"
-	  ],
-	  "children": [
-	    {
-	      "type": "wxc-navbar",
-	      "attr": {
-	        "dataRole": function () {return this.dataRole},
-	        "height": function () {return this.height},
-	        "backgroundColor": function () {return this.backgroundColor},
-	        "title": function () {return this.title},
-	        "titleColor": function () {return this.titleColor},
-	        "leftItemSrc": function () {return this.leftItemSrc},
-	        "leftItemTitle": function () {return this.leftItemTitle},
-	        "leftItemColor": function () {return this.leftItemColor},
-	        "rightItemSrc": function () {return this.rightItemSrc},
-	        "rightItemTitle": function () {return this.rightItemTitle},
-	        "rightItemColor": function () {return this.rightItemColor}
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": [
-	        "wrapper"
-	      ],
-	      "style": {
-	        "marginTop": function () {return this.height}
-	      },
-	      "children": [
-	        {
-	          "type": "content"
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 76 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrapper": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0,
-	    "width": 750
-	  }
-	}
-
-/***/ },
-/* 77 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    dataRole: 'navbar',
-	    backgroundColor: 'black',
-	    height: 88,
-	    title: "",
-	    titleColor: 'black',
-	    rightItemSrc: '',
-	    rightItemTitle: '',
-	    rightItemColor: 'black',
-	    leftItemSrc: '',
-	    leftItemTitle: '',
-	    leftItemColor: 'black'
-	  }}
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 78 */
-/***/ function(module, exports, __webpack_require__) {
-
-	__webpack_require__(79)
-	var __weex_template__ = __webpack_require__(83)
-	var __weex_style__ = __webpack_require__(84)
-	var __weex_script__ = __webpack_require__(85)
-
-	__weex_define__('@weex-component/wxc-tabbar', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 79 */
-/***/ function(module, exports, __webpack_require__) {
-
-	var __weex_template__ = __webpack_require__(80)
-	var __weex_style__ = __webpack_require__(81)
-	var __weex_script__ = __webpack_require__(82)
-
-	__weex_define__('@weex-component/wxc-tabitem', [], function(__weex_require__, __weex_exports__, __weex_module__) {
-
-	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
-	    if (__weex_exports__.__esModule && __weex_exports__.default) {
-	      __weex_module__.exports = __weex_exports__.default
-	    }
-
-	    __weex_module__.exports.template = __weex_template__
-
-	    __weex_module__.exports.style = __weex_style__
-
-	})
-
-
-/***/ },
-/* 80 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "container"
-	  ],
-	  "style": {
-	    "backgroundColor": function () {return this.backgroundColor}
-	  },
-	  "events": {
-	    "click": "onclickitem"
-	  },
-	  "children": [
-	    {
-	      "type": "image",
-	      "classList": [
-	        "top-line"
-	      ],
-	      "attr": {
-	        "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
-	      }
-	    },
-	    {
-	      "type": "image",
-	      "classList": [
-	        "tab-icon"
-	      ],
-	      "attr": {
-	        "src": function () {return this.icon}
-	      }
-	    },
-	    {
-	      "type": "text",
-	      "classList": [
-	        "tab-text"
-	      ],
-	      "style": {
-	        "color": function () {return this.titleColor}
-	      },
-	      "attr": {
-	        "value": function () {return this.title}
-	      }
-	    }
-	  ]
-	}
-
-/***/ },
-/* 81 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "container": {
-	    "flex": 1,
-	    "flexDirection": "column",
-	    "alignItems": "center",
-	    "justifyContent": "center",
-	    "height": 88
-	  },
-	  "top-line": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "height": 2
-	  },
-	  "tab-icon": {
-	    "marginTop": 5,
-	    "width": 40,
-	    "height": 40
-	  },
-	  "tab-text": {
-	    "marginTop": 5,
-	    "textAlign": "center",
-	    "fontSize": 20
-	  }
-	}
-
-/***/ },
-/* 82 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    index: 0,
-	    title: '',
-	    titleColor: '#000000',
-	    icon: '',
-	    backgroundColor: '#ffffff'
-	  }},
-	  methods: {
-	    onclickitem: function onclickitem(e) {
-	      var vm = this;
-	      var params = {
-	        index: vm.index
-	      };
-	      vm.$dispatch('tabItem.onClick', params);
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
-/* 83 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "type": "div",
-	  "classList": [
-	    "wrapper"
-	  ],
-	  "children": [
-	    {
-	      "type": "embed",
-	      "classList": [
-	        "content"
-	      ],
-	      "style": {
-	        "visibility": function () {return this.visibility}
-	      },
-	      "repeat": function () {return this.tabItems},
-	      "attr": {
-	        "src": function () {return this.src},
-	        "type": "weex"
-	      }
-	    },
-	    {
-	      "type": "div",
-	      "classList": [
-	        "tabbar"
-	      ],
-	      "append": "tree",
-	      "children": [
-	        {
-	          "type": "wxc-tabitem",
-	          "repeat": function () {return this.tabItems},
-	          "attr": {
-	            "index": function () {return this.index},
-	            "icon": function () {return this.icon},
-	            "title": function () {return this.title},
-	            "titleColor": function () {return this.titleColor}
-	          }
-	        }
-	      ]
-	    }
-	  ]
-	}
-
-/***/ },
-/* 84 */
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "wrapper": {
-	    "width": 750,
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0
-	  },
-	  "content": {
-	    "position": "absolute",
-	    "top": 0,
-	    "left": 0,
-	    "right": 0,
-	    "bottom": 0,
-	    "marginTop": 0,
-	    "marginBottom": 88
-	  },
-	  "tabbar": {
-	    "flexDirection": "row",
-	    "position": "fixed",
-	    "bottom": 0,
-	    "left": 0,
-	    "right": 0,
-	    "height": 88
-	  }
-	}
-
-/***/ },
-/* 85 */
-/***/ function(module, exports) {
-
-	module.exports = function(module, exports, __weex_require__){'use strict';
-
-	module.exports = {
-	  data: function () {return {
-	    tabItems: [],
-	    selectedIndex: 0,
-	    selectedColor: '#ff0000',
-	    unselectedColor: '#000000'
-	  }},
-	  created: function created() {
-	    this.selected(this.selectedIndex);
-
-	    this.$on('tabItem.onClick', function (e) {
-	      var detail = e.detail;
-	      this.selectedIndex = detail.index;
-	      this.selected(detail.index);
-
-	      var params = {
-	        index: detail.index
-	      };
-	      this.$dispatch('tabBar.onClick', params);
-	    });
-	  },
-	  methods: {
-	    selected: function selected(index) {
-	      for (var i = 0; i < this.tabItems.length; i++) {
-	        var tabItem = this.tabItems[i];
-	        if (i == index) {
-	          tabItem.icon = tabItem.selectedImage;
-	          tabItem.titleColor = this.selectedColor;
-	          tabItem.visibility = 'visible';
-	        } else {
-	          tabItem.icon = tabItem.image;
-	          tabItem.titleColor = this.unselectedColor;
-	          tabItem.visibility = 'hidden';
-	        }
-	      }
-	    }
-	  }
-	};}
-	/* generated by weex-loader */
-
-
-/***/ },
+/* 66 */,
+/* 67 */,
+/* 68 */,
+/* 69 */,
+/* 70 */,
+/* 71 */,
+/* 72 */,
+/* 73 */,
+/* 74 */,
+/* 75 */,
+/* 76 */,
+/* 77 */,
+/* 78 */,
+/* 79 */,
+/* 80 */,
+/* 81 */,
+/* 82 */,
+/* 83 */,
+/* 84 */,
+/* 85 */,
 /* 86 */,
 /* 87 */,
 /* 88 */,
@@ -2056,41 +590,844 @@
 /* 112 */,
 /* 113 */,
 /* 114 */,
-/* 115 */,
-/* 116 */,
-/* 117 */,
-/* 118 */,
-/* 119 */,
-/* 120 */,
-/* 121 */,
-/* 122 */,
-/* 123 */,
-/* 124 */,
-/* 125 */,
-/* 126 */,
-/* 127 */,
-/* 128 */,
-/* 129 */,
-/* 130 */,
-/* 131 */,
-/* 132 */,
-/* 133 */,
-/* 134 */,
-/* 135 */,
-/* 136 */,
-/* 137 */,
-/* 138 */,
-/* 139 */,
-/* 140 */,
-/* 141 */,
-/* 142 */,
-/* 143 */,
-/* 144 */,
-/* 145 */,
-/* 146 */,
-/* 147 */,
-/* 148 */,
-/* 149 */,
+/* 115 */
+/***/ function(module, exports, __webpack_require__) {
+
+	"use strict";
+
+	exports.__esModule = true;
+
+	var _iterator = __webpack_require__(116);
+
+	var _iterator2 = _interopRequireDefault(_iterator);
+
+	var _symbol = __webpack_require__(136);
+
+	var _symbol2 = _interopRequireDefault(_symbol);
+
+	var _typeof = typeof _symbol2.default === "function" && typeof _iterator2.default === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj; };
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+	exports.default = typeof _symbol2.default === "function" && _typeof(_iterator2.default) === "symbol" ? function (obj) {
+	  return typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	} : function (obj) {
+	  return obj && typeof _symbol2.default === "function" && obj.constructor === _symbol2.default && obj !== _symbol2.default.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
+	};
+
+/***/ },
+/* 116 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(117), __esModule: true };
+
+/***/ },
+/* 117 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(118);
+	__webpack_require__(131);
+	module.exports = __webpack_require__(135).f('iterator');
+
+/***/ },
+/* 118 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var $at  = __webpack_require__(119)(true);
+
+	// 21.1.3.27 String.prototype[@@iterator]()
+	__webpack_require__(120)(String, 'String', function(iterated){
+	  this._t = String(iterated); // target
+	  this._i = 0;                // next index
+	// 21.1.5.2.1 %StringIteratorPrototype%.next()
+	}, function(){
+	  var O     = this._t
+	    , index = this._i
+	    , point;
+	  if(index >= O.length)return {value: undefined, done: true};
+	  point = $at(O, index);
+	  this._i += point.length;
+	  return {value: point, done: false};
+	});
+
+/***/ },
+/* 119 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var toInteger = __webpack_require__(57)
+	  , defined   = __webpack_require__(54);
+	// true  -> String#at
+	// false -> String#codePointAt
+	module.exports = function(TO_STRING){
+	  return function(that, pos){
+	    var s = String(defined(that))
+	      , i = toInteger(pos)
+	      , l = s.length
+	      , a, b;
+	    if(i < 0 || i >= l)return TO_STRING ? '' : undefined;
+	    a = s.charCodeAt(i);
+	    return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff
+	      ? TO_STRING ? s.charAt(i) : a
+	      : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;
+	  };
+	};
+
+/***/ },
+/* 120 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var LIBRARY        = __webpack_require__(121)
+	  , $export        = __webpack_require__(32)
+	  , redefine       = __webpack_require__(122)
+	  , hide           = __webpack_require__(37)
+	  , has            = __webpack_require__(50)
+	  , Iterators      = __webpack_require__(123)
+	  , $iterCreate    = __webpack_require__(124)
+	  , setToStringTag = __webpack_require__(128)
+	  , getPrototypeOf = __webpack_require__(130)
+	  , ITERATOR       = __webpack_require__(129)('iterator')
+	  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
+	  , FF_ITERATOR    = '@@iterator'
+	  , KEYS           = 'keys'
+	  , VALUES         = 'values';
+
+	var returnThis = function(){ return this; };
+
+	module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){
+	  $iterCreate(Constructor, NAME, next);
+	  var getMethod = function(kind){
+	    if(!BUGGY && kind in proto)return proto[kind];
+	    switch(kind){
+	      case KEYS: return function keys(){ return new Constructor(this, kind); };
+	      case VALUES: return function values(){ return new Constructor(this, kind); };
+	    } return function entries(){ return new Constructor(this, kind); };
+	  };
+	  var TAG        = NAME + ' Iterator'
+	    , DEF_VALUES = DEFAULT == VALUES
+	    , VALUES_BUG = false
+	    , proto      = Base.prototype
+	    , $native    = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT]
+	    , $default   = $native || getMethod(DEFAULT)
+	    , $entries   = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined
+	    , $anyNative = NAME == 'Array' ? proto.entries || $native : $native
+	    , methods, key, IteratorPrototype;
+	  // Fix native
+	  if($anyNative){
+	    IteratorPrototype = getPrototypeOf($anyNative.call(new Base));
+	    if(IteratorPrototype !== Object.prototype){
+	      // Set @@toStringTag to native iterators
+	      setToStringTag(IteratorPrototype, TAG, true);
+	      // fix for some old engines
+	      if(!LIBRARY && !has(IteratorPrototype, ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis);
+	    }
+	  }
+	  // fix Array#{values, @@iterator}.name in V8 / FF
+	  if(DEF_VALUES && $native && $native.name !== VALUES){
+	    VALUES_BUG = true;
+	    $default = function values(){ return $native.call(this); };
+	  }
+	  // Define iterator
+	  if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){
+	    hide(proto, ITERATOR, $default);
+	  }
+	  // Plug for library
+	  Iterators[NAME] = $default;
+	  Iterators[TAG]  = returnThis;
+	  if(DEFAULT){
+	    methods = {
+	      values:  DEF_VALUES ? $default : getMethod(VALUES),
+	      keys:    IS_SET     ? $default : getMethod(KEYS),
+	      entries: $entries
+	    };
+	    if(FORCED)for(key in methods){
+	      if(!(key in proto))redefine(proto, key, methods[key]);
+	    } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);
+	  }
+	  return methods;
+	};
+
+/***/ },
+/* 121 */
+/***/ function(module, exports) {
+
+	module.exports = true;
+
+/***/ },
+/* 122 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(37);
+
+/***/ },
+/* 123 */
+/***/ function(module, exports) {
+
+	module.exports = {};
+
+/***/ },
+/* 124 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var create         = __webpack_require__(125)
+	  , descriptor     = __webpack_require__(46)
+	  , setToStringTag = __webpack_require__(128)
+	  , IteratorPrototype = {};
+
+	// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+	__webpack_require__(37)(IteratorPrototype, __webpack_require__(129)('iterator'), function(){ return this; });
+
+	module.exports = function(Constructor, NAME, next){
+	  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
+	  setToStringTag(Constructor, NAME + ' Iterator');
+	};
+
+/***/ },
+/* 125 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
+	var anObject    = __webpack_require__(39)
+	  , dPs         = __webpack_require__(126)
+	  , enumBugKeys = __webpack_require__(62)
+	  , IE_PROTO    = __webpack_require__(59)('IE_PROTO')
+	  , Empty       = function(){ /* empty */ }
+	  , PROTOTYPE   = 'prototype';
+
+	// Create object with fake `null` prototype: use iframe Object with cleared prototype
+	var createDict = function(){
+	  // Thrash, waste and sodomy: IE GC bug
+	  var iframe = __webpack_require__(44)('iframe')
+	    , i      = enumBugKeys.length
+	    , lt     = '<'
+	    , gt     = '>'
+	    , iframeDocument;
+	  iframe.style.display = 'none';
+	  __webpack_require__(127).appendChild(iframe);
+	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
+	  // createDict = iframe.contentWindow.Object;
+	  // html.removeChild(iframe);
+	  iframeDocument = iframe.contentWindow.document;
+	  iframeDocument.open();
+	  iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);
+	  iframeDocument.close();
+	  createDict = iframeDocument.F;
+	  while(i--)delete createDict[PROTOTYPE][enumBugKeys[i]];
+	  return createDict();
+	};
+
+	module.exports = Object.create || function create(O, Properties){
+	  var result;
+	  if(O !== null){
+	    Empty[PROTOTYPE] = anObject(O);
+	    result = new Empty;
+	    Empty[PROTOTYPE] = null;
+	    // add "__proto__" for Object.getPrototypeOf polyfill
+	    result[IE_PROTO] = O;
+	  } else result = createDict();
+	  return Properties === undefined ? result : dPs(result, Properties);
+	};
+
+
+/***/ },
+/* 126 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var dP       = __webpack_require__(38)
+	  , anObject = __webpack_require__(39)
+	  , getKeys  = __webpack_require__(48);
+
+	module.exports = __webpack_require__(42) ? Object.defineProperties : function defineProperties(O, Properties){
+	  anObject(O);
+	  var keys   = getKeys(Properties)
+	    , length = keys.length
+	    , i = 0
+	    , P;
+	  while(length > i)dP.f(O, P = keys[i++], Properties[P]);
+	  return O;
+	};
+
+/***/ },
+/* 127 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = __webpack_require__(33).document && document.documentElement;
+
+/***/ },
+/* 128 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var def = __webpack_require__(38).f
+	  , has = __webpack_require__(50)
+	  , TAG = __webpack_require__(129)('toStringTag');
+
+	module.exports = function(it, tag, stat){
+	  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
+	};
+
+/***/ },
+/* 129 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var store      = __webpack_require__(60)('wks')
+	  , uid        = __webpack_require__(61)
+	  , Symbol     = __webpack_require__(33).Symbol
+	  , USE_SYMBOL = typeof Symbol == 'function';
+
+	var $exports = module.exports = function(name){
+	  return store[name] || (store[name] =
+	    USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));
+	};
+
+	$exports.store = store;
+
+/***/ },
+/* 130 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
+	var has         = __webpack_require__(50)
+	  , toObject    = __webpack_require__(65)
+	  , IE_PROTO    = __webpack_require__(59)('IE_PROTO')
+	  , ObjectProto = Object.prototype;
+
+	module.exports = Object.getPrototypeOf || function(O){
+	  O = toObject(O);
+	  if(has(O, IE_PROTO))return O[IE_PROTO];
+	  if(typeof O.constructor == 'function' && O instanceof O.constructor){
+	    return O.constructor.prototype;
+	  } return O instanceof Object ? ObjectProto : null;
+	};
+
+/***/ },
+/* 131 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(132);
+	var global        = __webpack_require__(33)
+	  , hide          = __webpack_require__(37)
+	  , Iterators     = __webpack_require__(123)
+	  , TO_STRING_TAG = __webpack_require__(129)('toStringTag');
+
+	for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
+	  var NAME       = collections[i]
+	    , Collection = global[NAME]
+	    , proto      = Collection && Collection.prototype;
+	  if(proto && !proto[TO_STRING_TAG])hide(proto, TO_STRING_TAG, NAME);
+	  Iterators[NAME] = Iterators.Array;
+	}
+
+/***/ },
+/* 132 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	var addToUnscopables = __webpack_require__(133)
+	  , step             = __webpack_require__(134)
+	  , Iterators        = __webpack_require__(123)
+	  , toIObject        = __webpack_require__(51);
+
+	// 22.1.3.4 Array.prototype.entries()
+	// 22.1.3.13 Array.prototype.keys()
+	// 22.1.3.29 Array.prototype.values()
+	// 22.1.3.30 Array.prototype[@@iterator]()
+	module.exports = __webpack_require__(120)(Array, 'Array', function(iterated, kind){
+	  this._t = toIObject(iterated); // target
+	  this._i = 0;                   // next index
+	  this._k = kind;                // kind
+	// 22.1.5.2.1 %ArrayIteratorPrototype%.next()
+	}, function(){
+	  var O     = this._t
+	    , kind  = this._k
+	    , index = this._i++;
+	  if(!O || index >= O.length){
+	    this._t = undefined;
+	    return step(1);
+	  }
+	  if(kind == 'keys'  )return step(0, index);
+	  if(kind == 'values')return step(0, O[index]);
+	  return step(0, [index, O[index]]);
+	}, 'values');
+
+	// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)
+	Iterators.Arguments = Iterators.Array;
+
+	addToUnscopables('keys');
+	addToUnscopables('values');
+	addToUnscopables('entries');
+
+/***/ },
+/* 133 */
+/***/ function(module, exports) {
+
+	module.exports = function(){ /* empty */ };
+
+/***/ },
+/* 134 */
+/***/ function(module, exports) {
+
+	module.exports = function(done, value){
+	  return {value: value, done: !!done};
+	};
+
+/***/ },
+/* 135 */
+/***/ function(module, exports, __webpack_require__) {
+
+	exports.f = __webpack_require__(129);
+
+/***/ },
+/* 136 */
+/***/ function(module, exports, __webpack_require__) {
+
+	module.exports = { "default": __webpack_require__(137), __esModule: true };
+
+/***/ },
+/* 137 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(138);
+	__webpack_require__(147);
+	__webpack_require__(148);
+	__webpack_require__(149);
+	module.exports = __webpack_require__(34).Symbol;
+
+/***/ },
+/* 138 */
+/***/ function(module, exports, __webpack_require__) {
+
+	'use strict';
+	// ECMAScript 6 symbols shim
+	var global         = __webpack_require__(33)
+	  , has            = __webpack_require__(50)
+	  , DESCRIPTORS    = __webpack_require__(42)
+	  , $export        = __webpack_require__(32)
+	  , redefine       = __webpack_require__(122)
+	  , META           = __webpack_require__(139).KEY
+	  , $fails         = __webpack_require__(43)
+	  , shared         = __webpack_require__(60)
+	  , setToStringTag = __webpack_require__(128)
+	  , uid            = __webpack_require__(61)
+	  , wks            = __webpack_require__(129)
+	  , wksExt         = __webpack_require__(135)
+	  , wksDefine      = __webpack_require__(140)
+	  , keyOf          = __webpack_require__(141)
+	  , enumKeys       = __webpack_require__(142)
+	  , isArray        = __webpack_require__(143)
+	  , anObject       = __webpack_require__(39)
+	  , toIObject      = __webpack_require__(51)
+	  , toPrimitive    = __webpack_require__(45)
+	  , createDesc     = __webpack_require__(46)
+	  , _create        = __webpack_require__(125)
+	  , gOPNExt        = __webpack_require__(144)
+	  , $GOPD          = __webpack_require__(146)
+	  , $DP            = __webpack_require__(38)
+	  , $keys          = __webpack_require__(48)
+	  , gOPD           = $GOPD.f
+	  , dP             = $DP.f
+	  , gOPN           = gOPNExt.f
+	  , $Symbol        = global.Symbol
+	  , $JSON          = global.JSON
+	  , _stringify     = $JSON && $JSON.stringify
+	  , PROTOTYPE      = 'prototype'
+	  , HIDDEN         = wks('_hidden')
+	  , TO_PRIMITIVE   = wks('toPrimitive')
+	  , isEnum         = {}.propertyIsEnumerable
+	  , SymbolRegistry = shared('symbol-registry')
+	  , AllSymbols     = shared('symbols')
+	  , OPSymbols      = shared('op-symbols')
+	  , ObjectProto    = Object[PROTOTYPE]
+	  , USE_NATIVE     = typeof $Symbol == 'function'
+	  , QObject        = global.QObject;
+	// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173
+	var setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;
+
+	// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687
+	var setSymbolDesc = DESCRIPTORS && $fails(function(){
+	  return _create(dP({}, 'a', {
+	    get: function(){ return dP(this, 'a', {value: 7}).a; }
+	  })).a != 7;
+	}) ? function(it, key, D){
+	  var protoDesc = gOPD(ObjectProto, key);
+	  if(protoDesc)delete ObjectProto[key];
+	  dP(it, key, D);
+	  if(protoDesc && it !== ObjectProto)dP(ObjectProto, key, protoDesc);
+	} : dP;
+
+	var wrap = function(tag){
+	  var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);
+	  sym._k = tag;
+	  return sym;
+	};
+
+	var isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function(it){
+	  return typeof it == 'symbol';
+	} : function(it){
+	  return it instanceof $Symbol;
+	};
+
+	var $defineProperty = function defineProperty(it, key, D){
+	  if(it === ObjectProto)$defineProperty(OPSymbols, key, D);
+	  anObject(it);
+	  key = toPrimitive(key, true);
+	  anObject(D);
+	  if(has(AllSymbols, key)){
+	    if(!D.enumerable){
+	      if(!has(it, HIDDEN))dP(it, HIDDEN, createDesc(1, {}));
+	      it[HIDDEN][key] = true;
+	    } else {
+	      if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false;
+	      D = _create(D, {enumerable: createDesc(0, false)});
+	    } return setSymbolDesc(it, key, D);
+	  } return dP(it, key, D);
+	};
+	var $defineProperties = function defineProperties(it, P){
+	  anObject(it);
+	  var keys = enumKeys(P = toIObject(P))
+	    , i    = 0
+	    , l = keys.length
+	    , key;
+	  while(l > i)$defineProperty(it, key = keys[i++], P[key]);
+	  return it;
+	};
+	var $create = function create(it, P){
+	  return P === undefined ? _create(it) : $defineProperties(_create(it), P);
+	};
+	var $propertyIsEnumerable = function propertyIsEnumerable(key){
+	  var E = isEnum.call(this, key = toPrimitive(key, true));
+	  if(this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return false;
+	  return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;
+	};
+	var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){
+	  it  = toIObject(it);
+	  key = toPrimitive(key, true);
+	  if(it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key))return;
+	  var D = gOPD(it, key);
+	  if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true;
+	  return D;
+	};
+	var $getOwnPropertyNames = function getOwnPropertyNames(it){
+	  var names  = gOPN(toIObject(it))
+	    , result = []
+	    , i      = 0
+	    , key;
+	  while(names.length > i){
+	    if(!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META)result.push(key);
+	  } return result;
+	};
+	var $getOwnPropertySymbols = function getOwnPropertySymbols(it){
+	  var IS_OP  = it === ObjectProto
+	    , names  = gOPN(IS_OP ? OPSymbols : toIObject(it))
+	    , result = []
+	    , i      = 0
+	    , key;
+	  while(names.length > i){
+	    if(has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true))result.push(AllSymbols[key]);
+	  } return result;
+	};
+
+	// 19.4.1.1 Symbol([description])
+	if(!USE_NATIVE){
+	  $Symbol = function Symbol(){
+	    if(this instanceof $Symbol)throw TypeError('Symbol is not a constructor!');
+	    var tag = uid(arguments.length > 0 ? arguments[0] : undefined);
+	    var $set = function(value){
+	      if(this === ObjectProto)$set.call(OPSymbols, value);
+	      if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false;
+	      setSymbolDesc(this, tag, createDesc(1, value));
+	    };
+	    if(DESCRIPTORS && setter)setSymbolDesc(ObjectProto, tag, {configurable: true, set: $set});
+	    return wrap(tag);
+	  };
+	  redefine($Symbol[PROTOTYPE], 'toString', function toString(){
+	    return this._k;
+	  });
+
+	  $GOPD.f = $getOwnPropertyDescriptor;
+	  $DP.f   = $defineProperty;
+	  __webpack_require__(145).f = gOPNExt.f = $getOwnPropertyNames;
+	  __webpack_require__(64).f  = $propertyIsEnumerable;
+	  __webpack_require__(63).f = $getOwnPropertySymbols;
+
+	  if(DESCRIPTORS && !__webpack_require__(121)){
+	    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
+	  }
+
+	  wksExt.f = function(name){
+	    return wrap(wks(name));
+	  }
+	}
+
+	$export($export.G + $export.W + $export.F * !USE_NATIVE, {Symbol: $Symbol});
+
+	for(var symbols = (
+	  // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14
+	  'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'
+	).split(','), i = 0; symbols.length > i; )wks(symbols[i++]);
+
+	for(var symbols = $keys(wks.store), i = 0; symbols.length > i; )wksDefine(symbols[i++]);
+
+	$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {
+	  // 19.4.2.1 Symbol.for(key)
+	  'for': function(key){
+	    return has(SymbolRegistry, key += '')
+	      ? SymbolRegistry[key]
+	      : SymbolRegistry[key] = $Symbol(key);
+	  },
+	  // 19.4.2.5 Symbol.keyFor(sym)
+	  keyFor: function keyFor(key){
+	    if(isSymbol(key))return keyOf(SymbolRegistry, key);
+	    throw TypeError(key + ' is not a symbol!');
+	  },
+	  useSetter: function(){ setter = true; },
+	  useSimple: function(){ setter = false; }
+	});
+
+	$export($export.S + $export.F * !USE_NATIVE, 'Object', {
+	  // 19.1.2.2 Object.create(O [, Properties])
+	  create: $create,
+	  // 19.1.2.4 Object.defineProperty(O, P, Attributes)
+	  defineProperty: $defineProperty,
+	  // 19.1.2.3 Object.defineProperties(O, Properties)
+	  defineProperties: $defineProperties,
+	  // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)
+	  getOwnPropertyDescriptor: $getOwnPropertyDescriptor,
+	  // 19.1.2.7 Object.getOwnPropertyNames(O)
+	  getOwnPropertyNames: $getOwnPropertyNames,
+	  // 19.1.2.8 Object.getOwnPropertySymbols(O)
+	  getOwnPropertySymbols: $getOwnPropertySymbols
+	});
+
+	// 24.3.2 JSON.stringify(value [, replacer [, space]])
+	$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function(){
+	  var S = $Symbol();
+	  // MS Edge converts symbol values to JSON as {}
+	  // WebKit converts symbol values to JSON as null
+	  // V8 throws on boxed symbols
+	  return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}';
+	})), 'JSON', {
+	  stringify: function stringify(it){
+	    if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined
+	    var args = [it]
+	      , i    = 1
+	      , replacer, $replacer;
+	    while(arguments.length > i)args.push(arguments[i++]);
+	    replacer = args[1];
+	    if(typeof replacer == 'function')$replacer = replacer;
+	    if($replacer || !isArray(replacer))replacer = function(key, value){
+	      if($replacer)value = $replacer.call(this, key, value);
+	      if(!isSymbol(value))return value;
+	    };
+	    args[1] = replacer;
+	    return _stringify.apply($JSON, args);
+	  }
+	});
+
+	// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)
+	$Symbol[PROTOTYPE][TO_PRIMITIVE] || __webpack_require__(37)($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);
+	// 19.4.3.5 Symbol.prototype[@@toStringTag]
+	setToStringTag($Symbol, 'Symbol');
+	// 20.2.1.9 Math[@@toStringTag]
+	setToStringTag(Math, 'Math', true);
+	// 24.3.3 JSON[@@toStringTag]
+	setToStringTag(global.JSON, 'JSON', true);
+
+/***/ },
+/* 139 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var META     = __webpack_require__(61)('meta')
+	  , isObject = __webpack_require__(40)
+	  , has      = __webpack_require__(50)
+	  , setDesc  = __webpack_require__(38).f
+	  , id       = 0;
+	var isExtensible = Object.isExtensible || function(){
+	  return true;
+	};
+	var FREEZE = !__webpack_require__(43)(function(){
+	  return isExtensible(Object.preventExtensions({}));
+	});
+	var setMeta = function(it){
+	  setDesc(it, META, {value: {
+	    i: 'O' + ++id, // object ID
+	    w: {}          // weak collections IDs
+	  }});
+	};
+	var fastKey = function(it, create){
+	  // return primitive with prefix
+	  if(!isObject(it))return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;
+	  if(!has(it, META)){
+	    // can't set metadata to uncaught frozen object
+	    if(!isExtensible(it))return 'F';
+	    // not necessary to add metadata
+	    if(!create)return 'E';
+	    // add missing metadata
+	    setMeta(it);
+	  // return object ID
+	  } return it[META].i;
+	};
+	var getWeak = function(it, create){
+	  if(!has(it, META)){
+	    // can't set metadata to uncaught frozen object
+	    if(!isExtensible(it))return true;
+	    // not necessary to add metadata
+	    if(!create)return false;
+	    // add missing metadata
+	    setMeta(it);
+	  // return hash weak collections IDs
+	  } return it[META].w;
+	};
+	// add metadata on freeze-family methods calling
+	var onFreeze = function(it){
+	  if(FREEZE && meta.NEED && isExtensible(it) && !has(it, META))setMeta(it);
+	  return it;
+	};
+	var meta = module.exports = {
+	  KEY:      META,
+	  NEED:     false,
+	  fastKey:  fastKey,
+	  getWeak:  getWeak,
+	  onFreeze: onFreeze
+	};
+
+/***/ },
+/* 140 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var global         = __webpack_require__(33)
+	  , core           = __webpack_require__(34)
+	  , LIBRARY        = __webpack_require__(121)
+	  , wksExt         = __webpack_require__(135)
+	  , defineProperty = __webpack_require__(38).f;
+	module.exports = function(name){
+	  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
+	  if(name.charAt(0) != '_' && !(name in $Symbol))defineProperty($Symbol, name, {value: wksExt.f(name)});
+	};
+
+/***/ },
+/* 141 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var getKeys   = __webpack_require__(48)
+	  , toIObject = __webpack_require__(51);
+	module.exports = function(object, el){
+	  var O      = toIObject(object)
+	    , keys   = getKeys(O)
+	    , length = keys.length
+	    , index  = 0
+	    , key;
+	  while(length > index)if(O[key = keys[index++]] === el)return key;
+	};
+
+/***/ },
+/* 142 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// all enumerable object keys, includes symbols
+	var getKeys = __webpack_require__(48)
+	  , gOPS    = __webpack_require__(63)
+	  , pIE     = __webpack_require__(64);
+	module.exports = function(it){
+	  var result     = getKeys(it)
+	    , getSymbols = gOPS.f;
+	  if(getSymbols){
+	    var symbols = getSymbols(it)
+	      , isEnum  = pIE.f
+	      , i       = 0
+	      , key;
+	    while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))result.push(key);
+	  } return result;
+	};
+
+/***/ },
+/* 143 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 7.2.2 IsArray(argument)
+	var cof = __webpack_require__(53);
+	module.exports = Array.isArray || function isArray(arg){
+	  return cof(arg) == 'Array';
+	};
+
+/***/ },
+/* 144 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+	var toIObject = __webpack_require__(51)
+	  , gOPN      = __webpack_require__(145).f
+	  , toString  = {}.toString;
+
+	var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+	  ? Object.getOwnPropertyNames(window) : [];
+
+	var getWindowNames = function(it){
+	  try {
+	    return gOPN(it);
+	  } catch(e){
+	    return windowNames.slice();
+	  }
+	};
+
+	module.exports.f = function getOwnPropertyNames(it){
+	  return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));
+	};
+
+
+/***/ },
+/* 145 */
+/***/ function(module, exports, __webpack_require__) {
+
+	// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
+	var $keys      = __webpack_require__(49)
+	  , hiddenKeys = __webpack_require__(62).concat('length', 'prototype');
+
+	exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O){
+	  return $keys(O, hiddenKeys);
+	};
+
+/***/ },
+/* 146 */
+/***/ function(module, exports, __webpack_require__) {
+
+	var pIE            = __webpack_require__(64)
+	  , createDesc     = __webpack_require__(46)
+	  , toIObject      = __webpack_require__(51)
+	  , toPrimitive    = __webpack_require__(45)
+	  , has            = __webpack_require__(50)
+	  , IE8_DOM_DEFINE = __webpack_require__(41)
+	  , gOPD           = Object.getOwnPropertyDescriptor;
+
+	exports.f = __webpack_require__(42) ? gOPD : function getOwnPropertyDescriptor(O, P){
+	  O = toIObject(O);
+	  P = toPrimitive(P, true);
+	  if(IE8_DOM_DEFINE)try {
+	    return gOPD(O, P);
+	  } catch(e){ /* empty */ }
+	  if(has(O, P))return createDesc(!pIE.f.call(O, P), O[P]);
+	};
+
+/***/ },
+/* 147 */
+/***/ function(module, exports) {
+
+	
+
+/***/ },
+/* 148 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(140)('asyncIterator');
+
+/***/ },
+/* 149 */
+/***/ function(module, exports, __webpack_require__) {
+
+	__webpack_require__(140)('observable');
+
+/***/ },
 /* 150 */,
 /* 151 */,
 /* 152 */,
@@ -2167,20 +1504,53 @@
 /* 223 */,
 /* 224 */,
 /* 225 */,
-/* 226 */
+/* 226 */,
+/* 227 */,
+/* 228 */,
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */
 /***/ function(module, exports) {
 
 	module.exports = {
 	  "type": "scroller",
 	  "children": [
 	    {
-	      "type": "wxc-panel",
-	      "attr": {
-	        "title": "websocket",
-	        "type": "primary"
-	      },
+	      "type": "div",
 	      "children": [
 	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#286090"
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#FFFFFF"
+	              },
+	              "attr": {
+	                "value": "websocket"
+	              }
+	            }
+	          ]
+	        },
+	        {
 	          "type": "input",
 	          "attr": {
 	            "type": "text",
@@ -2205,129 +1575,247 @@
 	          },
 	          "children": [
 	            {
-	              "type": "wxc-button",
-	              "attr": {
-	                "value": "connect",
-	                "size": "small",
-	                "type": "primary"
-	              },
+	              "type": "text",
+	              "classList": [
+	                "button"
+	              ],
 	              "events": {
 	                "click": "connect"
+	              },
+	              "attr": {
+	                "value": "connect"
 	              }
 	            },
 	            {
-	              "type": "wxc-button",
-	              "attr": {
-	                "value": "send",
-	                "size": "small",
-	                "type": "primary"
-	              },
+	              "type": "text",
+	              "classList": [
+	                "button"
+	              ],
 	              "events": {
 	                "click": "send"
 	              },
-	              "style": {
-	                "marginLeft": 20
+	              "attr": {
+	                "value": "send"
 	              }
 	            },
 	            {
-	              "type": "wxc-button",
-	              "attr": {
-	                "value": "close",
-	                "size": "small",
-	                "type": "primary"
-	              },
+	              "type": "text",
+	              "classList": [
+	                "button"
+	              ],
 	              "events": {
 	                "click": "close"
 	              },
+	              "attr": {
+	                "value": "close"
+	              }
+	            },
+	            {
+	              "type": "text",
+	              "classList": [
+	                "button"
+	              ],
+	              "events": {
+	                "click": "go"
+	              },
+	              "attr": {
+	                "value": "chatroom"
+	              }
+	            }
+	          ]
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3",
+	            "marginTop": 20
+	          },
+	          "children": [
+	            {
+	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
 	              "style": {
-	                "marginLeft": 20
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
+	              "attr": {
+	                "value": "method = send"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 80
+	          },
 	          "attr": {
-	            "title": "method = send"
+	            "value": function () {return this.sendinfo}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3"
 	          },
 	          "children": [
 	            {
 	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
 	              "attr": {
-	                "value": function () {return this.sendinfo}
+	                "value": "method = onopen"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 80
+	          },
 	          "attr": {
-	            "title": "method = onopen"
+	            "value": function () {return this.onopeninfo}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3"
 	          },
 	          "children": [
 	            {
 	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
 	              "attr": {
-	                "value": function () {return this.onopeninfo}
+	                "value": "method = onmessage"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 100
+	          },
 	          "attr": {
-	            "title": "method = onmessage"
+	            "value": function () {return this.onmessage}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3"
 	          },
 	          "children": [
 	            {
 	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
 	              "attr": {
-	                "value": function () {return this.onmessage}
+	                "value": "method = onclose"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 80
+	          },
 	          "attr": {
-	            "title": "method = onclose"
+	            "value": function () {return this.oncloseinfo}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3"
 	          },
 	          "children": [
 	            {
 	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
 	              "attr": {
-	                "value": function () {return this.oncloseinfo}
+	                "value": "method = onerror"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 80
+	          },
 	          "attr": {
-	            "title": "method = onerror"
+	            "value": function () {return this.onerrorinfo}
+	          }
+	        },
+	        {
+	          "type": "div",
+	          "style": {
+	            "backgroundColor": "#D3D3D3"
 	          },
 	          "children": [
 	            {
 	              "type": "text",
+	              "classList": [
+	                "title"
+	              ],
+	              "style": {
+	                "height": 80,
+	                "padding": 20,
+	                "color": "#000000"
+	              },
 	              "attr": {
-	                "value": function () {return this.onerrorinfo}
+	                "value": "method = close"
 	              }
 	            }
 	          ]
 	        },
 	        {
-	          "type": "wxc-panel",
-	          "attr": {
-	            "title": "method = close"
+	          "type": "text",
+	          "style": {
+	            "color": "#000000",
+	            "height": 80
 	          },
-	          "children": [
-	            {
-	              "type": "text",
-	              "attr": {
-	                "value": function () {return this.closeinfo}
-	              }
-	            }
-	          ]
+	          "attr": {
+	            "value": function () {return this.closeinfo}
+	          }
 	        }
 	      ]
 	    }
@@ -2335,7 +1823,7 @@
 	}
 
 /***/ },
-/* 227 */
+/* 242 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2343,64 +1831,123 @@
 	    "fontSize": 40,
 	    "height": 80,
 	    "width": 600
+	  },
+	  "button": {
+	    "fontSize": 30,
+	    "width": 150,
+	    "color": "#41B883",
+	    "textAlign": "center",
+	    "paddingTop": 10,
+	    "paddingBottom": 10,
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "marginRight": 20,
+	    "borderColor": "rgb(162,217,192)",
+	    "backgroundColor": "rgba(162,217,192,0.2)"
 	  }
 	}
 
 /***/ },
-/* 228 */
+/* 243 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(4);
-	var navigator = __weex_require__('@weex-module/navigator');
-	var modal = __weex_require__('@weex-module/modal');
+	var _typeof2 = __webpack_require__(115);
+
+	var _typeof3 = _interopRequireDefault(_typeof2);
+
+	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
 	var websocket = __weex_require__('@weex-module/webSocket');
+	var navigator = __weex_require__('@weex-module/navigator');
 	module.exports = {
-	    data: function () {return {
-	        connectinfo: '',
-	        sendinfo: '',
-	        onopeninfo: '',
-	        onmessage: '',
-	        oncloseinfo: '',
-	        onerrorinfo: '',
-	        closeinfo: '',
-	        txtInput: '',
-	        navBarHeight: 88,
-	        title: 'Navigator',
-	        dir: 'examples',
-	        baseURL: ''
-	    }},
-	    methods: {
-	        connect: function connect() {
-	            websocket.WebSocket('ws://115.29.193.48:8088', '');
-	            var self = this;
-	            websocket.onopen = function (e) {
-	                self.onopeninfo = e;
-	            };
-	            websocket.onmessage = function (e) {
-	                self.onmessage = e.data;
-	            };
-	            websocket.onerror = function (e) {
-	                self.onerrorinfo = e.data;
-	            };
-	            websocket.onclose = function (e) {
-	                self.onerrorinfo = e.code;
-	            };
-	        },
-	        send: function send(e) {
-	            var input = this.$el('input');
-	            input.blur();
-	            websocket.send(this.txtInput);
-	            this.sendinfo = this.txtInput;
-	        },
-	        oninput: function oninput(event) {
-	            this.txtInput = event.value;
-	        },
-	        close: function close(e) {
-	            websocket.close();
-	        }
+	  data: function () {return {
+	    connectinfo: '',
+	    sendinfo: '',
+	    onopeninfo: '',
+	    onmessage: '',
+	    oncloseinfo: '',
+	    onerrorinfo: '',
+	    closeinfo: '',
+	    txtInput: '',
+	    navBarHeight: 88,
+	    title: 'Navigator',
+	    dir: 'examples',
+	    baseURL: ''
+	  }},
+	  created: function created() {
+	    var bundleUrl = this.$getConfig().bundleUrl;
+	    bundleUrl = new String(bundleUrl);
+	    console.log('hit', bundleUrl);
+	    var nativeBase;
+	    var isAndroidAssets = bundleUrl.indexOf('file://assets/') >= 0;
+
+	    var isiOSAssets = bundleUrl.indexOf('file:///') >= 0 && bundleUrl.indexOf('WeexDemo.app') > 0;
+	    if (isAndroidAssets) {
+	      nativeBase = 'file://assets/';
+	    } else if (isiOSAssets) {
+	      nativeBase = bundleUrl.substring(0, bundleUrl.lastIndexOf('/') + 1);
+	    } else {
+	      var host = 'localhost:12580';
+	      var matches = /\/\/([^\/]+?)\//.exec(this.$getConfig().bundleUrl);
+	      if (matches && matches.length >= 2) {
+	        host = matches[1];
+	      }
+	      nativeBase = 'http://' + host + '/' + this.dir + '/build/';
 	    }
+	    var h5Base = bundleUrl;
+
+	    var base = nativeBase;
+	    if ((typeof window === 'undefined' ? 'undefined' : (0, _typeof3.default)(window)) == 'object') {
+	      base = h5Base;
+	    }
+	    this.baseURL = base;
+	  },
+	  methods: {
+
+	    connect: function connect() {
+	      websocket.WebSocket('ws://echo.websocket.org', '');
+	      var self = this;
+	      self.onopeninfo = 'connecting...';
+	      websocket.onopen = function (e) {
+	        self.onopeninfo = 'websocket open';
+	      };
+	      websocket.onmessage = function (e) {
+	        self.onmessage = e.data;
+	      };
+	      websocket.onerror = function (e) {
+	        self.onerrorinfo = e.data;
+	      };
+	      websocket.onclose = function (e) {
+	        self.onopeninfo = '';
+	        self.onerrorinfo = e.code;
+	      };
+	    },
+	    send: function send(e) {
+	      var input = this.$el('input');
+	      input.blur();
+	      websocket.send(this.txtInput);
+	      this.sendinfo = this.txtInput;
+	    },
+	    oninput: function oninput(event) {
+	      this.txtInput = event.value;
+	    },
+	    close: function close(e) {
+	      websocket.close();
+	    },
+	    go: function go(e) {
+	      var vm = this;
+	      if ((typeof window === 'undefined' ? 'undefined' : (0, _typeof3.default)(window)) !== 'object') {
+	        this.baseURL = this.baseURL + 'module/chatroom-demo.js?test=1';
+	      }
+	      var params = {
+	        'url': this.baseURL,
+	        'animated': 'true'
+	      };
+	      navigator.push(params, function () {});
+	    }
+	  }
 	};}
 	/* generated by weex-loader */
 
diff --git a/ios/playground/bundlejs/showcase/boxshadow.js b/ios/playground/bundlejs/showcase/boxshadow.js
new file mode 100644
index 0000000..e1cd50b
--- /dev/null
+++ b/ios/playground/bundlejs/showcase/boxshadow.js
@@ -0,0 +1,269 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __weex_template__ = __webpack_require__(244)
+	var __weex_style__ = __webpack_require__(245)
+	var __weex_script__ = __webpack_require__(246)
+
+	__weex_define__('@weex-component/2b448ff7e01d43a38e2ee57f8aa1d6de', [], function(__weex_require__, __weex_exports__, __weex_module__) {
+
+	    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
+	    if (__weex_exports__.__esModule && __weex_exports__.default) {
+	      __weex_module__.exports = __weex_exports__.default
+	    }
+
+	    __weex_module__.exports.template = __weex_template__
+
+	    __weex_module__.exports.style = __weex_style__
+
+	})
+
+	__weex_bootstrap__('@weex-component/2b448ff7e01d43a38e2ee57f8aa1d6de',undefined,undefined)
+
+/***/ },
+
+/***/ 244:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "type": "div",
+	  "classList": [
+	    "wrapper"
+	  ],
+	  "events": {
+	    "click": "update"
+	  },
+	  "children": [
+	    {
+	      "type": "div",
+	      "style": {
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": function () {return this.bs},
+	        "width": function () {return this.w}
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "marginTop": 80,
+	        "width": 400,
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": "20px  10px 5px rgba(255, 69, 0, 0.8)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "marginTop": 80,
+	        "width": 400,
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": "inset 20px  10px 5px rgba(255, 69, 0, 0.8)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "marginTop": 80,
+	        "width": 400,
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": "inset 20px  10px 5px rgb(255, 69, 0)"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "marginTop": 80,
+	        "width": 400,
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": "20px  10px 5px black"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    },
+	    {
+	      "type": "div",
+	      "style": {
+	        "marginTop": 80,
+	        "width": 400,
+	        "height": 60,
+	        "backgroundColor": "#FFE4C4",
+	        "boxShadow": "20px  10px 5px #008B00"
+	      },
+	      "children": [
+	        {
+	          "type": "text",
+	          "classList": [
+	            "title"
+	          ],
+	          "style": {
+	            "textAlign": "center"
+	          },
+	          "attr": {
+	            "value": function () {return 'Hello ' + (this.target)}
+	          }
+	        }
+	      ]
+	    }
+	  ]
+	}
+
+/***/ },
+
+/***/ 245:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 246:
+/***/ function(module, exports) {
+
+	module.exports = function(module, exports, __weex_require__){'use strict';
+
+	module.exports = {
+	    data: function () {return {
+	        logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	        target: 'World',
+	        w: '400',
+	        bs: '20px  10px  5px rgb(255, 69, 0)'
+	    }},
+	    methods: {
+	        update: function update(e) {
+	            this.target = 'Weex';
+	            this.w = 600;
+	            this.bs = 'inset 20px  10px 5px rgba(0, 0, 0, 0.5)';
+	        }
+	    }
+	};}
+	/* generated by weex-loader */
+
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/showcase/calculator.js b/ios/playground/bundlejs/showcase/calculator.js
index 70c14a0..da75dc9 100644
--- a/ios/playground/bundlejs/showcase/calculator.js
+++ b/ios/playground/bundlejs/showcase/calculator.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(229)
-	var __weex_style__ = __webpack_require__(230)
-	var __weex_script__ = __webpack_require__(231)
+	var __weex_template__ = __webpack_require__(247)
+	var __weex_style__ = __webpack_require__(248)
+	var __weex_script__ = __webpack_require__(249)
 
 	__weex_define__('@weex-component/603eadccfc85e9db6c45c597933fe8fe', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2170,7 +2170,25 @@
 /* 226 */,
 /* 227 */,
 /* 228 */,
-/* 229 */
+/* 229 */,
+/* 230 */,
+/* 231 */,
+/* 232 */,
+/* 233 */,
+/* 234 */,
+/* 235 */,
+/* 236 */,
+/* 237 */,
+/* 238 */,
+/* 239 */,
+/* 240 */,
+/* 241 */,
+/* 242 */,
+/* 243 */,
+/* 244 */,
+/* 245 */,
+/* 246 */,
+/* 247 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2420,7 +2438,7 @@
 	}
 
 /***/ },
-/* 230 */
+/* 248 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2453,7 +2471,7 @@
 	}
 
 /***/ },
-/* 231 */
+/* 249 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/showcase/dropdown/dropdown-demo.js b/ios/playground/bundlejs/showcase/dropdown/dropdown-demo.js
index 3ba57f1..b018ea5 100644
--- a/ios/playground/bundlejs/showcase/dropdown/dropdown-demo.js
+++ b/ios/playground/bundlejs/showcase/dropdown/dropdown-demo.js
@@ -45,10 +45,10 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(232)
-	var __weex_template__ = __webpack_require__(236)
-	var __weex_style__ = __webpack_require__(237)
-	var __weex_script__ = __webpack_require__(238)
+	__webpack_require__(250)
+	var __weex_template__ = __webpack_require__(254)
+	var __weex_style__ = __webpack_require__(255)
+	var __weex_script__ = __webpack_require__(256)
 
 	__weex_define__('@weex-component/f7fd132bdb4ce0ff6745c3887b3163e2', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -75,14 +75,14 @@
 
 /***/ },
 
-/***/ 189:
+/***/ 100:
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
 
 /***/ },
 
-/***/ 190:
+/***/ 101:
 /***/ function(module, exports, __webpack_require__) {
 
 	var core  = __webpack_require__(34)
@@ -93,12 +93,12 @@
 
 /***/ },
 
-/***/ 232:
+/***/ 250:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(233)
-	var __weex_style__ = __webpack_require__(234)
-	var __weex_script__ = __webpack_require__(235)
+	var __weex_template__ = __webpack_require__(251)
+	var __weex_style__ = __webpack_require__(252)
+	var __weex_script__ = __webpack_require__(253)
 
 	__weex_define__('@weex-component/we-dropdown', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 233:
+/***/ 251:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -222,7 +222,7 @@
 
 /***/ },
 
-/***/ 234:
+/***/ 252:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -306,7 +306,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 253:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -404,7 +404,7 @@
 
 /***/ },
 
-/***/ 236:
+/***/ 254:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -502,7 +502,7 @@
 
 /***/ },
 
-/***/ 237:
+/***/ 255:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -575,18 +575,18 @@
 
 /***/ },
 
-/***/ 238:
+/***/ 256:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
 	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
 
-	__webpack_require__(232);
+	__webpack_require__(250);
 
 	var initData = '[{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Closed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSC\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"1\",\"questionStatusValue\":\"Waiting\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSM\"},{\"addTime\":\"2016-07-14\",\"questionStatus\":\"2\",\"questionStatusValue\":\"Confirmed\",\"title\":\"This is a demo\",\"vid\":\"AW5PMSA\"}]';
 
diff --git a/ios/playground/bundlejs/showcase/dropdown/we-dropdown.js b/ios/playground/bundlejs/showcase/dropdown/we-dropdown.js
index 417fbfa..9278e80 100644
--- a/ios/playground/bundlejs/showcase/dropdown/we-dropdown.js
+++ b/ios/playground/bundlejs/showcase/dropdown/we-dropdown.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(233)
-	var __weex_style__ = __webpack_require__(234)
-	var __weex_script__ = __webpack_require__(235)
+	var __weex_template__ = __webpack_require__(251)
+	var __weex_style__ = __webpack_require__(252)
+	var __weex_script__ = __webpack_require__(253)
 
 	__weex_define__('@weex-component/ffbcbcf1bd6120b070f00ceafeb0160e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 233:
+/***/ 251:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -172,7 +172,7 @@
 
 /***/ },
 
-/***/ 234:
+/***/ 252:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -256,7 +256,7 @@
 
 /***/ },
 
-/***/ 235:
+/***/ 253:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/showcase/minesweeper.js b/ios/playground/bundlejs/showcase/minesweeper.js
index 524b80e..88afeda 100644
--- a/ios/playground/bundlejs/showcase/minesweeper.js
+++ b/ios/playground/bundlejs/showcase/minesweeper.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(239)
-	var __weex_style__ = __webpack_require__(240)
-	var __weex_script__ = __webpack_require__(241)
+	var __weex_template__ = __webpack_require__(257)
+	var __weex_style__ = __webpack_require__(258)
+	var __weex_script__ = __webpack_require__(259)
 
 	__weex_define__('@weex-component/c0df89e239d226d3a0c6f418314cda04', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 239:
+/***/ 257:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 240:
+/***/ 258:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -164,7 +164,7 @@
 
 /***/ },
 
-/***/ 241:
+/***/ 259:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/showcase/pseudo-class.js b/ios/playground/bundlejs/showcase/pseudo-class.js
index cbd263e..ef804a2 100644
--- a/ios/playground/bundlejs/showcase/pseudo-class.js
+++ b/ios/playground/bundlejs/showcase/pseudo-class.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(292)
-	var __weex_style__ = __webpack_require__(293)
-	var __weex_script__ = __webpack_require__(294)
+	var __weex_template__ = __webpack_require__(310)
+	var __weex_style__ = __webpack_require__(311)
+	var __weex_script__ = __webpack_require__(312)
 
 	__weex_define__('@weex-component/07aaf1221ad656e37ebe37291f40d193', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2233,7 +2233,25 @@
 /* 289 */,
 /* 290 */,
 /* 291 */,
-/* 292 */
+/* 292 */,
+/* 293 */,
+/* 294 */,
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2359,7 +2377,7 @@
 	}
 
 /***/ },
-/* 293 */
+/* 311 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2402,7 +2420,7 @@
 	}
 
 /***/ },
-/* 294 */
+/* 312 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/showcase/ui.js b/ios/playground/bundlejs/showcase/ui.js
index 6c85295..ba4154f 100644
--- a/ios/playground/bundlejs/showcase/ui.js
+++ b/ios/playground/bundlejs/showcase/ui.js
@@ -44,9 +44,9 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(295)
-	var __weex_style__ = __webpack_require__(296)
-	var __weex_script__ = __webpack_require__(297)
+	var __weex_template__ = __webpack_require__(313)
+	var __weex_style__ = __webpack_require__(314)
+	var __weex_script__ = __webpack_require__(315)
 
 	__weex_define__('@weex-component/045f40e22d4b6e9c9f36354367812ecd', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2236,7 +2236,25 @@
 /* 292 */,
 /* 293 */,
 /* 294 */,
-/* 295 */
+/* 295 */,
+/* 296 */,
+/* 297 */,
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */,
+/* 311 */,
+/* 312 */,
+/* 313 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2399,7 +2417,7 @@
 	}
 
 /***/ },
-/* 296 */
+/* 314 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2410,7 +2428,7 @@
 	}
 
 /***/ },
-/* 297 */
+/* 315 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/style/index.js b/ios/playground/bundlejs/style/index.js
index 0b1deb1..5ff0358 100644
--- a/ios/playground/bundlejs/style/index.js
+++ b/ios/playground/bundlejs/style/index.js
@@ -44,12 +44,12 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(298)
-	__webpack_require__(306)
-	__webpack_require__(299)
-	var __weex_template__ = __webpack_require__(310)
-	var __weex_style__ = __webpack_require__(311)
-	var __weex_script__ = __webpack_require__(312)
+	__webpack_require__(316)
+	__webpack_require__(324)
+	__webpack_require__(317)
+	var __weex_template__ = __webpack_require__(328)
+	var __weex_style__ = __webpack_require__(329)
+	var __weex_script__ = __webpack_require__(330)
 
 	__weex_define__('@weex-component/2bb97ed0198ea3308e26ee13c0047c9c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2242,13 +2242,31 @@
 /* 295 */,
 /* 296 */,
 /* 297 */,
-/* 298 */
+/* 298 */,
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */,
+/* 311 */,
+/* 312 */,
+/* 313 */,
+/* 314 */,
+/* 315 */,
+/* 316 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(299)
-	var __weex_template__ = __webpack_require__(303)
-	var __weex_style__ = __webpack_require__(304)
-	var __weex_script__ = __webpack_require__(305)
+	__webpack_require__(317)
+	var __weex_template__ = __webpack_require__(321)
+	var __weex_style__ = __webpack_require__(322)
+	var __weex_script__ = __webpack_require__(323)
 
 	__weex_define__('@weex-component/style-box', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2265,12 +2283,12 @@
 
 
 /***/ },
-/* 299 */
+/* 317 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	var __weex_template__ = __webpack_require__(318)
+	var __weex_style__ = __webpack_require__(319)
+	var __weex_script__ = __webpack_require__(320)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2287,7 +2305,7 @@
 
 
 /***/ },
-/* 300 */
+/* 318 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2305,7 +2323,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 319 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2324,7 +2342,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 320 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2343,7 +2361,7 @@
 
 
 /***/ },
-/* 303 */
+/* 321 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2609,7 +2627,7 @@
 	}
 
 /***/ },
-/* 304 */
+/* 322 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2632,7 +2650,7 @@
 	}
 
 /***/ },
-/* 305 */
+/* 323 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2647,13 +2665,13 @@
 
 
 /***/ },
-/* 306 */
+/* 324 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(299)
-	var __weex_template__ = __webpack_require__(307)
-	var __weex_style__ = __webpack_require__(308)
-	var __weex_script__ = __webpack_require__(309)
+	__webpack_require__(317)
+	var __weex_template__ = __webpack_require__(325)
+	var __weex_style__ = __webpack_require__(326)
+	var __weex_script__ = __webpack_require__(327)
 
 	__weex_define__('@weex-component/style-flex', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2670,7 +2688,7 @@
 
 
 /***/ },
-/* 307 */
+/* 325 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3296,7 +3314,7 @@
 	}
 
 /***/ },
-/* 308 */
+/* 326 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3313,7 +3331,7 @@
 	}
 
 /***/ },
-/* 309 */
+/* 327 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3323,7 +3341,7 @@
 
 
 /***/ },
-/* 310 */
+/* 328 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3466,7 +3484,7 @@
 	}
 
 /***/ },
-/* 311 */
+/* 329 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3477,7 +3495,7 @@
 	}
 
 /***/ },
-/* 312 */
+/* 330 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/style/style-box.js b/ios/playground/bundlejs/style/style-box.js
index 2e39db7..e9186b7 100644
--- a/ios/playground/bundlejs/style/style-box.js
+++ b/ios/playground/bundlejs/style/style-box.js
@@ -44,10 +44,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(299)
-	var __weex_template__ = __webpack_require__(303)
-	var __weex_style__ = __webpack_require__(304)
-	var __weex_script__ = __webpack_require__(305)
+	__webpack_require__(317)
+	var __weex_template__ = __webpack_require__(321)
+	var __weex_style__ = __webpack_require__(322)
+	var __weex_script__ = __webpack_require__(323)
 
 	__weex_define__('@weex-component/1cc382dbc23ca75e8dd34af712ba54f1', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2241,12 +2241,30 @@
 /* 296 */,
 /* 297 */,
 /* 298 */,
-/* 299 */
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */,
+/* 311 */,
+/* 312 */,
+/* 313 */,
+/* 314 */,
+/* 315 */,
+/* 316 */,
+/* 317 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	var __weex_template__ = __webpack_require__(318)
+	var __weex_style__ = __webpack_require__(319)
+	var __weex_script__ = __webpack_require__(320)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2263,7 +2281,7 @@
 
 
 /***/ },
-/* 300 */
+/* 318 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2281,7 +2299,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 319 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2300,7 +2318,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 320 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2319,7 +2337,7 @@
 
 
 /***/ },
-/* 303 */
+/* 321 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2585,7 +2603,7 @@
 	}
 
 /***/ },
-/* 304 */
+/* 322 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2608,7 +2626,7 @@
 	}
 
 /***/ },
-/* 305 */
+/* 323 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/style/style-flex.js b/ios/playground/bundlejs/style/style-flex.js
index 4b9dcf0..29ad99f 100644
--- a/ios/playground/bundlejs/style/style-flex.js
+++ b/ios/playground/bundlejs/style/style-flex.js
@@ -44,10 +44,10 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(299)
-	var __weex_template__ = __webpack_require__(307)
-	var __weex_style__ = __webpack_require__(308)
-	var __weex_script__ = __webpack_require__(309)
+	__webpack_require__(317)
+	var __weex_template__ = __webpack_require__(325)
+	var __weex_style__ = __webpack_require__(326)
+	var __weex_script__ = __webpack_require__(327)
 
 	__weex_define__('@weex-component/601bcbb157cb7b89fd0d4cc63178b528', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2241,12 +2241,30 @@
 /* 296 */,
 /* 297 */,
 /* 298 */,
-/* 299 */
+/* 299 */,
+/* 300 */,
+/* 301 */,
+/* 302 */,
+/* 303 */,
+/* 304 */,
+/* 305 */,
+/* 306 */,
+/* 307 */,
+/* 308 */,
+/* 309 */,
+/* 310 */,
+/* 311 */,
+/* 312 */,
+/* 313 */,
+/* 314 */,
+/* 315 */,
+/* 316 */,
+/* 317 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	var __weex_template__ = __webpack_require__(318)
+	var __weex_style__ = __webpack_require__(319)
+	var __weex_script__ = __webpack_require__(320)
 
 	__weex_define__('@weex-component/style-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2263,7 +2281,7 @@
 
 
 /***/ },
-/* 300 */
+/* 318 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2281,7 +2299,7 @@
 	}
 
 /***/ },
-/* 301 */
+/* 319 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2300,7 +2318,7 @@
 	}
 
 /***/ },
-/* 302 */
+/* 320 */
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -2319,11 +2337,11 @@
 
 
 /***/ },
-/* 303 */,
-/* 304 */,
-/* 305 */,
-/* 306 */,
-/* 307 */
+/* 321 */,
+/* 322 */,
+/* 323 */,
+/* 324 */,
+/* 325 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2949,7 +2967,7 @@
 	}
 
 /***/ },
-/* 308 */
+/* 326 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2966,7 +2984,7 @@
 	}
 
 /***/ },
-/* 309 */
+/* 327 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/style/style-item.js b/ios/playground/bundlejs/style/style-item.js
index 165bb94..20d5b37 100644
--- a/ios/playground/bundlejs/style/style-item.js
+++ b/ios/playground/bundlejs/style/style-item.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(300)
-	var __weex_style__ = __webpack_require__(301)
-	var __weex_script__ = __webpack_require__(302)
+	var __weex_template__ = __webpack_require__(318)
+	var __weex_style__ = __webpack_require__(319)
+	var __weex_script__ = __webpack_require__(320)
 
 	__weex_define__('@weex-component/db2a20e3c65e67c0f449e29c05c9d644', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 300:
+/***/ 318:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,7 +85,7 @@
 
 /***/ },
 
-/***/ 301:
+/***/ 319:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 302:
+/***/ 320:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/hello-world-1.js b/ios/playground/bundlejs/syntax/hello-world-1.js
index 17cd24e..d9924ea 100644
--- a/ios/playground/bundlejs/syntax/hello-world-1.js
+++ b/ios/playground/bundlejs/syntax/hello-world-1.js
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(316)
+	var __weex_template__ = __webpack_require__(334)
 
 	__weex_define__('@weex-component/5e6bbced7515fc4165499153f5d8276a', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 316:
+/***/ 334:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/syntax/hello-world-2.js b/ios/playground/bundlejs/syntax/hello-world-2.js
index 6c32cec..a01c24a 100644
--- a/ios/playground/bundlejs/syntax/hello-world-2.js
+++ b/ios/playground/bundlejs/syntax/hello-world-2.js
@@ -45,7 +45,7 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(317)
+	var __weex_template__ = __webpack_require__(335)
 
 	__weex_define__('@weex-component/25608f094c039b891a20c8161b9c650b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -57,7 +57,7 @@
 
 /***/ },
 
-/***/ 317:
+/***/ 335:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/syntax/hello-world-3.js b/ios/playground/bundlejs/syntax/hello-world-3.js
index e1e6964..a76d526 100644
--- a/ios/playground/bundlejs/syntax/hello-world-3.js
+++ b/ios/playground/bundlejs/syntax/hello-world-3.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(318)
-	var __weex_style__ = __webpack_require__(319)
+	var __weex_template__ = __webpack_require__(336)
+	var __weex_style__ = __webpack_require__(337)
 
 	__weex_define__('@weex-component/695862caffb746fa67bb70cbd1bb819e', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -60,7 +60,7 @@
 
 /***/ },
 
-/***/ 318:
+/***/ 336:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -92,7 +92,7 @@
 
 /***/ },
 
-/***/ 319:
+/***/ 337:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/syntax/hello-world-4.js b/ios/playground/bundlejs/syntax/hello-world-4.js
index d357d04..0ca44ae 100644
--- a/ios/playground/bundlejs/syntax/hello-world-4.js
+++ b/ios/playground/bundlejs/syntax/hello-world-4.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(320)
-	var __weex_style__ = __webpack_require__(321)
-	var __weex_script__ = __webpack_require__(322)
+	var __weex_template__ = __webpack_require__(338)
+	var __weex_style__ = __webpack_require__(339)
+	var __weex_script__ = __webpack_require__(340)
 
 	__weex_define__('@weex-component/efbfb8ecf417c1cf14746fdf4099343d', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 320:
+/***/ 338:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 321:
+/***/ 339:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -117,7 +117,7 @@
 
 /***/ },
 
-/***/ 322:
+/***/ 340:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/hello-world-5.js b/ios/playground/bundlejs/syntax/hello-world-5.js
index 8014711..09cf978 100644
--- a/ios/playground/bundlejs/syntax/hello-world-5.js
+++ b/ios/playground/bundlejs/syntax/hello-world-5.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(323)
-	var __weex_style__ = __webpack_require__(324)
-	var __weex_script__ = __webpack_require__(325)
+	var __weex_template__ = __webpack_require__(341)
+	var __weex_style__ = __webpack_require__(342)
+	var __weex_script__ = __webpack_require__(343)
 
 	__weex_define__('@weex-component/06cb3b1cf32d7e68eb4f41a491128601', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 323:
+/***/ 341:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 324:
+/***/ 342:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,7 +120,7 @@
 
 /***/ },
 
-/***/ 325:
+/***/ 343:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/hello-world.js b/ios/playground/bundlejs/syntax/hello-world.js
index f99a87b..e9dcda6 100644
--- a/ios/playground/bundlejs/syntax/hello-world.js
+++ b/ios/playground/bundlejs/syntax/hello-world.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(313)
-	var __weex_style__ = __webpack_require__(314)
-	var __weex_script__ = __webpack_require__(315)
+	var __weex_template__ = __webpack_require__(331)
+	var __weex_style__ = __webpack_require__(332)
+	var __weex_script__ = __webpack_require__(333)
 
 	__weex_define__('@weex-component/ca86dd7272942388d48952706d37e8a7', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 313:
+/***/ 331:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 314:
+/***/ 332:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -120,7 +120,7 @@
 
 /***/ },
 
-/***/ 315:
+/***/ 333:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/index.js b/ios/playground/bundlejs/syntax/index.js
index 83e324c..c2b94c1 100644
--- a/ios/playground/bundlejs/syntax/index.js
+++ b/ios/playground/bundlejs/syntax/index.js
@@ -44,8 +44,8 @@
 /* 0 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(326)
-	var __weex_script__ = __webpack_require__(327)
+	var __weex_template__ = __webpack_require__(344)
+	var __weex_script__ = __webpack_require__(345)
 
 	__weex_define__('@weex-component/7c0aa0b76c7fe063e27065c721bee1a0', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2048,18 +2048,23 @@
 /* 107 */,
 /* 108 */,
 /* 109 */,
-/* 110 */
+/* 110 */,
+/* 111 */,
+/* 112 */,
+/* 113 */,
+/* 114 */,
+/* 115 */
 /***/ function(module, exports, __webpack_require__) {
 
 	"use strict";
 
 	exports.__esModule = true;
 
-	var _iterator = __webpack_require__(111);
+	var _iterator = __webpack_require__(116);
 
 	var _iterator2 = _interopRequireDefault(_iterator);
 
-	var _symbol = __webpack_require__(131);
+	var _symbol = __webpack_require__(136);
 
 	var _symbol2 = _interopRequireDefault(_symbol);
 
@@ -2074,28 +2079,28 @@
 	};
 
 /***/ },
-/* 111 */
+/* 116 */
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(112), __esModule: true };
+	module.exports = { "default": __webpack_require__(117), __esModule: true };
 
 /***/ },
-/* 112 */
+/* 117 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(113);
-	__webpack_require__(126);
-	module.exports = __webpack_require__(130).f('iterator');
+	__webpack_require__(118);
+	__webpack_require__(131);
+	module.exports = __webpack_require__(135).f('iterator');
 
 /***/ },
-/* 113 */
+/* 118 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var $at  = __webpack_require__(114)(true);
+	var $at  = __webpack_require__(119)(true);
 
 	// 21.1.3.27 String.prototype[@@iterator]()
-	__webpack_require__(115)(String, 'String', function(iterated){
+	__webpack_require__(120)(String, 'String', function(iterated){
 	  this._t = String(iterated); // target
 	  this._i = 0;                // next index
 	// 21.1.5.2.1 %StringIteratorPrototype%.next()
@@ -2110,7 +2115,7 @@
 	});
 
 /***/ },
-/* 114 */
+/* 119 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var toInteger = __webpack_require__(57)
@@ -2132,20 +2137,20 @@
 	};
 
 /***/ },
-/* 115 */
+/* 120 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var LIBRARY        = __webpack_require__(116)
+	var LIBRARY        = __webpack_require__(121)
 	  , $export        = __webpack_require__(32)
-	  , redefine       = __webpack_require__(117)
+	  , redefine       = __webpack_require__(122)
 	  , hide           = __webpack_require__(37)
 	  , has            = __webpack_require__(50)
-	  , Iterators      = __webpack_require__(118)
-	  , $iterCreate    = __webpack_require__(119)
-	  , setToStringTag = __webpack_require__(123)
-	  , getPrototypeOf = __webpack_require__(125)
-	  , ITERATOR       = __webpack_require__(124)('iterator')
+	  , Iterators      = __webpack_require__(123)
+	  , $iterCreate    = __webpack_require__(124)
+	  , setToStringTag = __webpack_require__(128)
+	  , getPrototypeOf = __webpack_require__(130)
+	  , ITERATOR       = __webpack_require__(129)('iterator')
 	  , BUGGY          = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next`
 	  , FF_ITERATOR    = '@@iterator'
 	  , KEYS           = 'keys'
@@ -2207,35 +2212,35 @@
 	};
 
 /***/ },
-/* 116 */
+/* 121 */
 /***/ function(module, exports) {
 
 	module.exports = true;
 
 /***/ },
-/* 117 */
+/* 122 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = __webpack_require__(37);
 
 /***/ },
-/* 118 */
+/* 123 */
 /***/ function(module, exports) {
 
 	module.exports = {};
 
 /***/ },
-/* 119 */
+/* 124 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var create         = __webpack_require__(120)
+	var create         = __webpack_require__(125)
 	  , descriptor     = __webpack_require__(46)
-	  , setToStringTag = __webpack_require__(123)
+	  , setToStringTag = __webpack_require__(128)
 	  , IteratorPrototype = {};
 
 	// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
-	__webpack_require__(37)(IteratorPrototype, __webpack_require__(124)('iterator'), function(){ return this; });
+	__webpack_require__(37)(IteratorPrototype, __webpack_require__(129)('iterator'), function(){ return this; });
 
 	module.exports = function(Constructor, NAME, next){
 	  Constructor.prototype = create(IteratorPrototype, {next: descriptor(1, next)});
@@ -2243,12 +2248,12 @@
 	};
 
 /***/ },
-/* 120 */
+/* 125 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])
 	var anObject    = __webpack_require__(39)
-	  , dPs         = __webpack_require__(121)
+	  , dPs         = __webpack_require__(126)
 	  , enumBugKeys = __webpack_require__(62)
 	  , IE_PROTO    = __webpack_require__(59)('IE_PROTO')
 	  , Empty       = function(){ /* empty */ }
@@ -2263,7 +2268,7 @@
 	    , gt     = '>'
 	    , iframeDocument;
 	  iframe.style.display = 'none';
-	  __webpack_require__(122).appendChild(iframe);
+	  __webpack_require__(127).appendChild(iframe);
 	  iframe.src = 'javascript:'; // eslint-disable-line no-script-url
 	  // createDict = iframe.contentWindow.Object;
 	  // html.removeChild(iframe);
@@ -2290,7 +2295,7 @@
 
 
 /***/ },
-/* 121 */
+/* 126 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var dP       = __webpack_require__(38)
@@ -2308,25 +2313,25 @@
 	};
 
 /***/ },
-/* 122 */
+/* 127 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = __webpack_require__(33).document && document.documentElement;
 
 /***/ },
-/* 123 */
+/* 128 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var def = __webpack_require__(38).f
 	  , has = __webpack_require__(50)
-	  , TAG = __webpack_require__(124)('toStringTag');
+	  , TAG = __webpack_require__(129)('toStringTag');
 
 	module.exports = function(it, tag, stat){
 	  if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag});
 	};
 
 /***/ },
-/* 124 */
+/* 129 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var store      = __webpack_require__(60)('wks')
@@ -2342,7 +2347,7 @@
 	$exports.store = store;
 
 /***/ },
-/* 125 */
+/* 130 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)
@@ -2360,14 +2365,14 @@
 	};
 
 /***/ },
-/* 126 */
+/* 131 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(127);
+	__webpack_require__(132);
 	var global        = __webpack_require__(33)
 	  , hide          = __webpack_require__(37)
-	  , Iterators     = __webpack_require__(118)
-	  , TO_STRING_TAG = __webpack_require__(124)('toStringTag');
+	  , Iterators     = __webpack_require__(123)
+	  , TO_STRING_TAG = __webpack_require__(129)('toStringTag');
 
 	for(var collections = ['NodeList', 'DOMTokenList', 'MediaList', 'StyleSheetList', 'CSSRuleList'], i = 0; i < 5; i++){
 	  var NAME       = collections[i]
@@ -2378,20 +2383,20 @@
 	}
 
 /***/ },
-/* 127 */
+/* 132 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
-	var addToUnscopables = __webpack_require__(128)
-	  , step             = __webpack_require__(129)
-	  , Iterators        = __webpack_require__(118)
+	var addToUnscopables = __webpack_require__(133)
+	  , step             = __webpack_require__(134)
+	  , Iterators        = __webpack_require__(123)
 	  , toIObject        = __webpack_require__(51);
 
 	// 22.1.3.4 Array.prototype.entries()
 	// 22.1.3.13 Array.prototype.keys()
 	// 22.1.3.29 Array.prototype.values()
 	// 22.1.3.30 Array.prototype[@@iterator]()
-	module.exports = __webpack_require__(115)(Array, 'Array', function(iterated, kind){
+	module.exports = __webpack_require__(120)(Array, 'Array', function(iterated, kind){
 	  this._t = toIObject(iterated); // target
 	  this._i = 0;                   // next index
 	  this._k = kind;                // kind
@@ -2417,13 +2422,13 @@
 	addToUnscopables('entries');
 
 /***/ },
-/* 128 */
+/* 133 */
 /***/ function(module, exports) {
 
 	module.exports = function(){ /* empty */ };
 
 /***/ },
-/* 129 */
+/* 134 */
 /***/ function(module, exports) {
 
 	module.exports = function(done, value){
@@ -2431,29 +2436,29 @@
 	};
 
 /***/ },
-/* 130 */
+/* 135 */
 /***/ function(module, exports, __webpack_require__) {
 
-	exports.f = __webpack_require__(124);
+	exports.f = __webpack_require__(129);
 
 /***/ },
-/* 131 */
+/* 136 */
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(132), __esModule: true };
+	module.exports = { "default": __webpack_require__(137), __esModule: true };
 
 /***/ },
-/* 132 */
+/* 137 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(133);
-	__webpack_require__(142);
-	__webpack_require__(143);
-	__webpack_require__(144);
+	__webpack_require__(138);
+	__webpack_require__(147);
+	__webpack_require__(148);
+	__webpack_require__(149);
 	module.exports = __webpack_require__(34).Symbol;
 
 /***/ },
-/* 133 */
+/* 138 */
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -2462,25 +2467,25 @@
 	  , has            = __webpack_require__(50)
 	  , DESCRIPTORS    = __webpack_require__(42)
 	  , $export        = __webpack_require__(32)
-	  , redefine       = __webpack_require__(117)
-	  , META           = __webpack_require__(134).KEY
+	  , redefine       = __webpack_require__(122)
+	  , META           = __webpack_require__(139).KEY
 	  , $fails         = __webpack_require__(43)
 	  , shared         = __webpack_require__(60)
-	  , setToStringTag = __webpack_require__(123)
+	  , setToStringTag = __webpack_require__(128)
 	  , uid            = __webpack_require__(61)
-	  , wks            = __webpack_require__(124)
-	  , wksExt         = __webpack_require__(130)
-	  , wksDefine      = __webpack_require__(135)
-	  , keyOf          = __webpack_require__(136)
-	  , enumKeys       = __webpack_require__(137)
-	  , isArray        = __webpack_require__(138)
+	  , wks            = __webpack_require__(129)
+	  , wksExt         = __webpack_require__(135)
+	  , wksDefine      = __webpack_require__(140)
+	  , keyOf          = __webpack_require__(141)
+	  , enumKeys       = __webpack_require__(142)
+	  , isArray        = __webpack_require__(143)
 	  , anObject       = __webpack_require__(39)
 	  , toIObject      = __webpack_require__(51)
 	  , toPrimitive    = __webpack_require__(45)
 	  , createDesc     = __webpack_require__(46)
-	  , _create        = __webpack_require__(120)
-	  , gOPNExt        = __webpack_require__(139)
-	  , $GOPD          = __webpack_require__(141)
+	  , _create        = __webpack_require__(125)
+	  , gOPNExt        = __webpack_require__(144)
+	  , $GOPD          = __webpack_require__(146)
 	  , $DP            = __webpack_require__(38)
 	  , $keys          = __webpack_require__(48)
 	  , gOPD           = $GOPD.f
@@ -2605,11 +2610,11 @@
 
 	  $GOPD.f = $getOwnPropertyDescriptor;
 	  $DP.f   = $defineProperty;
-	  __webpack_require__(140).f = gOPNExt.f = $getOwnPropertyNames;
+	  __webpack_require__(145).f = gOPNExt.f = $getOwnPropertyNames;
 	  __webpack_require__(64).f  = $propertyIsEnumerable;
 	  __webpack_require__(63).f = $getOwnPropertySymbols;
 
-	  if(DESCRIPTORS && !__webpack_require__(116)){
+	  if(DESCRIPTORS && !__webpack_require__(121)){
 	    redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);
 	  }
 
@@ -2693,7 +2698,7 @@
 	setToStringTag(global.JSON, 'JSON', true);
 
 /***/ },
-/* 134 */
+/* 139 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var META     = __webpack_require__(61)('meta')
@@ -2751,13 +2756,13 @@
 	};
 
 /***/ },
-/* 135 */
+/* 140 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var global         = __webpack_require__(33)
 	  , core           = __webpack_require__(34)
-	  , LIBRARY        = __webpack_require__(116)
-	  , wksExt         = __webpack_require__(130)
+	  , LIBRARY        = __webpack_require__(121)
+	  , wksExt         = __webpack_require__(135)
 	  , defineProperty = __webpack_require__(38).f;
 	module.exports = function(name){
 	  var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});
@@ -2765,7 +2770,7 @@
 	};
 
 /***/ },
-/* 136 */
+/* 141 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var getKeys   = __webpack_require__(48)
@@ -2780,7 +2785,7 @@
 	};
 
 /***/ },
-/* 137 */
+/* 142 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// all enumerable object keys, includes symbols
@@ -2800,7 +2805,7 @@
 	};
 
 /***/ },
-/* 138 */
+/* 143 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 7.2.2 IsArray(argument)
@@ -2810,12 +2815,12 @@
 	};
 
 /***/ },
-/* 139 */
+/* 144 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
 	var toIObject = __webpack_require__(51)
-	  , gOPN      = __webpack_require__(140).f
+	  , gOPN      = __webpack_require__(145).f
 	  , toString  = {}.toString;
 
 	var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
@@ -2835,7 +2840,7 @@
 
 
 /***/ },
-/* 140 */
+/* 145 */
 /***/ function(module, exports, __webpack_require__) {
 
 	// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)
@@ -2847,7 +2852,7 @@
 	};
 
 /***/ },
-/* 141 */
+/* 146 */
 /***/ function(module, exports, __webpack_require__) {
 
 	var pIE            = __webpack_require__(64)
@@ -2868,29 +2873,24 @@
 	};
 
 /***/ },
-/* 142 */
+/* 147 */
 /***/ function(module, exports) {
 
 	
 
 /***/ },
-/* 143 */
+/* 148 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(135)('asyncIterator');
+	__webpack_require__(140)('asyncIterator');
 
 /***/ },
-/* 144 */
+/* 149 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(135)('observable');
+	__webpack_require__(140)('observable');
 
 /***/ },
-/* 145 */,
-/* 146 */,
-/* 147 */,
-/* 148 */,
-/* 149 */,
 /* 150 */,
 /* 151 */,
 /* 152 */,
@@ -2938,13 +2938,23 @@
 /* 194 */,
 /* 195 */,
 /* 196 */,
-/* 197 */
+/* 197 */,
+/* 198 */,
+/* 199 */,
+/* 200 */,
+/* 201 */,
+/* 202 */,
+/* 203 */,
+/* 204 */,
+/* 205 */,
+/* 206 */,
+/* 207 */
 /***/ function(module, exports, __webpack_require__) {
 
-	__webpack_require__(198)
-	var __weex_template__ = __webpack_require__(202)
-	var __weex_style__ = __webpack_require__(203)
-	var __weex_script__ = __webpack_require__(204)
+	__webpack_require__(208)
+	var __weex_template__ = __webpack_require__(212)
+	var __weex_style__ = __webpack_require__(213)
+	var __weex_script__ = __webpack_require__(214)
 
 	__weex_define__('@weex-component/example-list', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2961,12 +2971,12 @@
 
 
 /***/ },
-/* 198 */
+/* 208 */
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(199)
-	var __weex_style__ = __webpack_require__(200)
-	var __weex_script__ = __webpack_require__(201)
+	var __weex_template__ = __webpack_require__(209)
+	var __weex_style__ = __webpack_require__(210)
+	var __weex_script__ = __webpack_require__(211)
 
 	__weex_define__('@weex-component/example-list-item', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2983,11 +2993,17 @@
 
 
 /***/ },
-/* 199 */
+/* 209 */
 /***/ function(module, exports) {
 
 	module.exports = {
-	  "type": "wxc-list-item",
+	  "type": "div",
+	  "classList": [
+	    "item"
+	  ],
+	  "style": {
+	    "backgroundColor": function () {return this.bgColor}
+	  },
 	  "events": {
 	    "click": "redirect"
 	  },
@@ -3005,18 +3021,37 @@
 	}
 
 /***/ },
-/* 200 */
+/* 210 */
 /***/ function(module, exports) {
 
 	module.exports = {
 	  "item-txt": {
 	    "fontSize": 48,
 	    "color": "#555555"
+	  },
+	  "item": {
+	    "paddingTop": 25,
+	    "paddingBottom": 25,
+	    "paddingLeft": 35,
+	    "paddingRight": 35,
+	    "height": 160,
+	    "justifyContent": "center",
+	    "borderBottomWidth": 1,
+	    "borderColor": "#dddddd",
+	    "paddingTop:active": 25,
+	    "paddingBottom:active": 25,
+	    "paddingLeft:active": 35,
+	    "paddingRight:active": 35,
+	    "height:active": 160,
+	    "justifyContent:active": "center",
+	    "backgroundColor:active": "#00BDFF",
+	    "borderBottomWidth:active": 1,
+	    "borderColor:active": "#dddddd"
 	  }
 	}
 
 /***/ },
-/* 201 */
+/* 211 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
@@ -3025,7 +3060,8 @@
 	module.exports = {
 	  data: function () {return {
 	    title: '',
-	    url: ''
+	    url: '',
+	    bgColor: '#ffffff'
 	  }},
 	  methods: {
 	    redirect: function redirect() {
@@ -3037,7 +3073,7 @@
 
 
 /***/ },
-/* 202 */
+/* 212 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3061,18 +3097,18 @@
 	}
 
 /***/ },
-/* 203 */
+/* 213 */
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
-/* 204 */
+/* 214 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _typeof2 = __webpack_require__(110);
+	var _typeof2 = __webpack_require__(115);
 
 	var _typeof3 = _interopRequireDefault(_typeof2);
 
@@ -3130,16 +3166,6 @@
 
 
 /***/ },
-/* 205 */,
-/* 206 */,
-/* 207 */,
-/* 208 */,
-/* 209 */,
-/* 210 */,
-/* 211 */,
-/* 212 */,
-/* 213 */,
-/* 214 */,
 /* 215 */,
 /* 216 */,
 /* 217 */,
@@ -3251,7 +3277,25 @@
 /* 323 */,
 /* 324 */,
 /* 325 */,
-/* 326 */
+/* 326 */,
+/* 327 */,
+/* 328 */,
+/* 329 */,
+/* 330 */,
+/* 331 */,
+/* 332 */,
+/* 333 */,
+/* 334 */,
+/* 335 */,
+/* 336 */,
+/* 337 */,
+/* 338 */,
+/* 339 */,
+/* 340 */,
+/* 341 */,
+/* 342 */,
+/* 343 */,
+/* 344 */
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3263,12 +3307,12 @@
 	}
 
 /***/ },
-/* 327 */
+/* 345 */
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(197);
+	__webpack_require__(207);
 	module.exports = {
 	  data: function () {return {
 	    root: 'examples',
diff --git a/ios/playground/bundlejs/syntax/script-component.js b/ios/playground/bundlejs/syntax/script-component.js
index 2206b90..e33bc05 100644
--- a/ios/playground/bundlejs/syntax/script-component.js
+++ b/ios/playground/bundlejs/syntax/script-component.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(328)
-	var __weex_script__ = __webpack_require__(329)
+	var __weex_template__ = __webpack_require__(346)
+	var __weex_script__ = __webpack_require__(347)
 
 	__weex_define__('@weex-component/2a5ba7e55afcba45accf15b3179f0016', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 328:
+/***/ 346:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -96,12 +96,12 @@
 
 /***/ },
 
-/***/ 329:
+/***/ 347:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(330);
+	__webpack_require__(348);
 	module.exports = {
 	  data: function () {return {
 	    items: [{ title: 'A', url: 'a' }, { title: 'B', url: 'b' }, { title: 'C', url: 'c' }]
@@ -112,12 +112,12 @@
 
 /***/ },
 
-/***/ 330:
+/***/ 348:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(331)
-	var __weex_style__ = __webpack_require__(332)
-	var __weex_script__ = __webpack_require__(333)
+	var __weex_template__ = __webpack_require__(349)
+	var __weex_style__ = __webpack_require__(350)
+	var __weex_script__ = __webpack_require__(351)
 
 	__weex_define__('@weex-component/sub', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -135,7 +135,7 @@
 
 /***/ },
 
-/***/ 331:
+/***/ 349:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -150,7 +150,7 @@
 
 /***/ },
 
-/***/ 332:
+/***/ 350:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -162,7 +162,7 @@
 
 /***/ },
 
-/***/ 333:
+/***/ 351:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/script-data.js b/ios/playground/bundlejs/syntax/script-data.js
index 0b590e9..3f78b02 100644
--- a/ios/playground/bundlejs/syntax/script-data.js
+++ b/ios/playground/bundlejs/syntax/script-data.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(334)
-	var __weex_style__ = __webpack_require__(335)
-	var __weex_script__ = __webpack_require__(336)
+	var __weex_template__ = __webpack_require__(352)
+	var __weex_style__ = __webpack_require__(353)
+	var __weex_script__ = __webpack_require__(354)
 
 	__weex_define__('@weex-component/2267e3020f57f77e5d733a60b4ea145b', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 334:
+/***/ 352:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 335:
+/***/ 353:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,7 +127,7 @@
 
 /***/ },
 
-/***/ 336:
+/***/ 354:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/script-events.js b/ios/playground/bundlejs/syntax/script-events.js
index 0123a8a..a00934b 100644
--- a/ios/playground/bundlejs/syntax/script-events.js
+++ b/ios/playground/bundlejs/syntax/script-events.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(337)
-	var __weex_style__ = __webpack_require__(338)
-	var __weex_script__ = __webpack_require__(339)
+	var __weex_template__ = __webpack_require__(355)
+	var __weex_style__ = __webpack_require__(356)
+	var __weex_script__ = __webpack_require__(357)
 
 	__weex_define__('@weex-component/491ca7f339a97e2fe3e130536e8fb536', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -74,14 +74,14 @@
 
 /***/ },
 
-/***/ 189:
+/***/ 100:
 /***/ function(module, exports, __webpack_require__) {
 
-	module.exports = { "default": __webpack_require__(190), __esModule: true };
+	module.exports = { "default": __webpack_require__(101), __esModule: true };
 
 /***/ },
 
-/***/ 190:
+/***/ 101:
 /***/ function(module, exports, __webpack_require__) {
 
 	var core  = __webpack_require__(34)
@@ -92,7 +92,7 @@
 
 /***/ },
 
-/***/ 337:
+/***/ 355:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -116,7 +116,7 @@
 
 /***/ },
 
-/***/ 338:
+/***/ 356:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -127,12 +127,12 @@
 
 /***/ },
 
-/***/ 339:
+/***/ 357:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	var _stringify = __webpack_require__(189);
+	var _stringify = __webpack_require__(100);
 
 	var _stringify2 = _interopRequireDefault(_stringify);
 
diff --git a/ios/playground/bundlejs/syntax/script-instance.js b/ios/playground/bundlejs/syntax/script-instance.js
index 0a3ad3d..e53e33d 100644
--- a/ios/playground/bundlejs/syntax/script-instance.js
+++ b/ios/playground/bundlejs/syntax/script-instance.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(340)
-	var __weex_style__ = __webpack_require__(341)
-	var __weex_script__ = __webpack_require__(342)
+	var __weex_template__ = __webpack_require__(358)
+	var __weex_style__ = __webpack_require__(359)
+	var __weex_script__ = __webpack_require__(360)
 
 	__weex_define__('@weex-component/e463d05fb45b7117577286bed2b723ab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 340:
+/***/ 358:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -87,7 +87,7 @@
 
 /***/ },
 
-/***/ 341:
+/***/ 359:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +98,7 @@
 
 /***/ },
 
-/***/ 342:
+/***/ 360:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/script-lifecycle.js b/ios/playground/bundlejs/syntax/script-lifecycle.js
index 61f18f9..1cfe650 100644
--- a/ios/playground/bundlejs/syntax/script-lifecycle.js
+++ b/ios/playground/bundlejs/syntax/script-lifecycle.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(343)
-	var __weex_style__ = __webpack_require__(344)
-	var __weex_script__ = __webpack_require__(345)
+	var __weex_template__ = __webpack_require__(361)
+	var __weex_style__ = __webpack_require__(362)
+	var __weex_script__ = __webpack_require__(363)
 
 	__weex_define__('@weex-component/bc7273b0d417cff1bb0a2e09e3cd1c92', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 343:
+/***/ 361:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -90,7 +90,7 @@
 
 /***/ },
 
-/***/ 344:
+/***/ 362:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +101,7 @@
 
 /***/ },
 
-/***/ 345:
+/***/ 363:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/script-module.js b/ios/playground/bundlejs/syntax/script-module.js
index c6d288f..f1482f5 100644
--- a/ios/playground/bundlejs/syntax/script-module.js
+++ b/ios/playground/bundlejs/syntax/script-module.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(346)
-	var __weex_style__ = __webpack_require__(347)
-	var __weex_script__ = __webpack_require__(348)
+	var __weex_template__ = __webpack_require__(364)
+	var __weex_style__ = __webpack_require__(365)
+	var __weex_script__ = __webpack_require__(366)
 
 	__weex_define__('@weex-component/0c363fe819262ec8f8baf1e516e1d694', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 346:
+/***/ 364:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -89,7 +89,7 @@
 
 /***/ },
 
-/***/ 347:
+/***/ 365:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 348:
+/***/ 366:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/script-options.js b/ios/playground/bundlejs/syntax/script-options.js
index aa045ed..355c1ad 100644
--- a/ios/playground/bundlejs/syntax/script-options.js
+++ b/ios/playground/bundlejs/syntax/script-options.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(349)
-	var __weex_style__ = __webpack_require__(350)
-	var __weex_script__ = __webpack_require__(351)
+	var __weex_template__ = __webpack_require__(367)
+	var __weex_style__ = __webpack_require__(368)
+	var __weex_script__ = __webpack_require__(369)
 
 	__weex_define__('@weex-component/d8cdc8a8832b252e92de2e6e8a50dd36', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 349:
+/***/ 367:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -86,7 +86,7 @@
 
 /***/ },
 
-/***/ 350:
+/***/ 368:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 351:
+/***/ 369:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/template-class.js b/ios/playground/bundlejs/syntax/template-class.js
index 5deffc5..7ab3226 100644
--- a/ios/playground/bundlejs/syntax/template-class.js
+++ b/ios/playground/bundlejs/syntax/template-class.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(352)
-	var __weex_style__ = __webpack_require__(353)
-	var __weex_script__ = __webpack_require__(354)
+	var __weex_template__ = __webpack_require__(370)
+	var __weex_style__ = __webpack_require__(371)
+	var __weex_script__ = __webpack_require__(372)
 
 	__weex_define__('@weex-component/14c303543be596aa2a969ac47565db7c', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 352:
+/***/ 370:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -105,7 +105,7 @@
 
 /***/ },
 
-/***/ 353:
+/***/ 371:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -119,7 +119,7 @@
 
 /***/ },
 
-/***/ 354:
+/***/ 372:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/template-content.js b/ios/playground/bundlejs/syntax/template-content.js
index f6872b4..c7a8575 100644
--- a/ios/playground/bundlejs/syntax/template-content.js
+++ b/ios/playground/bundlejs/syntax/template-content.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(355)
-	var __weex_script__ = __webpack_require__(356)
+	var __weex_template__ = __webpack_require__(373)
+	var __weex_script__ = __webpack_require__(374)
 
 	__weex_define__('@weex-component/2b26a2ba0096277f201ca0b657282838', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 355:
+/***/ 373:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -85,22 +85,22 @@
 
 /***/ },
 
-/***/ 356:
+/***/ 374:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
 
-	__webpack_require__(357);}
+	__webpack_require__(375);}
 	/* generated by weex-loader */
 
 
 /***/ },
 
-/***/ 357:
+/***/ 375:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(358)
-	var __weex_style__ = __webpack_require__(359)
+	var __weex_template__ = __webpack_require__(376)
+	var __weex_style__ = __webpack_require__(377)
 
 	__weex_define__('@weex-component/btn', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -113,7 +113,7 @@
 
 /***/ },
 
-/***/ 358:
+/***/ 376:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -130,7 +130,7 @@
 
 /***/ },
 
-/***/ 359:
+/***/ 377:
 /***/ function(module, exports) {
 
 	module.exports = {
diff --git a/ios/playground/bundlejs/syntax/template-event.js b/ios/playground/bundlejs/syntax/template-event.js
index c0615ff..9c1cbd4 100644
--- a/ios/playground/bundlejs/syntax/template-event.js
+++ b/ios/playground/bundlejs/syntax/template-event.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(360)
-	var __weex_style__ = __webpack_require__(361)
-	var __weex_script__ = __webpack_require__(362)
+	var __weex_template__ = __webpack_require__(378)
+	var __weex_style__ = __webpack_require__(379)
+	var __weex_script__ = __webpack_require__(380)
 
 	__weex_define__('@weex-component/40a248d5d833060161447365b18603fa', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 360:
+/***/ 378:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 361:
+/***/ 379:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -168,7 +168,7 @@
 
 /***/ },
 
-/***/ 362:
+/***/ 380:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/template-if.js b/ios/playground/bundlejs/syntax/template-if.js
index f71dd8d..5464348 100644
--- a/ios/playground/bundlejs/syntax/template-if.js
+++ b/ios/playground/bundlejs/syntax/template-if.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(363)
-	var __weex_style__ = __webpack_require__(364)
-	var __weex_script__ = __webpack_require__(365)
+	var __weex_template__ = __webpack_require__(381)
+	var __weex_style__ = __webpack_require__(382)
+	var __weex_script__ = __webpack_require__(383)
 
 	__weex_define__('@weex-component/6019f2874c768d147034c91e003e5ba4', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 363:
+/***/ 381:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +109,7 @@
 
 /***/ },
 
-/***/ 364:
+/***/ 382:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -128,7 +128,7 @@
 
 /***/ },
 
-/***/ 365:
+/***/ 383:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){"use strict";
diff --git a/ios/playground/bundlejs/syntax/template-repeat-update.js b/ios/playground/bundlejs/syntax/template-repeat-update.js
index 4e2e4b3..fb57a64 100644
--- a/ios/playground/bundlejs/syntax/template-repeat-update.js
+++ b/ios/playground/bundlejs/syntax/template-repeat-update.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(369)
-	var __weex_style__ = __webpack_require__(370)
-	var __weex_script__ = __webpack_require__(371)
+	var __weex_template__ = __webpack_require__(387)
+	var __weex_style__ = __webpack_require__(388)
+	var __weex_script__ = __webpack_require__(389)
 
 	__weex_define__('@weex-component/01700b62cc1ab66f2cbfd893c5c95eaf', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 369:
+/***/ 387:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -124,7 +124,7 @@
 
 /***/ },
 
-/***/ 370:
+/***/ 388:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -146,7 +146,7 @@
 
 /***/ },
 
-/***/ 371:
+/***/ 389:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/template-repeat.js b/ios/playground/bundlejs/syntax/template-repeat.js
index cb83555..6b34d59 100644
--- a/ios/playground/bundlejs/syntax/template-repeat.js
+++ b/ios/playground/bundlejs/syntax/template-repeat.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(366)
-	var __weex_style__ = __webpack_require__(367)
-	var __weex_script__ = __webpack_require__(368)
+	var __weex_template__ = __webpack_require__(384)
+	var __weex_style__ = __webpack_require__(385)
+	var __weex_script__ = __webpack_require__(386)
 
 	__weex_define__('@weex-component/19638a010faa9c01b41851f36c4157df', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -66,7 +66,7 @@
 
 /***/ },
 
-/***/ 366:
+/***/ 384:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -227,7 +227,7 @@
 
 /***/ },
 
-/***/ 367:
+/***/ 385:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -241,7 +241,7 @@
 
 /***/ },
 
-/***/ 368:
+/***/ 386:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/syntax/template-style.js b/ios/playground/bundlejs/syntax/template-style.js
index 5debf3f..8bda226 100644
--- a/ios/playground/bundlejs/syntax/template-style.js
+++ b/ios/playground/bundlejs/syntax/template-style.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(372)
-	var __weex_script__ = __webpack_require__(373)
+	var __weex_template__ = __webpack_require__(390)
+	var __weex_script__ = __webpack_require__(391)
 
 	__weex_define__('@weex-component/301fb11cc58bbe739f3ee7ecea123456', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 372:
+/***/ 390:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -97,7 +97,7 @@
 
 /***/ },
 
-/***/ 373:
+/***/ 391:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/template.js b/ios/playground/bundlejs/template.js
index eb0310e..550a765 100644
--- a/ios/playground/bundlejs/template.js
+++ b/ios/playground/bundlejs/template.js
@@ -45,9 +45,9 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(374)
-	var __weex_style__ = __webpack_require__(375)
-	var __weex_script__ = __webpack_require__(376)
+	var __weex_template__ = __webpack_require__(392)
+	var __weex_style__ = __webpack_require__(393)
+	var __weex_script__ = __webpack_require__(394)
 
 	__weex_define__('@weex-component/b40420dfe575cbe06a71dd757f5b9128', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -2108,7 +2108,7 @@
 
 /***/ },
 
-/***/ 374:
+/***/ 392:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2219,14 +2219,14 @@
 
 /***/ },
 
-/***/ 375:
+/***/ 393:
 /***/ function(module, exports) {
 
 	module.exports = {}
 
 /***/ },
 
-/***/ 376:
+/***/ 394:
 /***/ function(module, exports, __webpack_require__) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/test.js b/ios/playground/bundlejs/test.js
index 6ca5a0e..92da321 100644
--- a/ios/playground/bundlejs/test.js
+++ b/ios/playground/bundlejs/test.js
@@ -45,8 +45,8 @@
 /***/ 0:
 /***/ function(module, exports, __webpack_require__) {
 
-	var __weex_template__ = __webpack_require__(377)
-	var __weex_script__ = __webpack_require__(378)
+	var __weex_template__ = __webpack_require__(395)
+	var __weex_script__ = __webpack_require__(396)
 
 	__weex_define__('@weex-component/9305542c7d16b107fad92f56b2a08dab', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 
@@ -63,7 +63,7 @@
 
 /***/ },
 
-/***/ 377:
+/***/ 395:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -102,7 +102,7 @@
 
 /***/ },
 
-/***/ 378:
+/***/ 396:
 /***/ function(module, exports) {
 
 	module.exports = function(module, exports, __weex_require__){'use strict';
diff --git a/ios/playground/bundlejs/vue/animation.js b/ios/playground/bundlejs/vue/animation.js
index 8b21c3d..fff2ef3 100644
--- a/ios/playground/bundlejs/vue/animation.js
+++ b/ios/playground/bundlejs/vue/animation.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(379)
+	__vue_styles__.push(__webpack_require__(397)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(380)
+	__vue_exports__ = __webpack_require__(398)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(389)
+	var __vue_template__ = __webpack_require__(407)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/animation.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/animation.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-0260e128"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 379:
+/***/ 397:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +113,7 @@
 
 /***/ },
 
-/***/ 380:
+/***/ 398:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -139,7 +143,7 @@
 	//
 	//
 
-	var animation = __weex_require_module__('animation');
+	var animation = weex.requireModule('animation');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -154,8 +158,8 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    button: __webpack_require__(385)
+	    panel: __webpack_require__(399),
+	    button: __webpack_require__(403)
 	  },
 	  methods: {
 	    anim: function anim(styles, timingFunction, duration, callback) {
@@ -237,21 +241,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -263,22 +267,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -332,7 +340,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -377,16 +385,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -394,7 +402,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -402,27 +410,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -434,22 +442,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -549,7 +561,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -572,30 +584,30 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 389:
+/***/ 407:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('panel', {
+	  return _c('div', [_c('panel', {
 	    attrs: {
 	      "title": "Transform",
 	      "type": "primary"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "value": "Rotate",
 	      "type": "primary",
@@ -606,7 +618,7 @@
 	        _vm.rotate($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginTop: "12px"
 	    },
@@ -620,7 +632,7 @@
 	        _vm.scale($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginTop: "12px"
 	    },
@@ -634,7 +646,7 @@
 	        _vm.translate($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginTop: "12px"
 	    },
@@ -648,12 +660,12 @@
 	        _vm.transform($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "Others",
 	      "type": "primary"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "value": "BgColor",
 	      "type": "primary",
@@ -664,7 +676,7 @@
 	        _vm.color($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginTop: "12px"
 	    },
@@ -678,7 +690,7 @@
 	        _vm.opacity($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginTop: "12px"
 	    },
@@ -692,15 +704,15 @@
 	        _vm.composite($event)
 	      }
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    ref: "block",
 	    staticClass: ["block"],
 	    style: {
 	      transformOrigin: _vm.transformOrigin
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["block-txt"]
-	  }, ["Anim"])])])
+	  }, [_vm._v("Anim")])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/a.js b/ios/playground/bundlejs/vue/components/a.js
index 9afd99d..4c11566 100644
--- a/ios/playground/bundlejs/vue/components/a.js
+++ b/ios/playground/bundlejs/vue/components/a.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(390)
+	__vue_exports__ = __webpack_require__(408)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(395)
+	var __vue_template__ = __webpack_require__(413)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/a.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/a.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 390:
+/***/ 408:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -278,28 +285,28 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    tip: __webpack_require__(391)
+	    panel: __webpack_require__(399),
+	    tip: __webpack_require__(409)
 	  }
 	};
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -311,22 +318,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -372,7 +383,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -394,34 +405,34 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 395:
+/***/ 413:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Hyperlink",
 	      "type": "primary"
 	    }
-	  }, [_h('a', {
+	  }, [_c('a', {
 	    attrs: {
 	      "href": "http://alibaba.github.io/weex/index.html"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -429,7 +440,7 @@
 	      "type": "info",
 	      "value": "Click me to see how 'A' element opens a new world."
 	    }
-	  })])])])
+	  })], 1)], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/countdown.js b/ios/playground/bundlejs/vue/components/countdown.js
index db16c98..028c02c 100644
--- a/ios/playground/bundlejs/vue/components/countdown.js
+++ b/ios/playground/bundlejs/vue/components/countdown.js
@@ -51,11 +51,58 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(396)
+	__vue_styles__.push(__webpack_require__(414)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(397)
+	__vue_exports__ = __webpack_require__(415)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(420)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/countdown.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-58fe9bc0"
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
+	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 399:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(400)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
 	var __vue_template__ = __webpack_require__(402)
@@ -70,65 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/countdown.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
-
-	module.exports = __vue_exports__
-	module.exports.el = 'true'
-	new Vue(module.exports)
-
-
-/***/ },
-
-/***/ 381:
-/***/ function(module, exports, __webpack_require__) {
-
-	var __vue_exports__, __vue_options__
-	var __vue_styles__ = []
-
-	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
-	)
-
-	/* script */
-	__vue_exports__ = __webpack_require__(383)
-
-	/* template */
-	var __vue_template__ = __webpack_require__(384)
-	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
-	if (
-	  typeof __vue_exports__.default === "object" ||
-	  typeof __vue_exports__.default === "function"
-	) {
-	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
-	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
 	}
-	if (typeof __vue_options__ === "function") {
-	  __vue_options__ = __vue_options__.options
-	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
-	__vue_options__.render = __vue_template__.render
-	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
-	__vue_options__.style = __vue_options__.style || {}
-	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
-	})
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,13 +260,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 396:
+/***/ 414:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -288,7 +296,7 @@
 
 /***/ },
 
-/***/ 397:
+/***/ 415:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -371,8 +379,8 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    countdown: __webpack_require__(398)
+	    panel: __webpack_require__(399),
+	    countdown: __webpack_require__(416)
 	  },
 	  methods: {
 	    tick: function tick(e, k) {
@@ -383,21 +391,21 @@
 
 /***/ },
 
-/***/ 398:
+/***/ 416:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(399)
+	__vue_styles__.push(__webpack_require__(417)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(400)
+	__vue_exports__ = __webpack_require__(418)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(401)
+	var __vue_template__ = __webpack_require__(419)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -409,22 +417,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/countdown.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/countdown.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-20c26e72"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 399:
+/***/ 417:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -435,7 +447,7 @@
 
 /***/ },
 
-/***/ 400:
+/***/ 418:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -535,11 +547,11 @@
 
 /***/ },
 
-/***/ 401:
+/***/ 419:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      overflow: "hidden",
 	      flexDirection: "row"
@@ -548,22 +560,22 @@
 	      "appear": _vm.appeared,
 	      "disappear": _vm.disappeared
 	    }
-	  }, [_vm._t("default")])
+	  }, [_vm._t("default")], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 402:
+/***/ 420:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Countdown",
 	      "type": "primary"
 	    }
-	  }, [_h('countdown', {
+	  }, [_c('countdown', {
 	    staticStyle: {
 	      width: "750",
 	      marginTop: "20",
@@ -577,39 +589,39 @@
 	        _vm.tick($event, 'countdown1')
 	      }
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["ctno1"]
-	  }, [_vm._s(_vm.countdown1.time.D)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.countdown1.time.D))]), _c('text', {
 	    staticClass: ["ctno1"],
 	    staticStyle: {
 	      backgroundColor: "#FFFFFF",
 	      color: "#AAAAAA"
 	    }
-	  }, ["day(s)"]), _h('text', {
+	  }, [_vm._v("day(s)")]), _c('text', {
 	    staticClass: ["ctno1"]
-	  }, [_vm._s(_vm.countdown1.time.hh)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.countdown1.time.hh))]), _c('text', {
 	    staticClass: ["ctno1"],
 	    staticStyle: {
 	      backgroundColor: "#FFFFFF",
 	      color: "#AAAAAA"
 	    }
-	  }, ["hour(s)"]), _h('text', {
+	  }, [_vm._v("hour(s)")]), _c('text', {
 	    staticClass: ["ctno1"]
-	  }, [_vm._s(_vm.countdown1.time.mm)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.countdown1.time.mm))]), _c('text', {
 	    staticClass: ["ctno1"],
 	    staticStyle: {
 	      backgroundColor: "#FFFFFF",
 	      color: "#AAAAAA"
 	    }
-	  }, ["minute(s)"]), _h('text', {
+	  }, [_vm._v("minute(s)")]), _c('text', {
 	    staticClass: ["ctno1"]
-	  }, [_vm._s(_vm.countdown1.time.ss)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.countdown1.time.ss))]), _c('text', {
 	    staticClass: ["ctno1"],
 	    staticStyle: {
 	      backgroundColor: "#FFFFFF",
 	      color: "#AAAAAA"
 	    }
-	  }, ["second(s)"])]), _h('countdown', {
+	  }, [_vm._v("second(s)")])]), _c('countdown', {
 	    staticStyle: {
 	      width: "600"
 	    },
@@ -621,17 +633,17 @@
 	        _vm.tick($event, 'countdown2')
 	      }
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["ctno2"]
-	  }, [_vm._s(_vm.countdown2.time.MM)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.countdown2.time.MM))]), _c('text', {
 	    staticClass: ["ctno2"],
 	    staticStyle: {
 	      backgroundColor: "#FFFFFF",
 	      color: "#AAAAAA"
 	    }
-	  }, [":"]), _h('text', {
+	  }, [_vm._v(":")]), _c('text', {
 	    staticClass: ["ctno2"]
-	  }, [_vm._s(_vm.countdown2.time.ss)])])])])
+	  }, [_vm._v(_vm._s(_vm.countdown2.time.ss))])])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/image.js b/ios/playground/bundlejs/vue/components/image.js
index 01095ba..f37010e 100644
--- a/ios/playground/bundlejs/vue/components/image.js
+++ b/ios/playground/bundlejs/vue/components/image.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(403)
+	__vue_styles__.push(__webpack_require__(421)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(404)
+	__vue_exports__ = __webpack_require__(422)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(405)
+	var __vue_template__ = __webpack_require__(423)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/image.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/image.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-27589d6a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,27 +260,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -284,22 +292,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -345,7 +357,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -367,21 +379,21 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 403:
+/***/ 421:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -392,7 +404,7 @@
 
 /***/ },
 
-/***/ 404:
+/***/ 422:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -449,23 +461,23 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    tip: __webpack_require__(391)
+	    panel: __webpack_require__(399),
+	    tip: __webpack_require__(409)
 	  }
 	};
 
 /***/ },
 
-/***/ 405:
+/***/ 423:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "width x height",
 	      "type": "primary"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -473,11 +485,11 @@
 	      "type": "warning",
 	      "value": "Weex screen width is 750"
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "300px",
@@ -486,7 +498,7 @@
 	    attrs: {
 	      "src": _vm.img
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "200px",
@@ -495,7 +507,7 @@
 	    attrs: {
 	      "src": _vm.img
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "50px",
@@ -504,12 +516,12 @@
 	    attrs: {
 	      "src": _vm.img
 	    }
-	  })])]), _h('panel', {
+	  })])], 1), _c('panel', {
 	    attrs: {
 	      "title": "GIF Animation",
 	      "type": "primary"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -517,11 +529,11 @@
 	      "type": "warning",
 	      "value": "Depanding on Native ImageSDK"
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "96px",
@@ -530,7 +542,7 @@
 	    attrs: {
 	      "src": "https://gtd.alicdn.com/tps/i4/T1HcvHXd4nXXb6ROYh-48-48.gif"
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "68px",
@@ -540,12 +552,12 @@
 	    attrs: {
 	      "src": "https://gw.alicdn.com/tps/TB1El.mKXXXXXXyapXXXXXXXXXX-34-34.gif"
 	    }
-	  })])]), _h('panel', {
+	  })])], 1), _c('panel', {
 	    attrs: {
 	      "title": "Base64",
 	      "type": "primary"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -553,11 +565,11 @@
 	      "type": "warning",
 	      "value": "Depanding on Native ImageSDK"
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "96px",
@@ -566,7 +578,7 @@
 	    attrs: {
 	      "src": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAhCAMAAABgOjJdAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAO1QTFRFhomSb3J8XGBrdnqDgYWNlJefV1tmfoGKU1diT1NfgISNgoWOYmZwio2Vi4+Wc3eAkJObZGhzUlZiaGt2U1djfYCKZGdyhYiQeHyFio6VgYWOVVllbHB6XWFsY2ZxaWx3jZCYXmFsfYCJcnZ/UVVham54V1tng4aPb3N8WV1pX2JtZWl0YWVvVlpmiYyUWVxohomRd3uEdHiBeX2GZ2t1hIeQVFhkf4OMbnJ8fYGKdnqEb3N9kJScY2dycnaAjpKZdHeBjpKajI+Yc3eBhYiRf4KLXmFtio6Wi4+XjZCZkJSbkZScjI+XlJifTlJe+rAZcwAAAZBJREFUeNp0lOeWgjAQhSdUBQRRbFjX7tpW3XUt23tL3v9xNigJIHh/zRk+5iR3ZgIkULWmwgv+A7VWDWWBR/nSt2gLUzIVbLH1lo8RRW1wEfqxPtCKUaKTMUhURuUhTIi6Q07l6LuAEFdpEld6tWNEx00CKKJ3jsR1xSHJcj4bB+LmkpxT49Yj8mqQUVBBciUk8ITepESJ+5AqY1+uwny5IjDPcADoN0BIwjLOsjKZOewtbi/9fvi338a44CetIai2H/cokPLj9tfEj2wVzD4rIWMlfpu+CXc5Pw4qh5X7AUw4gZIswUENGT8lAN1fMBVeAxIIxYR3Nin0imOe52emdxkyP8aY+0S9Y2d63cNoxvACRTaeI70slst+cjYCAnXmuuS1RKKmy1hKBX0hzaC3KOsxsmz2Ir2NzMcEbVCo+cf5oDOWOzNAucpxxoglnZlT1+KzXk4kymKwL4ttN+73dhHeuWV85zLL073Vw3v7MdDuE3a/JRrCmqwFQ2yV8gmvg/d+aPCMH0GLvB//AgwAo1MTpxsaxVoAAAAASUVORK5CYII="
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "68px",
@@ -576,16 +588,16 @@
 	    attrs: {
 	      "src": "data:image/gif;base64,R0lGODlhIgAiANU7AMvLy83Nzdra2srKysnJyejo6MbGxtzc3M7Ozuzs7NTU1N3d3fz8/NfX1/j4+Ovr6+/v79DQ0Obm5v39/d/f3/f398/Pz9vb2+np6fn5+f7+/tXV1fX19dnZ2erq6tHR0fb29sjIyMfHx+Li4vLy8u7u7ufn5/r6+uPj49bW1tPT09LS0sTExPT09ODg4O3t7eHh4eTk5MXFxd7e3vHx8fPz8/Dw8OXl5djY2P///8zMzP///wAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo0Q0QxODlDNENEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo0Q0QxODlDNUNEOEQxMUUzOEIzM0I1ODVGNjU1MjBBQiI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjRDRDE4OUMyQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjRDRDE4OUMzQ0Q4RDExRTM4QjMzQjU4NUY2NTUyMEFCIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+Af/+/fz7+vn49/b19PPy8fDv7u3s6+rp6Ofm5eTj4uHg397d3Nva2djX1tXU09LR0M/OzczLysnIx8bFxMPCwcC/vr28u7q5uLe2tbSzsrGwr66trKuqqainpqWko6KhoJ+enZybmpmYl5aVlJOSkZCPjo2Mi4qJiIeGhYSDgoGAf359fHt6eXh3dnV0c3JxcG9ubWxramloZ2ZlZGNiYWBfXl1cW1pZWFdWVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1NDMyMTAvLi0sKyopKCcmJSQjIiEgHx4dHBsaGRgXFhUUExIREA8ODQwLCgkIBwYFBAMCAQAAIfkEBQAAOwAsAAAAACIAIgAABv/AnXBIFDIEnxmoyGw6hw6LTrdKPK9PhmI6lWC/xQN3agWDMWNdhDTJmZ+gS1oXUDUoD8dbOHk05oAIHS8aYDRbgIlTDTVXGiiKkVwFTgwdkpg6GE1ymZIRJUUjnpkURBCkmQJDDBueAQGJACEAOqtCCaQhBgOAAxEAAAtCGQKeBAAIyGkiFzk3Ii64UpghCg45EstTAAYQOS0DMUKjmLMPOTkVAQRc3d8cAZQ7YpgDAzbpHDrt3AYlOTggeCDEmL0B3wLyc+ctBwgEHgpmupdwXz8dAGTAC2BCCIWJBACqYzfGwIEcHkSM21EgFiYRC9I9uDcm2IoAAGAIaYFIEgBkAh8UBJvTbUCAYUIkkDLAwiggWLagREiF6ZaQAlQlIR3SKeucAJuITLjkNc2CE0yOlOWiIsOTAgjKNnB7pYKLuKQimJhgxkEBJC7nWFBwwAPaPTs0kJBwIMWGDSkaHECRoMKTIAAh+QQFAAA7ACwPAA0AEgAJAAAGRMCdUKcTGo3E4jF5RDKHSaUzCdtFn9ar5IrVBUQsA+JBDBkMISuSIJAsdgkAgFIojHaDpm3nOJKEFQFpTTsgUi+EiUJBACH5BAUAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZRwJ1wSBwCAMVdYJkMhGSiYYDAYhmSIVyJQnDtCApTYXY0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEk7d0MlkpdBACH5BAUAADsALBAADQAQAAQAAAYmwN0uEBAajyGAMWQYHIW6QQQA0O0ACILyKLrkbqLQzpGTEJ6GYxAAIfkEBQAAOwAsEAANABAABAAABiTA3U6nExqPgKIwQDwuQzKRLrBjsQxKYwhXohAIO9ODAnDKjkEAIfkEBQAAOwAsDwANABIACQAABkPAnXBIHOp0xR0yqTwum86k8wiDTo1TnSQbFeoCIpYB8TiGDIaQ0kgQSBa7BABAKRRGu0HRtnMQSUIVAWpJIE8vTIlBACH5BAUAADsALA8AEQASAAgAAAYfQJ1wSCzqEA+jcmh5LZeWxFOJ8EyVkqsRpi0uukRBEAAh+QQFAAA7ACwPABEAEgAIAAAGWcCdcEgUBkQsAzFkMISKO4JAskAkAABKoTDaDYYAgy3nQHgGA1IuVwk8hQAZJAfSmQaE17pNIBoOOR4iMTsiC2sPaERYKwEAcAQfClhQYQMBfiyXUDsBmDtBACH5BAUAADsALA8ADQASAAkAAAZQwJ1wSBwCAMVdICkMhGSiYYDAYhmSIVyJQnDtCArTg3I0yiC51iAGCD1yucrUaEBzAoXBwAbnfOklOX4PemiCf0QQOyCJQhw6BEx3QyVMlkEAIfkEBWQAOwAsEAANABAABAAABibA3S4QEBqPIYAxZBgchbpBBADQ7QAIgvIouuRuotDOkZMQnoZjEAA7"
 	    }
-	  })])]), _h('panel', {
+	  })])], 1), _c('panel', {
 	    attrs: {
 	      "title": "resize",
 	      "type": "primary"
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "resize=stretch(default) 600 x 200 "
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "600px",
@@ -598,11 +610,11 @@
 	      "src": _vm.img,
 	      "resize": "stretch"
 	    }
-	  })]), _h('panel', {
+	  })]), _c('panel', {
 	    attrs: {
 	      "title": "resize=contain 600 x 200 "
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "600px",
@@ -615,11 +627,11 @@
 	      "src": _vm.img,
 	      "resize": "contain"
 	    }
-	  })]), _h('panel', {
+	  })]), _c('panel', {
 	    attrs: {
 	      "title": "resize=cover 600 x 200"
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "600px",
@@ -632,7 +644,7 @@
 	      "src": _vm.img,
 	      "resize": "cover"
 	    }
-	  })])])])
+	  })])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/input.js b/ios/playground/bundlejs/vue/components/input.js
index e627c56..3bf2e5b 100644
--- a/ios/playground/bundlejs/vue/components/input.js
+++ b/ios/playground/bundlejs/vue/components/input.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(406)
+	__vue_styles__.push(__webpack_require__(424)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(407)
+	__vue_exports__ = __webpack_require__(425)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(408)
+	var __vue_template__ = __webpack_require__(426)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/input.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/input.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7d23074e"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,192 +91,34 @@
 
 /***/ },
 
-/***/ 381:
-/***/ function(module, exports, __webpack_require__) {
-
-	var __vue_exports__, __vue_options__
-	var __vue_styles__ = []
-
-	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
-	)
-
-	/* script */
-	__vue_exports__ = __webpack_require__(383)
-
-	/* template */
-	var __vue_template__ = __webpack_require__(384)
-	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
-	if (
-	  typeof __vue_exports__.default === "object" ||
-	  typeof __vue_exports__.default === "function"
-	) {
-	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
-	__vue_options__ = __vue_exports__ = __vue_exports__.default
-	}
-	if (typeof __vue_options__ === "function") {
-	  __vue_options__ = __vue_options__.options
-	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
-	__vue_options__.render = __vue_template__.render
-	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
-	__vue_options__.style = __vue_options__.style || {}
-	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
-	})
-
-	module.exports = __vue_exports__
-
-
-/***/ },
-
-/***/ 382:
-/***/ function(module, exports) {
-
-	module.exports = {
-	  "panel": {
-	    "marginBottom": 20,
-	    "backgroundColor": "#ffffff",
-	    "borderColor": "#dddddd",
-	    "borderWidth": 1
-	  },
-	  "panel-primary": {
-	    "borderColor": "rgb(40,96,144)"
-	  },
-	  "panel-success": {
-	    "borderColor": "rgb(76,174,76)"
-	  },
-	  "panel-info": {
-	    "borderColor": "rgb(70,184,218)"
-	  },
-	  "panel-warning": {
-	    "borderColor": "rgb(238,162,54)"
-	  },
-	  "panel-danger": {
-	    "borderColor": "rgb(212,63,58)"
-	  },
-	  "panel-header": {
-	    "backgroundColor": "#f5f5f5",
-	    "fontSize": 40,
-	    "color": "#333333"
-	  },
-	  "panel-header-primary": {
-	    "backgroundColor": "rgb(40,96,144)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-success": {
-	    "backgroundColor": "rgb(92,184,92)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-info": {
-	    "backgroundColor": "rgb(91,192,222)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-warning": {
-	    "backgroundColor": "rgb(240,173,78)",
-	    "color": "#ffffff"
-	  },
-	  "panel-header-danger": {
-	    "backgroundColor": "rgb(217,83,79)",
-	    "color": "#ffffff"
-	  }
-	}
-
-/***/ },
-
-/***/ 383:
-/***/ function(module, exports) {
-
-	'use strict';
-
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-	//
-
-	module.exports = {
-	  props: {
-	    type: { default: 'default' },
-	    title: { default: '' },
-	    paddingBody: { default: 20 },
-	    paddingHead: { default: 20 },
-	    dataClass: { default: '' }, // FIXME transfer class
-	    border: { default: 0 }
-	  }
-	};
-
-/***/ },
-
-/***/ 384:
-/***/ function(module, exports) {
-
-	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
-	    class: ['panel', 'panel-' + _vm.type],
-	    style: {
-	      borderWidth: _vm.border
-	    }
-	  }, [_h('text', {
-	    class: ['panel-header', 'panel-header-' + _vm.type],
-	    style: {
-	      paddingTop: _vm.paddingHead,
-	      paddingBottom: _vm.paddingHead,
-	      paddingLeft: _vm.paddingHead * 1.5,
-	      paddingRight: _vm.paddingHead * 1.5
-	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
-	    class: ['panel-body', 'panel-body-' + _vm.type],
-	    style: {
-	      paddingTop: _vm.paddingBody,
-	      paddingBottom: _vm.paddingBody,
-	      paddingLeft: _vm.paddingBody * 1.5,
-	      paddingRight: _vm.paddingBody * 1.5
-	    }
-	  }, [_vm._t("default")])])
-	},staticRenderFns: []}
-	module.exports.render._withStripped = true
-
-/***/ },
-
-/***/ 406:
+/***/ 424:
 /***/ function(module, exports) {
 
 	module.exports = {
 	  "input": {
 	    "fontSize": 60,
 	    "height": 80,
-	    "width": 400
+	    "width": 750
+	  },
+	  "button": {
+	    "fontSize": 36,
+	    "width": 200,
+	    "color": "#41B883",
+	    "textAlign": "center",
+	    "paddingTop": 10,
+	    "paddingBottom": 10,
+	    "borderWidth": 2,
+	    "borderStyle": "solid",
+	    "marginRight": 20,
+	    "borderColor": "rgb(162,217,192)",
+	    "backgroundColor": "rgba(162,217,192,0.2)"
 	  }
 	}
 
 /***/ },
 
-/***/ 407:
-/***/ function(module, exports, __webpack_require__) {
+/***/ 425:
+/***/ function(module, exports) {
 
 	'use strict';
 
@@ -302,61 +148,594 @@
 	//
 	//
 	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
 
-	var modal = __weex_require_module__('modal');
 	module.exports = {
 	  data: function data() {
 	    return {
 	      txtInput: '',
-	      txtChange: ''
+	      txtChange: '',
+	      txtReturnType: '',
+	      txtSelection: '',
+	      autofocus: false
 	    };
 	  },
-	  components: {
-	    panel: __webpack_require__(381)
-	  },
 	  methods: {
+	    ready: function ready() {
+	      var self = this;
+	      setTimeout(function () {
+	        self.autofocus = true;
+	      }, 1000);
+	    },
 	    onchange: function onchange(event) {
 	      this.txtChange = event.value;
-	      modal.toast({
-	        message: 'onchange: ' + event.value,
-	        duration: 2
-	      });
+	      console.log('onchange', event.value);
+	    },
+	    onreturn: function onreturn(event) {
+	      this.txtReturnType = event.returnKeyType;
+	      console.log('onreturn', event.type);
 	    },
 	    oninput: function oninput(event) {
 	      this.txtInput = event.value;
-	      modal.toast({
-	        message: 'onitput: ' + event.value,
-	        duration: 1
-	      });
+	      console.log('oninput', event.value);
+	    },
+	    focus: function focus() {
+	      this.$refs['input1'].focus();
+	    },
+	    blur: function blur() {
+	      this.$refs['input1'].blur();
+	    },
+	    setRange: function setRange() {
+	      console.log(this.$refs["inputselection"]);
+	      this.$refs["inputselection"].setSelectionRange(2, 6);
 	    }
 	  }
 	};
 
 /***/ },
 
-/***/ 408:
+/***/ 426:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
-	    attrs: {
-	      "title": "input",
-	      "type": "primary"
+	  return _c('div', [_c('div', [_c('text', {
+	    staticStyle: {
+	      fontSize: "40px"
 	    }
-	  }, [_h('input', {
+	  }, [_vm._v("oninput: " + _vm._s(_vm.txtInput))]), _c('text', {
+	    staticStyle: {
+	      fontSize: "40px"
+	    }
+	  }, [_vm._v("onchange: " + _vm._s(_vm.txtChange))]), _c('text', {
+	    staticStyle: {
+	      fontSize: "40px"
+	    }
+	  }, [_vm._v("onreturntype: " + _vm._s(_vm.txtReturnType))])]), _c('scroller', [_c('div', [_vm._m(0), _c('input', {
 	    staticClass: ["input"],
 	    attrs: {
 	      "type": "text",
-	      "placeholder": "Text Input",
-	      "autofocus": "true",
+	      "placeholder": "Input Text",
+	      "autofocus": _vm.autofocus,
 	      "value": ""
 	    },
 	    on: {
 	      "change": _vm.onchange,
 	      "input": _vm.oninput
 	    }
-	  }), _h('text', ["oninput: " + _vm._s(_vm.txtInput)]), _h('text', ["onchange: " + _vm._s(_vm.txtChange)])])])
-	},staticRenderFns: []}
+	  })]), _c('div', [_vm._m(1), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "password",
+	      "placeholder": "Input Password"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(2), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "url",
+	      "placeholder": "Input URL"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(3), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "email",
+	      "placeholder": "Input Email"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(4), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "tel",
+	      "placeholder": "Input Tel"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(5), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "time",
+	      "placeholder": "Input Time"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(6), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "date",
+	      "placeholder": "Input Date",
+	      "max": "2017-12-12",
+	      "min": "2015-01-01"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(7), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "default"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(8), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "go"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(9), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "next"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(10), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "search"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(11), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "send"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(12), _c('input', {
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "returnKeyType": "done"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })]), _c('div', [_vm._m(13), _c('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      marginBottom: "16px",
+	      justifyContent: "space-between"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["button"],
+	    attrs: {
+	      "value": "Focus",
+	      "type": "primary"
+	    },
+	    on: {
+	      "click": _vm.focus
+	    }
+	  }), _c('text', {
+	    staticClass: ["button"],
+	    attrs: {
+	      "value": "Blur",
+	      "type": "primary"
+	    },
+	    on: {
+	      "click": _vm.blur
+	    }
+	  })]), _c('input', {
+	    ref: "input1",
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "Input1",
+	      "value": ""
+	    }
+	  })]), _c('div', [_vm._m(14), _c('div', {
+	    staticStyle: {
+	      flexDirection: "row",
+	      marginBottom: "16px",
+	      justifyContent: "space-between"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["button"],
+	    attrs: {
+	      "value": "setRange",
+	      "type": "primary"
+	    },
+	    on: {
+	      "click": _vm.setRange
+	    }
+	  })]), _c('input', {
+	    ref: "inputselection",
+	    staticClass: ["input"],
+	    attrs: {
+	      "type": "text",
+	      "placeholder": "please input",
+	      "value": "123456789"
+	    },
+	    on: {
+	      "change": _vm.onchange,
+	      "return": _vm.onreturn,
+	      "input": _vm.oninput
+	    }
+	  })])])])
+	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = text")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = password")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = url")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = email")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = tel")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = time")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input type = date")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = default")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = go")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = next")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = search")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = send")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input keyboard = done")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("function focus() & blur()")])])
+	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticStyle: {
+	      backgroundColor: "#286090"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      height: "80",
+	      padding: "20",
+	      color: "#FFFFFF"
+	    }
+	  }, [_vm._v("input selection")])])
+	}]}
 	module.exports.render._withStripped = true
 
 /***/ }
diff --git a/ios/playground/bundlejs/vue/components/list.js b/ios/playground/bundlejs/vue/components/list.js
index 8725170..4c25e16 100644
--- a/ios/playground/bundlejs/vue/components/list.js
+++ b/ios/playground/bundlejs/vue/components/list.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(409)
+	__vue_styles__.push(__webpack_require__(427)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(410)
+	__vue_exports__ = __webpack_require__(428)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(411)
+	var __vue_template__ = __webpack_require__(429)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/list.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/list.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-b4a37b42"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 409:
+/***/ 427:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -111,13 +115,14 @@
 	    "borderBottomWidth": 2,
 	    "borderBottomColor": "#c0c0c0",
 	    "height": 100,
-	    "padding": 20
+	    "padding": 20,
+	    "backgroundColor:active": "#00BDFF"
 	  }
 	}
 
 /***/ },
 
-/***/ 410:
+/***/ 428:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -168,6 +173,9 @@
 	//
 	//
 	//
+	//
+	//
+	//
 
 	module.exports = {
 	  methods: {
@@ -209,14 +217,14 @@
 
 /***/ },
 
-/***/ 411:
+/***/ 429:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('list', {
+	  return _c('div', [_c('list', {
 	    staticClass: ["list"]
-	  }, [_vm._l((_vm.rows), function(v, i) {
-	    return _h('cell', {
+	  }, _vm._l((_vm.rows), function(v, i) {
+	    return _c('cell', {
 	      staticClass: ["row"],
 	      appendAsTree: true,
 	      attrs: {
@@ -227,12 +235,12 @@
 	        "appear": _vm.onappear,
 	        "disappear": _vm.ondisappear
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticClass: ["item"]
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["item-title"]
-	    }, ["row " + _vm._s(v.id)])])])
-	  })]), _h('text', {
+	    }, [_vm._v("row " + _vm._s(v.id))])])])
+	  })), _c('text', {
 	    staticClass: ["count"],
 	    attrs: {
 	      "value": 'Appear items: ' + _vm.appearMin + ' ~ ' + _vm.appearMax
diff --git a/ios/playground/bundlejs/vue/components/marquee.js b/ios/playground/bundlejs/vue/components/marquee.js
index 27a0e9d..777f14b 100644
--- a/ios/playground/bundlejs/vue/components/marquee.js
+++ b/ios/playground/bundlejs/vue/components/marquee.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(412)
+	__vue_exports__ = __webpack_require__(430)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(417)
+	var __vue_template__ = __webpack_require__(435)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/marquee.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/marquee.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 412:
+/***/ 430:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -309,8 +316,8 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    marquee: __webpack_require__(413)
+	    panel: __webpack_require__(399),
+	    marquee: __webpack_require__(431)
 	  },
 	  methods: {
 	    marqueeChange: function marqueeChange(e) {
@@ -321,21 +328,21 @@
 
 /***/ },
 
-/***/ 413:
+/***/ 431:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(414)
+	__vue_styles__.push(__webpack_require__(432)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(415)
+	__vue_exports__ = __webpack_require__(433)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(416)
+	var __vue_template__ = __webpack_require__(434)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -347,22 +354,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/marquee.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/marquee.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-61eb1623"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 414:
+/***/ 432:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -379,7 +390,7 @@
 
 /***/ },
 
-/***/ 415:
+/***/ 433:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -410,7 +421,7 @@
 	//
 	//
 
-	var _animation = __weex_require_module__('animation');
+	var _animation = weex.requireModule('animation');
 
 	module.exports = {
 	  props: {
@@ -464,35 +475,35 @@
 
 /***/ },
 
-/***/ 416:
+/***/ 434:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrap"],
 	    on: {
 	      "appear": _vm.appeared,
 	      "disappear": _vm.disappeared
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    ref: "anim",
 	    staticClass: ["anim"]
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 417:
+/***/ 435:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Marquee",
 	      "type": "primary"
 	    }
-	  }, [_h('marquee', {
+	  }, [_c('marquee', {
 	    style: {
 	      width: 700,
 	      height: _vm.marquee.height * 2,
@@ -510,22 +521,22 @@
 	    on: {
 	      "change": _vm.marqueeChange
 	    }
-	  }, [_vm._l((_vm.marquee.list), function(item) {
-	    return _h('div', {
+	  }, _vm._l((_vm.marquee.list), function(item) {
+	    return _c('div', {
 	      style: {
 	        height: _vm.marquee.height * _vm.marquee.length,
 	        paddingTop: _vm.marquee.height * 0.5,
 	        paddingBottom: _vm.marquee.height * 0.5,
 	        overflow: 'hidden'
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      style: {
 	        height: _vm.marquee.height,
 	        color: 'rgb(60, 118, 61)',
 	        fontSize: 28
 	      }
-	    }, [_vm._s(item.text)])])
-	  })])])])
+	    }, [_vm._v(_vm._s(item.text))])])
+	  }))], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/navigator.js b/ios/playground/bundlejs/vue/components/navigator.js
index 4c50282..116cf01 100644
--- a/ios/playground/bundlejs/vue/components/navigator.js
+++ b/ios/playground/bundlejs/vue/components/navigator.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(418)
+	__vue_exports__ = __webpack_require__(436)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(428)
+	var __vue_template__ = __webpack_require__(446)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/navigator.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/navigator.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,27 +255,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -280,22 +287,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -395,7 +406,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -418,21 +429,21 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 418:
+/***/ 436:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -459,8 +470,8 @@
 	//
 	//
 
-	var navigator = __weex_require_module__('navigator');
-	var getBaseURL = __webpack_require__(419).getBaseURL;
+	var navigator = weex.requireModule('navigator');
+	var getBaseURL = __webpack_require__(437).getBaseURL;
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -471,9 +482,9 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    navpage: __webpack_require__(420),
-	    button: __webpack_require__(385)
+	    panel: __webpack_require__(399),
+	    navpage: __webpack_require__(438),
+	    button: __webpack_require__(403)
 	  },
 	  created: function created() {
 	    this.$getConfig(function (config) {
@@ -512,7 +523,7 @@
 
 /***/ },
 
-/***/ 419:
+/***/ 437:
 /***/ function(module, exports) {
 
 	exports.getBaseURL = function (vm) {
@@ -536,7 +547,7 @@
 	    }
 	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
 	  }
-	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  var h5Base = './vue.html?page=./' + vm.dir + '/build/';
 	  // in Native
 	  var base = nativeBase;
 	  if (typeof window === 'object') {
@@ -549,21 +560,21 @@
 
 /***/ },
 
-/***/ 420:
+/***/ 438:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(421)
+	__vue_styles__.push(__webpack_require__(439)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(422)
+	__vue_exports__ = __webpack_require__(440)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(427)
+	var __vue_template__ = __webpack_require__(445)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -575,22 +586,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/navpage.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/navpage.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7d252f9a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 421:
+/***/ 439:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -606,7 +621,7 @@
 
 /***/ },
 
-/***/ 422:
+/***/ 440:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -648,7 +663,7 @@
 
 	module.exports = {
 	  components: {
-	    navbar: __webpack_require__(423)
+	    navbar: __webpack_require__(441)
 	  },
 	  props: {
 	    dataRole: { default: 'navbar' },
@@ -675,21 +690,21 @@
 
 /***/ },
 
-/***/ 423:
+/***/ 441:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(424)
+	__vue_styles__.push(__webpack_require__(442)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(425)
+	__vue_exports__ = __webpack_require__(443)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(426)
+	var __vue_template__ = __webpack_require__(444)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -701,22 +716,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/navbar.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/navbar.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-2a6b391f"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 424:
+/***/ 442:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -771,7 +790,7 @@
 
 /***/ },
 
-/***/ 425:
+/***/ 443:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -899,11 +918,11 @@
 
 /***/ },
 
-/***/ 426:
+/***/ 444:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["container"],
 	    style: {
 	      height: _vm.height,
@@ -912,7 +931,7 @@
 	    attrs: {
 	      "dataRole": _vm.dataRole
 	    }
-	  }, [(!_vm.rightItemSrc) ? _h('text', {
+	  }, [(!_vm.rightItemSrc) ? _c('text', {
 	    staticClass: ["right-text"],
 	    style: {
 	      color: _vm.rightItemColor
@@ -923,7 +942,7 @@
 	    on: {
 	      "click": _vm.onclickrightitem
 	    }
-	  }, [_vm._s(_vm.rightItemTitle)]) : _vm._e(), (_vm.rightItemSrc) ? _h('image', {
+	  }, [_vm._v(_vm._s(_vm.rightItemTitle))]) : _vm._e(), (_vm.rightItemSrc) ? _c('image', {
 	    staticClass: ["right-image"],
 	    attrs: {
 	      "naviItemPosition": "right",
@@ -932,7 +951,7 @@
 	    on: {
 	      "click": _vm.onclickrightitem
 	    }
-	  }) : _vm._e(), (!_vm.leftItemSrc) ? _h('text', {
+	  }) : _vm._e(), (!_vm.leftItemSrc) ? _c('text', {
 	    staticClass: ["left-text"],
 	    style: {
 	      color: _vm.leftItemColor
@@ -943,7 +962,7 @@
 	    on: {
 	      "click": _vm.onclickleftitem
 	    }
-	  }, [_vm._s(_vm.leftItemTitle)]) : _vm._e(), (_vm.leftItemSrc) ? _h('image', {
+	  }, [_vm._v(_vm._s(_vm.leftItemTitle))]) : _vm._e(), (_vm.leftItemSrc) ? _c('image', {
 	    staticClass: ["left-image"],
 	    attrs: {
 	      "naviItemPosition": "left",
@@ -952,7 +971,7 @@
 	    on: {
 	      "click": _vm.onclickleftitem
 	    }
-	  }) : _vm._e(), _h('text', {
+	  }) : _vm._e(), _c('text', {
 	    staticClass: ["center-text"],
 	    style: {
 	      color: _vm.titleColor
@@ -960,19 +979,19 @@
 	    attrs: {
 	      "naviItemPosition": "center"
 	    }
-	  }, [_vm._s(_vm.title)])])
+	  }, [_vm._v(_vm._s(_vm.title))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 427:
+/***/ 445:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"]
-	  }, [_h('navbar', {
+	  }, [_c('navbar', {
 	    attrs: {
 	      "dataRole": _vm.dataRole,
 	      "height": _vm.height,
@@ -990,22 +1009,22 @@
 	      "naviBarRightItemClick": _vm.naviBarRightItemClick,
 	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticClass: ["wrapper"],
 	    style: {
 	      marginTop: _vm.height
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 428:
+/***/ 446:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('navpage', {
+	  return _c('navpage', {
 	    attrs: {
 	      "dataRole": "none",
 	      "height": _vm.navBarHeight,
@@ -1020,11 +1039,11 @@
 	      "naviBarLeftItemClick": _vm.naviBarLeftItemClick,
 	      "naviBarRightItemClick": _vm.naviBarRightItemClick
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "push a new page"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "type": "primary",
 	      "size": "small",
@@ -1035,11 +1054,11 @@
 	        _vm.push($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "pop to the last page"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "type": "success",
 	      "size": "small",
@@ -1050,7 +1069,7 @@
 	        _vm.pop($event)
 	      }
 	    }
-	  })])])
+	  })], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/scroller.js b/ios/playground/bundlejs/vue/components/scroller.js
index f1225a8..8544127 100644
--- a/ios/playground/bundlejs/vue/components/scroller.js
+++ b/ios/playground/bundlejs/vue/components/scroller.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(429)
+	__vue_styles__.push(__webpack_require__(447)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(430)
+	__vue_exports__ = __webpack_require__(448)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(431)
+	var __vue_template__ = __webpack_require__(449)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/scroller.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/scroller.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-bc3ac90a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 429:
+/***/ 447:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -136,7 +140,7 @@
 
 /***/ },
 
-/***/ 430:
+/***/ 448:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -260,42 +264,42 @@
 
 /***/ },
 
-/***/ 431:
+/***/ 449:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', {
+	  return _c('scroller', {
 	    staticClass: ["list"],
 	    appendAsTree: true,
 	    attrs: {
 	      "append": "tree"
 	    }
 	  }, [_vm._l((_vm.sections), function(sec) {
-	    return _h('div', {
+	    return _c('div', {
 	      staticClass: ["section"]
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticClass: ["header"]
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["header-title"]
-	    }, [_vm._s(sec.title)])]), _vm._l((sec.items), function(item) {
-	      return _h('div', {
+	    }, [_vm._v(_vm._s(sec.title))])]), _vm._l((sec.items), function(item) {
+	      return _c('div', {
 	        staticClass: ["item"]
-	      }, [_h('text', {
+	      }, [_c('text', {
 	        staticClass: ["item-title"]
-	      }, ["row " + _vm._s(item.id)])])
-	    })])
-	  }), _h('loading', {
+	      }, [_vm._v("row " + _vm._s(item.id))])])
+	    })], 2)
+	  }), _c('loading', {
 	    staticClass: ["loading-view"],
 	    attrs: {
 	      "display": _vm.loading_display,
 	      "onloading": "onloading"
 	    }
-	  }, [_h('loading-indicator', {
+	  }, [_c('loading-indicator', {
 	    staticStyle: {
 	      height: "60",
 	      width: "60"
 	    }
-	  })])])
+	  })], 1)], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/slider.js b/ios/playground/bundlejs/vue/components/slider.js
index faec8f8..be6b93b 100644
--- a/ios/playground/bundlejs/vue/components/slider.js
+++ b/ios/playground/bundlejs/vue/components/slider.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(432)
+	__vue_styles__.push(__webpack_require__(450)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(433)
+	__vue_exports__ = __webpack_require__(451)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(442)
+	var __vue_template__ = __webpack_require__(460)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/slider.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/slider.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-5e494ae2"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,13 +260,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 432:
+/***/ 450:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -283,7 +291,7 @@
 
 /***/ },
 
-/***/ 433:
+/***/ 451:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -459,8 +467,8 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    sliderPage: __webpack_require__(434)
+	    panel: __webpack_require__(399),
+	    sliderPage: __webpack_require__(452)
 	  },
 	  methods: {
 	    togglePlay: function togglePlay() {
@@ -487,21 +495,21 @@
 
 /***/ },
 
-/***/ 434:
+/***/ 452:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(435)
+	__vue_styles__.push(__webpack_require__(453)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(436)
+	__vue_exports__ = __webpack_require__(454)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(441)
+	var __vue_template__ = __webpack_require__(459)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -513,22 +521,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/slider-page.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/slider-page.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-8d84a608"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 435:
+/***/ 453:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -542,7 +554,7 @@
 
 /***/ },
 
-/***/ 436:
+/***/ 454:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -569,27 +581,27 @@
 	    items: { default: [] }
 	  },
 	  components: {
-	    sliderItem: __webpack_require__(437)
+	    sliderItem: __webpack_require__(455)
 	  }
 	};
 
 /***/ },
 
-/***/ 437:
+/***/ 455:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(438)
+	__vue_styles__.push(__webpack_require__(456)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(439)
+	__vue_exports__ = __webpack_require__(457)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(440)
+	var __vue_template__ = __webpack_require__(458)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -601,22 +613,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/slider-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/slider-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-679a3900"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 438:
+/***/ 456:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -628,7 +644,7 @@
 
 /***/ },
 
-/***/ 439:
+/***/ 457:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -647,11 +663,11 @@
 
 /***/ },
 
-/***/ 440:
+/***/ 458:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('image', {
+	  return _c('image', {
 	    staticClass: ["slider-item"],
 	    attrs: {
 	      "src": _vm.image
@@ -662,236 +678,17 @@
 
 /***/ },
 
-/***/ 441:
+/***/ 459:
 /***/ function(module, exports) {
 
-	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
-	    staticClass: ["slider-page"]
-	  }, [_vm._l((_vm.items), function(v) {
-	    return _h('slider-item', {
-	      attrs: {
-	        "image": v.image,
-	        "link": v.link
-	      }
-	    })
-	  })])
-	},staticRenderFns: []}
-	module.exports.render._withStripped = true
+	module.exports={render:function(){},staticRenderFns:[]}
 
 /***/ },
 
-/***/ 442:
+/***/ 460:
 /***/ function(module, exports) {
 
-	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', {
-	    staticClass: ["body"]
-	  }, [_h('panel', {
-	    attrs: {
-	      "title": "auto-play",
-	      "type": "primary"
-	    }
-	  }, [_h('panel', {
-	    attrs: {
-	      "title": "auto-play = false",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[1].interval,
-	      "autoPlay": "false"
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"]
-	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "auto-play = true",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[0].interval,
-	      "autoPlay": _vm.sliders[0].autoPlay
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"]
-	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])])]), _h('panel', {
-	    attrs: {
-	      "title": 'Event, ' + _vm.eventCnt + ' change',
-	      "type": "primary"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[0].interval,
-	      "autoPlay": _vm.sliders[0].autoPlay
-	    },
-	    on: {
-	      "change": _vm.handleSliderChange
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"]
-	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "Indicator",
-	      "type": "primary"
-	    }
-	  }, [_h('panel', {
-	    attrs: {
-	      "title": "default style",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[0].interval,
-	      "autoPlay": _vm.sliders[0].autoPlay
-	    },
-	    on: {
-	      "change": _vm.handleSliderChange
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"]
-	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "width & height",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[0].interval,
-	      "autoPlay": _vm.sliders[0].autoPlay
-	    }
-	  }, [_h('indicator', {
-	    staticStyle: {
-	      itemColor: "#dddddd",
-	      width: "714",
-	      height: "460"
-	    }
-	  }), _vm._l((_vm.sliders[0].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "left & top",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[1].interval,
-	      "autoPlay": _vm.sliders[1].autoPlay
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"],
-	    staticStyle: {
-	      top: "-140",
-	      left: "-240"
-	    }
-	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "itemColor & itemSelectedColor",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[2].interval,
-	      "autoPlay": _vm.sliders[2].autoPlay
-	    }
-	  }, [_h('indicator', {
-	    staticClass: ["indicator"],
-	    staticStyle: {
-	      itemSelectedColor: "rgb(217, 83, 79)"
-	    }
-	  }), _vm._l((_vm.sliders[2].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])]), _h('panel', {
-	    attrs: {
-	      "title": "itemSize",
-	      "padding-body": "0"
-	    }
-	  }, [_h('slider', {
-	    staticClass: ["slider"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree",
-	      "interval": _vm.sliders[1].interval,
-	      "autoPlay": _vm.sliders[1].autoPlay
-	    }
-	  }, [_h('indicator', {
-	    staticStyle: {
-	      itemColor: "#dddddd",
-	      itemSize: "40",
-	      top: "140",
-	      left: "180",
-	      width: "700",
-	      height: "380"
-	    }
-	  }), _vm._l((_vm.sliders[1].sliderPages), function(v) {
-	    return _h('slider-page', {
-	      attrs: {
-	        "items": v.items
-	      }
-	    })
-	  })])])])])
-	},staticRenderFns: []}
-	module.exports.render._withStripped = true
+	module.exports={render:function(){},staticRenderFns:[]}
 
 /***/ }
 
diff --git a/ios/playground/bundlejs/vue/components/tabbar.js b/ios/playground/bundlejs/vue/components/tabbar.js
index c266b0b..7afd55b 100644
--- a/ios/playground/bundlejs/vue/components/tabbar.js
+++ b/ios/playground/bundlejs/vue/components/tabbar.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(443)
+	__vue_exports__ = __webpack_require__(461)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(452)
+	var __vue_template__ = __webpack_require__(470)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/tabbar.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/tabbar.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,7 +86,7 @@
 
 /***/ },
 
-/***/ 419:
+/***/ 437:
 /***/ function(module, exports) {
 
 	exports.getBaseURL = function (vm) {
@@ -107,7 +110,7 @@
 	    }
 	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
 	  }
-	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  var h5Base = './vue.html?page=./' + vm.dir + '/build/';
 	  // in Native
 	  var base = nativeBase;
 	  if (typeof window === 'object') {
@@ -120,7 +123,7 @@
 
 /***/ },
 
-/***/ 443:
+/***/ 461:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -132,7 +135,7 @@
 	//
 	//
 
-	var getBaseURL = __webpack_require__(419).getBaseURL;
+	var getBaseURL = __webpack_require__(437).getBaseURL;
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -168,7 +171,7 @@
 	    };
 	  },
 	  components: {
-	    tabbar: __webpack_require__(444)
+	    tabbar: __webpack_require__(462)
 	  },
 	  created: function created() {
 	    var baseURL = getBaseURL(this);
@@ -186,21 +189,21 @@
 
 /***/ },
 
-/***/ 444:
+/***/ 462:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(445)
+	__vue_styles__.push(__webpack_require__(463)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(446)
+	__vue_exports__ = __webpack_require__(464)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(451)
+	var __vue_template__ = __webpack_require__(469)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -212,22 +215,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tabbar.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tabbar.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-72e74326"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 445:
+/***/ 463:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -260,7 +267,7 @@
 
 /***/ },
 
-/***/ 446:
+/***/ 464:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -328,7 +335,7 @@
 	    };
 	  },
 	  components: {
-	    tabitem: __webpack_require__(447)
+	    tabitem: __webpack_require__(465)
 	  },
 	  created: function created() {
 	    this.select(this.selectedIndex);
@@ -358,21 +365,21 @@
 
 /***/ },
 
-/***/ 447:
+/***/ 465:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(448)
+	__vue_styles__.push(__webpack_require__(466)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(449)
+	__vue_exports__ = __webpack_require__(467)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(450)
+	var __vue_template__ = __webpack_require__(468)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -384,22 +391,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tabitem.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tabitem.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-8733b9ae"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 448:
+/***/ 466:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -431,7 +442,7 @@
 
 /***/ },
 
-/***/ 449:
+/***/ 467:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -501,11 +512,11 @@
 
 /***/ },
 
-/***/ 450:
+/***/ 468:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["container"],
 	    style: {
 	      backgroundColor: _vm.backgroundColor
@@ -513,84 +524,50 @@
 	    on: {
 	      "click": _vm.onclickitem
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["top-line"],
 	    attrs: {
 	      "src": "http://gtms03.alicdn.com/tps/i3/TB1mdsiMpXXXXXpXXXXNw4JIXXX-640-4.png"
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["tab-icon"],
 	    attrs: {
 	      "src": _vm.icon
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticClass: ["tab-text"],
 	    style: {
 	      color: _vm.titleColor
 	    }
-	  }, [_vm._s(_vm.title)])])
+	  }, [_vm._v(_vm._s(_vm.title))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 451:
+/***/ 469:
 /***/ function(module, exports) {
 
-	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
-	    staticClass: ["wrapper"]
-	  }, [_vm._l((_vm.tabItems), function(item) {
-	    return _h('embed', {
-	      staticClass: ["content"],
-	      style: {
-	        visibility: item.visibility
-	      },
-	      attrs: {
-	        "src": item.src,
-	        "type": "weex"
-	      }
-	    })
-	  }), _h('div', {
-	    staticClass: ["tabbar"],
-	    appendAsTree: true,
-	    attrs: {
-	      "append": "tree"
-	    }
-	  }, [_vm._l((_vm.tabItems), function(item) {
-	    return _h('tabitem', {
-	      attrs: {
-	        "index": item.index,
-	        "icon": item.icon,
-	        "title": item.title,
-	        "titleColor": item.titleColor
-	      },
-	      on: {
-	        "tabItemOnClick": _vm.tabItemOnClick
-	      }
-	    })
-	  })])])
-	},staticRenderFns: []}
-	module.exports.render._withStripped = true
+	module.exports={render:function(){},staticRenderFns:[]}
 
 /***/ },
 
-/***/ 452:
+/***/ 470:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      flexDirection: "column"
 	    }
-	  }, [_h('tabbar', {
+	  }, [_c('tabbar', {
 	    attrs: {
 	      "tabItems": _vm.tabItems
 	    },
 	    on: {
 	      "tabBarOnClick": _vm.tabBarOnClick
 	    }
-	  })])
+	  })], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/text.js b/ios/playground/bundlejs/vue/components/text.js
index 31ec7e7..26c562a 100644
--- a/ios/playground/bundlejs/vue/components/text.js
+++ b/ios/playground/bundlejs/vue/components/text.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(453)
+	__vue_styles__.push(__webpack_require__(471)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(454)
+	__vue_exports__ = __webpack_require__(472)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(455)
+	var __vue_template__ = __webpack_require__(473)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/text.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/text.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-19a6f76e"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,13 +260,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 453:
+/***/ 471:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -270,7 +278,7 @@
 
 /***/ },
 
-/***/ 454:
+/***/ 472:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -331,180 +339,180 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381)
+	    panel: __webpack_require__(399)
 	  }
 	};
 
 /***/ },
 
-/***/ 455:
+/***/ 473:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "color",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"]
-	  }, ["default is black"]), _h('text', {
+	  }, [_vm._v("default is black")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      color: "#286090"
 	    }
-	  }, ["#286090"]), _h('text', {
+	  }, [_vm._v("#286090")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      color: "#0f0"
 	    }
-	  }, ["#0f0"]), _h('text', {
+	  }, [_vm._v("#0f0")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      color: "red"
 	    }
-	  }, ["keyword"]), _h('text', {
+	  }, [_vm._v("keyword")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      color: "rgb(238, 162, 54)"
 	    }
-	  }, ["rgb(238, 162, 54)"]), _h('text', {
+	  }, [_vm._v("rgb(238, 162, 54)")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      color: "rgba(238, 162, 54, 0.5)"
 	    }
-	  }, ["rgba(238, 162, 54, 0.5)"])]), _h('panel', {
+	  }, [_vm._v("rgba(238, 162, 54, 0.5)")])]), _c('panel', {
 	    attrs: {
 	      "title": "font-size",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontSize: "32px"
 	    }
-	  }, ["32"]), _h('text', {
+	  }, [_vm._v("32")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontSize: "64px"
 	    }
-	  }, ["64"]), _h('text', {
+	  }, [_vm._v("64")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontSize: "100px"
 	    }
-	  }, ["100"])]), _h('panel', {
+	  }, [_vm._v("100")])]), _c('panel', {
 	    attrs: {
 	      "title": "font-style",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontStyle: "normal"
 	    }
-	  }, ["normal"]), _h('text', {
+	  }, [_vm._v("normal")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontStyle: "italic"
 	    }
-	  }, ["italic"])]), _h('panel', {
+	  }, [_vm._v("italic")])]), _c('panel', {
 	    attrs: {
 	      "title": "font-weight",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontWeight: "normal"
 	    }
-	  }, ["normal"]), _h('text', {
+	  }, [_vm._v("normal")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      fontWeight: "bold"
 	    }
-	  }, ["bold"])]), _h('panel', {
+	  }, [_vm._v("bold")])]), _c('panel', {
 	    attrs: {
 	      "title": "text-decoration",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textDecoration: "none"
 	    }
-	  }, ["none"]), _h('text', {
+	  }, [_vm._v("none")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textDecoration: "underline"
 	    }
-	  }, ["underline"]), _h('text', {
+	  }, [_vm._v("underline")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textDecoration: "line-through"
 	    }
-	  }, ["line-through"])]), _h('panel', {
+	  }, [_vm._v("line-through")])]), _c('panel', {
 	    attrs: {
 	      "title": "text-align",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textAlign: "left"
 	    }
-	  }, ["left"]), _h('text', {
+	  }, [_vm._v("left")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textAlign: "center"
 	    }
-	  }, ["center"]), _h('text', {
+	  }, [_vm._v("center")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textAlign: "right"
 	    }
-	  }, ["right"])]), _h('panel', {
+	  }, [_vm._v("right")])]), _c('panel', {
 	    attrs: {
 	      "title": "text-overflow",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      lines: "1"
 	    }
-	  }, ["no text-overflow, no text-overflow"]), _h('text', {
+	  }, [_vm._v("no text-overflow, no text-overflow")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textOverflow: "clip",
 	      width: "450px",
 	      lines: "1"
 	    }
-	  }, ["text-overflow: clip, text-overflow: clip"]), _h('text', {
+	  }, [_vm._v("text-overflow: clip, text-overflow: clip")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
 	      textOverflow: "ellipsis",
 	      width: "450px",
 	      lines: "1"
 	    }
-	  }, ["text-overflow: ellipsis, text-overflow: ellipsis"])]), _h('panel', {
+	  }, [_vm._v("text-overflow: ellipsis, text-overflow: ellipsis")])]), _c('panel', {
 	    attrs: {
 	      "title": "line-height",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["txt"]
-	  }, ["no lineheight setting"]), _h('text', {
+	  }, [_vm._v("no lineheight setting")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
-	      lineHeight: "50"
+	      lineHeight: "50px"
 	    }
-	  }, ["lineheight 50"]), _h('text', {
+	  }, [_vm._v("lineheight 50")]), _c('text', {
 	    staticClass: ["txt"],
 	    staticStyle: {
-	      lineHeight: "80"
+	      lineHeight: "80px"
 	    }
-	  }, [" lineheight 80"])])])
+	  }, [_vm._v(" lineheight 80")])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/video.js b/ios/playground/bundlejs/vue/components/video.js
index caf0cea..fccfbe4 100644
--- a/ios/playground/bundlejs/vue/components/video.js
+++ b/ios/playground/bundlejs/vue/components/video.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(456)
+	__vue_styles__.push(__webpack_require__(474)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(457)
+	__vue_exports__ = __webpack_require__(475)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(458)
+	var __vue_template__ = __webpack_require__(476)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/video.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/video.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-a9b90eec"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -228,7 +236,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -251,21 +259,21 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 456:
+/***/ 474:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -278,7 +286,7 @@
 
 /***/ },
 
-/***/ 457:
+/***/ 475:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -305,7 +313,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -313,7 +321,7 @@
 	    };
 	  },
 	  components: {
-	    button: __webpack_require__(385)
+	    button: __webpack_require__(403)
 	  },
 	  methods: {
 	    pause: function pause() {
@@ -345,11 +353,11 @@
 
 /***/ },
 
-/***/ 458:
+/***/ 476:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('video', {
+	  return _c('scroller', [_c('video', {
 	    staticClass: ["video"],
 	    attrs: {
 	      "onpause": "onpause",
@@ -357,15 +365,15 @@
 	      "onfinish": "onfinish",
 	      "onfail": "onfail",
 	      "src": "http://g.tbcdn.cn/ali-wireless-h5/res/0.0.6/toy.mp4",
-	      "auto-play": "true",
+	      "autoPlay": "true",
 	      "playStatus": _vm.playStatus
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row",
 	      justifyContent: "center"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "value": "Pause"
 	    },
@@ -374,7 +382,7 @@
 	        _vm.pause($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginLeft: "20px"
 	    },
@@ -387,7 +395,7 @@
 	        _vm.play($event)
 	      }
 	    }
-	  })])])
+	  })], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/components/waterfall.js b/ios/playground/bundlejs/vue/components/waterfall.js
new file mode 100644
index 0000000..100252b
--- /dev/null
+++ b/ios/playground/bundlejs/vue/components/waterfall.js
@@ -0,0 +1,877 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(477)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(478)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(479)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/waterfall.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-13cb2621"
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
+	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 477:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "page": {
+	    "backgroundColor": "#EFEFEF"
+	  },
+	  "refresh": {
+	    "height": 128,
+	    "width": 750,
+	    "flexDirection": "row",
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "refreshText": {
+	    "color": "#888888",
+	    "fontWeight": "bold"
+	  },
+	  "indicator": {
+	    "color": "#888888",
+	    "height": 40,
+	    "width": 40,
+	    "marginRight": 30
+	  },
+	  "banner": {
+	    "height": 377,
+	    "flexDirection": "row"
+	  },
+	  "bannerInfo": {
+	    "width": 270,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "avatar": {
+	    "width": 148,
+	    "height": 108,
+	    "borderRadius": 54,
+	    "borderWidth": 4,
+	    "borderColor": "#FFFFFF",
+	    "marginBottom": 14
+	  },
+	  "name": {
+	    "fontWeight": "bold",
+	    "fontSize": 32,
+	    "color": "#ffffff",
+	    "lineHeight": 32,
+	    "textAlign": "center",
+	    "marginBottom": 16
+	  },
+	  "titleWrap": {
+	    "width": 100,
+	    "height": 24,
+	    "marginBottom": 10,
+	    "backgroundColor": "rgba(255,255,255,0.8)",
+	    "borderRadius": 12,
+	    "justifyContent": "center",
+	    "alignItems": "center"
+	  },
+	  "title": {
+	    "fontSize": 20,
+	    "color": "#000000"
+	  },
+	  "bannerPhotoWrap": {
+	    "width": 449,
+	    "height": 305,
+	    "backgroundColor": "#FFFFFF",
+	    "borderRadius": 12,
+	    "marginTop": 35,
+	    "padding": 12,
+	    "flexDirection": "row",
+	    "justifyContent": "space-between",
+	    "flexWrap": "wrap"
+	  },
+	  "bannerPhoto": {
+	    "width": 137,
+	    "height": 137,
+	    "marginBottom": 6
+	  },
+	  "stickyHeader": {
+	    "position": "sticky",
+	    "height": 94,
+	    "flexDirection": "row",
+	    "paddingBottom": 6
+	  },
+	  "stickyWrapper": {
+	    "flexDirection": "row",
+	    "backgroundColor": "#00cc99",
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flex": 1
+	  },
+	  "stickyTextImageWrapper": {
+	    "flex": 1,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "flexDirection": "row"
+	  },
+	  "stickyText": {
+	    "color": "#FFFFFF",
+	    "fontWeight": "bold",
+	    "fontSize": 32,
+	    "marginRight": 12
+	  },
+	  "stickyImage": {
+	    "width": 64,
+	    "height": 64,
+	    "borderRadius": 32
+	  },
+	  "cell": {
+	    "paddingTop": 6,
+	    "paddingBottom": 6
+	  },
+	  "item": {
+	    "backgroundColor": "#FFFFFF",
+	    "alignItems": "center"
+	  },
+	  "itemName": {
+	    "fontSize": 28,
+	    "color": "#333333",
+	    "lineHeight": 42,
+	    "textAlign": "left",
+	    "marginTop": 24
+	  },
+	  "itemPhoto": {
+	    "marginTop": 18,
+	    "width": 220,
+	    "height": 220,
+	    "marginBottom": 18
+	  },
+	  "itemDesc": {
+	    "fontSize": 24,
+	    "margin": 12,
+	    "color": "#999999",
+	    "lineHeight": 36,
+	    "textAlign": "left"
+	  },
+	  "itemClickBehaviour": {
+	    "fontSize": 36,
+	    "color": "#00cc99",
+	    "lineHeight": 36,
+	    "textAlign": "center",
+	    "marginTop": 6,
+	    "marginLeft": 24,
+	    "marginRight": 24,
+	    "marginBottom": 30
+	  },
+	  "footer": {
+	    "height": 94,
+	    "justifyContent": "center",
+	    "alignItems": "center",
+	    "backgroundColor": "#00cc99"
+	  },
+	  "fixedItem": {
+	    "position": "fixed",
+	    "width": 78,
+	    "height": 78,
+	    "backgroundColor": "#00cc99",
+	    "right": 32,
+	    "bottom": 32,
+	    "borderRadius": 39,
+	    "alignItems": "center",
+	    "justifyContent": "center"
+	  },
+	  "fixedText": {
+	    "fontSize": 36,
+	    "color": "#FFFFFF",
+	    "lineHeight": 36
+	  }
+	}
+
+/***/ },
+
+/***/ 478:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	Object.defineProperty(exports, "__esModule", {
+	  value: true
+	});
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	exports.default = {
+	  data: function data() {
+	    var items = [{
+	      src: 'https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg',
+	      name: 'Thomas Carlyle',
+	      desc: 'Genius only means hard-working all one\'s life',
+	      behaviourName: 'Change count',
+	      behaviour: 'changeColumnCount'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
+	      desc: 'The man who has made up his mind to win will never say "impossible "',
+	      behaviourName: 'Change gap',
+	      behaviour: 'changeColumnGap'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1eNKuPFXXXXc_XpXXXXXXXXXX-370-370.jpg',
+	      desc: 'There is no such thing as a great talent without great will - power',
+	      behaviourName: 'Show scrollbar',
+	      behaviour: 'showScrollbar'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1DCh8PFXXXXX7aXXXXXXXXXXX-370-370.jpg',
+	      name: 'Addison',
+	      desc: 'Cease to struggle and you cease to live',
+	      behaviourName: 'Change width',
+	      behaviour: 'changeColumnWidth'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
+	      desc: 'A strong man will struggle with the storms of fate',
+	      behaviourName: 'Listen appear',
+	      behaviour: 'listenAppear'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
+	      name: 'Ruskin',
+	      desc: 'Living without an aim is like sailing without a compass',
+	      behaviourName: 'Set scrollable',
+	      behaviour: 'setScrollable'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'waterfall padding',
+	      behaviour: 'setPadding'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
+	      name: 'Balzac',
+	      desc: 'There is no such thing as a great talent without great will - power',
+	      behaviourName: 'listen scroll',
+	      behaviour: 'listenScroll'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'Remove cell',
+	      behaviour: 'removeCell'
+	    }, {
+	      src: 'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
+	      behaviourName: 'Move cell',
+	      behaviour: 'moveCell'
+	    }];
+
+	    var repeatItems = [];
+	    for (var i = 0; i < 3; i++) {
+	      repeatItems.push.apply(repeatItems, items);
+	    }
+
+	    return {
+	      padding: 0,
+	      refreshing: false,
+	      refreshText: '↓   pull to refresh...',
+	      columnCount: 2,
+	      columnGap: 12,
+	      columnWidth: 'auto',
+	      contentOffset: '0',
+	      showHeader: true,
+	      showScrollbar: false,
+	      scrollable: true,
+	      showStickyHeader: false,
+	      appearImage: null,
+	      disappearImage: null,
+	      stickyHeaderType: 'none',
+	      banner: {
+	        photos: [{ src: 'https://gw.alicdn.com/tps/TB1JyaCPFXXXXc9XXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1MwSFPFXXXXbdXXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1U8avPFXXXXaDXpXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB17Xh8PFXXXXbkaXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1cTmLPFXXXXXRXXXXXXXXXXXX-140-140.jpg' }, { src: 'https://gw.alicdn.com/tps/TB1oCefPFXXXXbVXVXXXXXXXXXX-140-140.jpg' }]
+	      },
+	      items: repeatItems
+	    };
+	  },
+
+	  methods: {
+	    recylerScroll: function recylerScroll(e) {
+	      this.contentOffset = e.contentOffset.y;
+	    },
+	    loadmore: function loadmore(e) {
+	      console.log('receive loadmore event');
+	      // this.$refs.waterfall.resetLoadmore()
+	    },
+	    showOrRemoveHeader: function showOrRemoveHeader() {
+	      this.showHeader = !this.showHeader;
+	    },
+	    onItemclick: function onItemclick(behaviour, index) {
+	      console.log('click...' + behaviour + ' at index ' + index);
+	      switch (behaviour) {
+	        case 'changeColumnCount':
+	          this.changeColumnCount();
+	          break;
+	        case 'changeColumnGap':
+	          this.changeColumnGap();
+	          break;
+	        case 'changeColumnWidth':
+	          this.changeColumnWidth();
+	          break;
+	        case 'showScrollbar':
+	          this.showOrHideScrollbar();
+	          break;
+	        case 'listenAppear':
+	          this.listenAppearAndDisappear();
+	          break;
+	        case 'setScrollable':
+	          this.setScrollable();
+	          break;
+	        case 'setPadding':
+	          this.setRecyclerPadding();
+	          break;
+	        case 'listenScroll':
+	          this.listenScrollEvent();
+	          break;
+	        case 'removeCell':
+	          this.removeCell(index);
+	          break;
+	        case 'moveCell':
+	          this.moveCell(index);
+	          break;
+	      }
+	    },
+
+	    itemAppear: function itemAppear(src) {
+	      this.appearImage = src;
+	    },
+
+	    itemDisappear: function itemDisappear(src) {
+	      this.disappearImage = src;
+	    },
+
+	    changeColumnCount: function changeColumnCount() {
+	      if (this.columnCount === 2) {
+	        this.columnCount = 3;
+	      } else {
+	        this.columnCount = 2;
+	      }
+	    },
+
+	    changeColumnGap: function changeColumnGap() {
+	      if (this.columnGap === 12) {
+	        this.columnGap = 'normal';
+	      } else {
+	        this.columnGap = 12;
+	      }
+	    },
+
+	    changeColumnWidth: function changeColumnWidth() {
+	      if (this.columnWidth === 'auto') {
+	        this.columnWidth = 600;
+	      } else {
+	        this.columnWidth = 'auto';
+	      }
+	    },
+
+	    showOrHideScrollbar: function showOrHideScrollbar() {
+	      this.showScrollbar = !this.showScrollbar;
+	    },
+
+	    setScrollable: function setScrollable() {
+	      this.scrollable = !this.scrollable;
+	    },
+
+	    listenAppearAndDisappear: function listenAppearAndDisappear() {
+	      this.stickyHeaderType = this.stickyHeaderType === 'appear' ? 'none' : 'appear';
+	    },
+
+	    listenScrollEvent: function listenScrollEvent() {
+	      this.stickyHeaderType = this.stickyHeaderType === 'scroll' ? 'none' : 'scroll';
+	    },
+
+	    scrollToTop: function scrollToTop() {
+	      weex.requireModule('dom').scrollToElement(this.$refs.header);
+	    },
+
+	    setRecyclerPadding: function setRecyclerPadding() {
+	      this.padding = this.padding == 0 ? 12 : 0;
+	    },
+
+	    removeCell: function removeCell(index) {
+	      this.items.splice(index, 1);
+	    },
+
+	    moveCell: function moveCell(index) {
+	      if (index == 0) {
+	        this.items.splice(this.items.length - 1, 0, this.items.splice(index, 1)[0]);
+	      } else {
+	        this.items.splice(0, 0, this.items.splice(index, 1)[0]);
+	      }
+	    },
+
+	    onrefresh: function onrefresh(event) {
+	      var _this = this;
+
+	      this.refreshing = true;
+	      this.refreshText = "loading...";
+	      setTimeout(function () {
+	        _this.refreshing = false;
+	        _this.refreshText = '↓   pull to refresh...';
+	      }, 2000);
+	    },
+	    onpullingdown: function onpullingdown(event) {
+	      // console.log(`${event.pullingDistance}`)
+	      if (event.pullingDistance < -64) {
+	        this.refreshText = '↑   release to refresh...';
+	      } else {
+	        this.refreshText = '↓   pull to refresh...';
+	      }
+	    }
+	  }
+	};
+
+/***/ },
+
+/***/ 479:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('waterfall', {
+	    ref: "waterfall",
+	    staticClass: ["page"],
+	    style: {
+	      padding: _vm.padding
+	    },
+	    attrs: {
+	      "columnWidth": _vm.columnWidth,
+	      "columnCount": _vm.columnCount,
+	      "columnGap": _vm.columnGap,
+	      "showScrollbar": _vm.showScrollbar,
+	      "scrollable": _vm.scrollable,
+	      "loadmoreoffset": "3000"
+	    },
+	    on: {
+	      "scroll": _vm.recylerScroll,
+	      "loadmore": _vm.loadmore
+	    }
+	  }, [_c('refresh', {
+	    staticClass: ["refresh"],
+	    attrs: {
+	      "display": _vm.refreshing ? 'show' : 'hide'
+	    },
+	    on: {
+	      "refresh": _vm.onrefresh,
+	      "pullingdown": _vm.onpullingdown
+	    }
+	  }, [_c('loading-indicator', {
+	    staticClass: ["indicator"]
+	  }), _c('text', {
+	    staticClass: ["refreshText"]
+	  }, [_vm._v(_vm._s(_vm.refreshText))])], 1), (_vm.showHeader) ? _c('header', {
+	    ref: "header",
+	    staticClass: ["header"]
+	  }, [_c('image', {
+	    staticClass: ["banner"],
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1ESN1PFXXXXX1apXXXXXXXXXX-1000-600.jpg",
+	      "resize": "cover"
+	    }
+	  }, [_c('div', {
+	    staticClass: ["bannerInfo"]
+	  }, [_c('image', {
+	    staticClass: ["avatar"],
+	    attrs: {
+	      "src": "https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg",
+	      "resize": "cover"
+	    }
+	  }), _c('text', {
+	    staticClass: ["name"]
+	  }, [_vm._v("Adam Cat")]), _c('div', {
+	    staticClass: ["titleWrap"]
+	  }, [_c('text', {
+	    staticClass: ["title"]
+	  }, [_vm._v("Genius")])])]), _c('div', {
+	    staticClass: ["bannerPhotoWrap"]
+	  }, _vm._l((_vm.banner.photos), function(photo) {
+	    return _c('image', {
+	      staticClass: ["bannerPhoto"],
+	      attrs: {
+	        "src": photo.src
+	      }
+	    })
+	  }))])]) : _vm._e(), _c('header', {
+	    staticClass: ["stickyHeader"],
+	    on: {
+	      "click": _vm.showOrRemoveHeader
+	    }
+	  }, [(_vm.stickyHeaderType === 'none') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Sticky Header")])]) : _vm._e(), (_vm.stickyHeaderType === 'appear') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('div', {
+	    staticClass: ["stickyTextImageWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Last Appear:")]), _c('image', {
+	    staticClass: ["stickyImage"],
+	    attrs: {
+	      "src": _vm.appearImage
+	    }
+	  })]), _c('div', {
+	    staticClass: ["stickyTextImageWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Last Disappear:")]), _c('image', {
+	    staticClass: ["stickyImage"],
+	    attrs: {
+	      "src": _vm.disappearImage
+	    }
+	  })])]) : _vm._e(), (_vm.stickyHeaderType === 'scroll') ? _c('div', {
+	    staticClass: ["stickyWrapper"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Content Offset:" + _vm._s(_vm.contentOffset))])]) : _vm._e()]), _vm._l((_vm.items), function(item, index) {
+	    return _c('cell', {
+	      key: item.src,
+	      staticClass: ["cell"],
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree"
+	      }
+	    }, [_c('div', {
+	      staticClass: ["item"],
+	      on: {
+	        "click": function($event) {
+	          _vm.onItemclick(item.behaviour, index)
+	        },
+	        "appear": function($event) {
+	          _vm.itemAppear(item.src)
+	        },
+	        "disappear": function($event) {
+	          _vm.itemDisappear(item.src)
+	        }
+	      }
+	    }, [(item.name) ? _c('text', {
+	      staticClass: ["itemName"]
+	    }, [_vm._v(_vm._s(item.name))]) : _vm._e(), _c('image', {
+	      staticClass: ["itemPhoto"],
+	      attrs: {
+	        "src": item.src
+	      }
+	    }), (item.desc) ? _c('text', {
+	      staticClass: ["itemDesc"]
+	    }, [_vm._v(_vm._s(item.desc))]) : _vm._e(), (item.behaviourName) ? _c('text', {
+	      staticClass: ["itemClickBehaviour"]
+	    }, [_vm._v(" " + _vm._s(item.behaviourName))]) : _vm._e()])])
+	  }), _c('header', {
+	    staticClass: ["footer"]
+	  }, [_c('text', {
+	    staticClass: ["stickyText"]
+	  }, [_vm._v("Footer")])]), _c('div', {
+	    staticClass: ["fixedItem"],
+	    on: {
+	      "click": _vm.scrollToTop
+	    }
+	  }, [_c('text', {
+	    staticClass: ["fixedText"]
+	  }, [_vm._v("Top")])])], 2)
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/vue/components/web.js b/ios/playground/bundlejs/vue/components/web.js
index 602ac0a..e15cbeb 100644
--- a/ios/playground/bundlejs/vue/components/web.js
+++ b/ios/playground/bundlejs/vue/components/web.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(459)
+	__vue_styles__.push(__webpack_require__(480)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(460)
+	__vue_exports__ = __webpack_require__(481)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(461)
+	var __vue_template__ = __webpack_require__(482)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/components/web.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/components/web.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-74e76ca3"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -228,7 +236,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -251,21 +259,21 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 459:
+/***/ 480:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -298,7 +306,7 @@
 
 /***/ },
 
-/***/ 460:
+/***/ 481:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -350,10 +358,10 @@
 	//
 	//
 
-	var webview = __weex_require_module__('webview');
+	var webview = weex.requireModule('webview');
 	module.exports = {
 	  components: {
-	    button: __webpack_require__(385)
+	    button: __webpack_require__(403)
 	  },
 	  methods: {
 	    goback: function goback() {
@@ -376,19 +384,19 @@
 
 /***/ },
 
-/***/ 461:
+/***/ 482:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"]
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["toolbar"],
 	    appendAsTree: true,
 	    attrs: {
 	      "append": "tree"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    staticStyle: {
 	      marginLeft: "30px",
 	      width: "210px",
@@ -405,7 +413,7 @@
 	        _vm.goback($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginLeft: "30px",
 	      width: "210px",
@@ -422,7 +430,7 @@
 	        _vm.goforward($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginLeft: "30px",
 	      width: "210px",
@@ -439,7 +447,7 @@
 	        _vm.refresh($event)
 	      }
 	    }
-	  })]), _h('web', {
+	  })], 1), _c('web', {
 	    ref: "webview",
 	    staticClass: ["content"],
 	    attrs: {
@@ -450,7 +458,7 @@
 	      "pagefinish": _vm.finishload,
 	      "error": _vm.failload
 	    }
-	  })])
+	  })], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/hello.js b/ios/playground/bundlejs/vue/hello.js
index efe0372..caaec75 100644
--- a/ios/playground/bundlejs/vue/hello.js
+++ b/ios/playground/bundlejs/vue/hello.js
@@ -51,7 +51,7 @@
 	var __vue_styles__ = []
 
 	/* template */
-	var __vue_template__ = __webpack_require__(462)
+	var __vue_template__ = __webpack_require__(483)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -63,15 +63,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/hello.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/hello.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -80,17 +83,17 @@
 
 /***/ },
 
-/***/ 462:
+/***/ 483:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "100px"
 	    }
-	  }, ["Hello World."])])
+	  }, [_vm._v("Hello World.")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/iconfont.js b/ios/playground/bundlejs/vue/iconfont.js
index 13ffee7..764b96c 100644
--- a/ios/playground/bundlejs/vue/iconfont.js
+++ b/ios/playground/bundlejs/vue/iconfont.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(463)
+	__vue_styles__.push(__webpack_require__(484)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(464)
+	__vue_exports__ = __webpack_require__(485)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(465)
+	var __vue_template__ = __webpack_require__(486)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/iconfont.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/iconfont.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-df4234e0"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 463:
+/***/ 484:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -115,7 +119,7 @@
 
 /***/ },
 
-/***/ 464:
+/***/ 485:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -156,7 +160,7 @@
 	//
 	//
 
-	var domModule = __weex_require_module__('dom');
+	var domModule = weex.requireModule('dom');
 	module.exports = {
 	  created: function created() {
 	    //目前支持ttf、woff文件,不支持svg、eot类型
@@ -181,21 +185,21 @@
 
 /***/ },
 
-/***/ 465:
+/***/ 486:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title1"]
-	  }, ["Assets: "]), _h('text', {
+	  }, [_vm._v("Assets: ")]), _c('text', {
 	    staticClass: ["title2"]
-	  }, ["http ttf: "]), _h('text', {
+	  }, [_vm._v("http ttf: ")]), _c('text', {
 	    staticClass: ["title3"]
-	  }, ["http woff: "]), _h('text', {
+	  }, [_vm._v("http woff: ")]), _c('text', {
 	    staticClass: ["title4"]
-	  }, ["file: "])])
+	  }, [_vm._v("file: ")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/index.js b/ios/playground/bundlejs/vue/index.js
index b8adb93..91d32ae 100644
--- a/ios/playground/bundlejs/vue/index.js
+++ b/ios/playground/bundlejs/vue/index.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(466)
+	__vue_exports__ = __webpack_require__(487)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(478)
+	var __vue_template__ = __webpack_require__(499)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/index.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/index.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,7 +86,7 @@
 
 /***/ },
 
-/***/ 419:
+/***/ 437:
 /***/ function(module, exports) {
 
 	exports.getBaseURL = function (vm) {
@@ -107,7 +110,7 @@
 	    }
 	    nativeBase = 'http://' + host + '/' + vm.dir + '/build/';
 	  }
-	  var h5Base = './index.html?page=./' + vm.dir + '/build/';
+	  var h5Base = './vue.html?page=./' + vm.dir + '/build/';
 	  // in Native
 	  var base = nativeBase;
 	  if (typeof window === 'object') {
@@ -120,11 +123,13 @@
 
 /***/ },
 
-/***/ 466:
+/***/ 487:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
 
+	var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
 	//
 	//
 	//
@@ -132,40 +137,41 @@
 
 	module.exports = {
 	  data: function data() {
+	    var root = (typeof window === 'undefined' ? 'undefined' : _typeof(window)) === 'object' ? 'vue-web/vue' : 'vue';
 	    return {
 	      items: [
 	      // common
-	      { name: 'vue/syntax/hello-world', title: 'Hello World' }, { name: 'vue/style/index', title: 'Common Style' }, { name: 'vue/animation', title: 'Animation' },
+	      { name: root + '/syntax/hello-world', title: 'Hello World' }, { name: root + '/style/index', title: 'Common Style' }, { name: root + '/animation', title: 'Animation' },
 
 	      // component
-	      { name: 'vue/components/text', title: 'Text' }, { name: 'vue/components/image', title: 'Image' }, { name: 'vue/components/input', title: 'Input' }, { name: 'vue/components/scroller', title: 'Scroller' }, { name: 'vue/components/list', title: 'List' }, { name: 'vue/components/slider', title: 'Slider' }, { name: 'vue/components/a', title: 'A' }, { name: 'vue/components/video', title: 'Video' }, { name: 'vue/components/countdown', title: 'Countdown' }, { name: 'vue/components/marquee', title: 'Marquee' }, { name: 'vue/components/web', title: 'Web' }, { name: 'vue/components/navigator', title: 'Navigator' }, { name: 'vue/components/tabbar', title: 'Tabbar' },
+	      { name: root + '/components/text', title: 'Text' }, { name: root + '/components/image', title: 'Image' }, { name: root + '/components/input', title: 'Input' }, { name: root + '/components/scroller', title: 'Scroller' }, { name: root + '/components/list', title: 'List' }, { name: root + '/components/waterfall', title: 'Waterfall' }, { name: root + '/components/slider', title: 'Slider' }, { name: root + '/components/a', title: 'A' }, { name: root + '/components/video', title: 'Video' }, { name: root + '/components/countdown', title: 'Countdown' }, { name: root + '/components/marquee', title: 'Marquee' }, { name: root + '/components/web', title: 'Web' }, { name: root + '/components/navigator', title: 'Navigator' }, { name: root + '/components/tabbar', title: 'Tabbar' },
 
 	      // module
-	      { name: 'vue/modules/instance-api', title: 'Instance API' }, { name: 'vue/modules/modal', title: 'Modal' }, { name: 'vue/modules/stream', title: 'Stream' }, { name: 'vue/modules/storage', title: 'Storage' },
+	      { name: root + '/modules/instance-api', title: 'Instance API' }, { name: root + '/modules/modal', title: 'Modal' }, { name: root + '/modules/stream', title: 'Stream' }, { name: root + '/modules/storage', title: 'Storage' },
 	      // {name: 'module/clipboard', title: 'Clipboard'}, // 0.8 , developing
 
 	      // showcase
-	      { name: 'vue/showcase/progress', title: 'Progress Bar' }, { name: 'vue/showcase/itemlist', title: 'List (Advanced)' }, { name: 'vue/showcase/calculator', title: 'Calculator' }]
+	      { name: root + '/showcase/boxshadow', title: 'boxshadow' }, { name: root + '/showcase/progress', title: 'Progress Bar' }, { name: root + '/showcase/itemlist', title: 'List (Advanced)' }, { name: root + '/showcase/calculator', title: 'Calculator' }]
 	    };
 	  },
 	  components: {
-	    exampleList: __webpack_require__(467)
+	    exampleList: __webpack_require__(488)
 	  }
 	};
 
 /***/ },
 
-/***/ 467:
+/***/ 488:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(468)
+	__vue_exports__ = __webpack_require__(489)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(477)
+	var __vue_template__ = __webpack_require__(498)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -177,22 +183,25 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/example-list.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/example-list.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 468:
+/***/ 489:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -206,7 +215,7 @@
 	//
 	//
 
-	var getBaseURL = __webpack_require__(419).getBaseURL;
+	var getBaseURL = __webpack_require__(437).getBaseURL;
 	module.exports = {
 	  props: {
 	    dir: {
@@ -217,7 +226,7 @@
 	    }
 	  },
 	  components: {
-	    exampleListItem: __webpack_require__(469)
+	    exampleListItem: __webpack_require__(490)
 	  },
 	  created: function created() {
 	    var base = getBaseURL(this);
@@ -232,21 +241,21 @@
 
 /***/ },
 
-/***/ 469:
+/***/ 490:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(470)
+	__vue_styles__.push(__webpack_require__(491)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(471)
+	__vue_exports__ = __webpack_require__(492)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(476)
+	var __vue_template__ = __webpack_require__(497)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -258,22 +267,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/example-list-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/example-list-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-1f417e80"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 470:
+/***/ 491:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -285,7 +298,7 @@
 
 /***/ },
 
-/***/ 471:
+/***/ 492:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -304,14 +317,14 @@
 	//
 	//
 
-	var event = __weex_require_module__('event');
+	var event = weex.requireModule('event');
 	module.exports = {
 	  props: {
 	    title: { default: '456' },
 	    url: { default: '' }
 	  },
 	  components: {
-	    listItem: __webpack_require__(472)
+	    listItem: __webpack_require__(493)
 	  },
 	  methods: {
 	    redirect: function redirect() {
@@ -322,21 +335,21 @@
 
 /***/ },
 
-/***/ 472:
+/***/ 493:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(473)
+	__vue_styles__.push(__webpack_require__(494)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(474)
+	__vue_exports__ = __webpack_require__(495)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(475)
+	var __vue_template__ = __webpack_require__(496)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -348,22 +361,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/list-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/list-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-917012ba"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 473:
+/***/ 494:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -381,7 +398,7 @@
 
 /***/ },
 
-/***/ 474:
+/***/ 495:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -420,11 +437,11 @@
 
 /***/ },
 
-/***/ 475:
+/***/ 496:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["item"],
 	    style: {
 	      backgroundColor: _vm.bgColor
@@ -434,55 +451,55 @@
 	      "touchstart": _vm.touchstart,
 	      "touchend": _vm.touchend
 	    }
-	  }, [_vm._t("default")])
+	  }, [_vm._t("default")], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 476:
+/***/ 497:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('list-item', {
+	  return _c('list-item', {
 	    on: {
 	      "click": _vm.redirect
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["item-txt"]
-	  }, [_vm._s(_vm.title)])])
+	  }, [_vm._v(_vm._s(_vm.title))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 477:
+/***/ 498:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('list', [_vm._l((_vm.items), function(item) {
-	    return _h('cell', {
+	  return _c('list', _vm._l((_vm.items), function(item) {
+	    return _c('cell', {
 	      appendAsTree: true,
 	      attrs: {
 	        "append": "tree"
 	      }
-	    }, [_h('example-list-item', {
+	    }, [_c('example-list-item', {
 	      attrs: {
 	        "title": item.title,
 	        "url": item.url
 	      }
-	    })])
-	  })])
+	    })], 1)
+	  }))
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 478:
+/***/ 499:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('example-list', {
+	  return _c('example-list', {
 	    attrs: {
 	      "items": _vm.items,
 	      "dir": "examples"
diff --git a/ios/playground/bundlejs/vue/modules/clipboard.js b/ios/playground/bundlejs/vue/modules/clipboard.js
index b791c2a..d299838 100644
--- a/ios/playground/bundlejs/vue/modules/clipboard.js
+++ b/ios/playground/bundlejs/vue/modules/clipboard.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(479)
+	__vue_exports__ = __webpack_require__(500)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(480)
+	var __vue_template__ = __webpack_require__(501)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/modules/clipboard.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/modules/clipboard.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,27 +255,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -280,22 +287,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -395,7 +406,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -418,35 +429,35 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -458,22 +469,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -519,7 +534,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -541,21 +556,21 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 479:
+/***/ 500:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -582,8 +597,8 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
-	var clipboard = __weex_require_module__('clipboard');
+	var modal = weex.requireModule('modal');
+	var clipboard = weex.requireModule('clipboard');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -593,9 +608,9 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    tip: __webpack_require__(391),
-	    button: __webpack_require__(385)
+	    panel: __webpack_require__(399),
+	    tip: __webpack_require__(409),
+	    button: __webpack_require__(403)
 	  },
 	  mounted: function mounted() {
 	    this.tips = "1. Just click COPY button. It will auto generate a string with random text, and copy to system clipboard. \n 2. do copy in another app, then come back and click PASTE button.";
@@ -622,25 +637,25 @@
 
 /***/ },
 
-/***/ 480:
+/***/ 501:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Clipboard",
 	      "type": "primary"
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "Copy to clipboard5"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      lineHeight: "40px",
 	      fontSize: "28px"
 	    }
-	  }, [_vm._s(_vm.textToCopy)]), _h('button', {
+	  }, [_vm._v(_vm._s(_vm.textToCopy))]), _c('button', {
 	    attrs: {
 	      "type": "info",
 	      "size": "middle",
@@ -651,16 +666,16 @@
 	        _vm.doCopy($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "Paste from clipboard"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      lineHeight: "40px",
 	      fontSize: "28px"
 	    }
-	  }, [_vm._s(_vm.textFromPaste)]), _h('button', {
+	  }, [_vm._v(_vm._s(_vm.textFromPaste))]), _c('button', {
 	    attrs: {
 	      "type": "info",
 	      "size": "middle",
@@ -671,18 +686,18 @@
 	        _vm.doPaste($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "Result"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
 	    attrs: {
 	      "value": _vm.tips
 	    }
-	  })])])])
+	  })], 1)], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/modules/instance-api.js b/ios/playground/bundlejs/vue/modules/instance-api.js
index 316d553..6c3f0b8 100644
--- a/ios/playground/bundlejs/vue/modules/instance-api.js
+++ b/ios/playground/bundlejs/vue/modules/instance-api.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(481)
+	__vue_exports__ = __webpack_require__(502)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(482)
+	var __vue_template__ = __webpack_require__(503)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/modules/instance-api.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/modules/instance-api.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 481:
+/***/ 502:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -275,7 +282,7 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381)
+	    panel: __webpack_require__(399)
 	  },
 	  created: function created() {
 	    var config = this.$getConfig();
@@ -286,16 +293,16 @@
 
 /***/ },
 
-/***/ 482:
+/***/ 503:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "$getConfig()",
 	      "type": "primary"
 	    }
-	  }, [_h('text', [_vm._s(_vm.config)])])])
+	  }, [_c('text', [_vm._v(_vm._s(_vm.config))])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/modules/modal.js b/ios/playground/bundlejs/vue/modules/modal.js
index e27992a..249dc68 100644
--- a/ios/playground/bundlejs/vue/modules/modal.js
+++ b/ios/playground/bundlejs/vue/modules/modal.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(483)
+	__vue_exports__ = __webpack_require__(504)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(484)
+	var __vue_template__ = __webpack_require__(505)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/modules/modal.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/modules/modal.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,27 +255,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -280,22 +287,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -395,7 +406,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -418,21 +429,21 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 483:
+/***/ 504:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -452,14 +463,14 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  data: function data() {
 	    return {};
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    button: __webpack_require__(385)
+	    panel: __webpack_require__(399),
+	    button: __webpack_require__(403)
 	  },
 	  methods: {
 	    toast: function toast(msg, duration) {
@@ -512,16 +523,16 @@
 
 /***/ },
 
-/***/ 484:
+/***/ 505:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Toast",
 	      "type": "primary"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    attrs: {
 	      "type": "primary",
 	      "value": "Toast"
@@ -531,12 +542,12 @@
 	        _vm.toast($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "Dialog",
 	      "type": "primary"
 	    }
-	  }, [_h('button', {
+	  }, [_c('button', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -549,7 +560,7 @@
 	        _vm.alert($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -562,7 +573,7 @@
 	        _vm.confirm($event)
 	      }
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    attrs: {
 	      "type": "warning",
 	      "value": "Prompt"
@@ -572,7 +583,7 @@
 	        _vm.prompt($event)
 	      }
 	    }
-	  })])])
+	  })], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/modules/storage.js b/ios/playground/bundlejs/vue/modules/storage.js
index 24a8faa..9bde815 100644
--- a/ios/playground/bundlejs/vue/modules/storage.js
+++ b/ios/playground/bundlejs/vue/modules/storage.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(485)
+	__vue_exports__ = __webpack_require__(506)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(486)
+	var __vue_template__ = __webpack_require__(507)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/modules/storage.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/modules/storage.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 485:
+/***/ 506:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -283,7 +290,7 @@
 	//
 	//
 
-	var storage = __weex_require_module__('storage');
+	var storage = weex.requireModule('storage');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -295,7 +302,7 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381)
+	    panel: __webpack_require__(399)
 	  },
 	  created: function created() {
 	    var me = this;
@@ -343,36 +350,36 @@
 
 /***/ },
 
-/***/ 486:
+/***/ 507:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "storage API",
 	      "type": "primary"
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "setItem"
 	    }
-	  }, [_h('text', [_vm._s(_vm.setItemResult)])]), _h('panel', {
+	  }, [_c('text', [_vm._v(_vm._s(_vm.setItemResult))])]), _c('panel', {
 	    attrs: {
 	      "title": "getItem"
 	    }
-	  }, [_h('text', [_vm._s(_vm.getItemResult)])]), _h('panel', {
+	  }, [_c('text', [_vm._v(_vm._s(_vm.getItemResult))])]), _c('panel', {
 	    attrs: {
 	      "title": "length"
 	    }
-	  }, [_h('text', [_vm._s(_vm.lengthResult)])]), _h('panel', {
+	  }, [_c('text', [_vm._v(_vm._s(_vm.lengthResult))])]), _c('panel', {
 	    attrs: {
 	      "title": "getAllKeys"
 	    }
-	  }, [_h('text', [_vm._s(_vm.getAllKeysResult)])]), _h('panel', {
+	  }, [_c('text', [_vm._v(_vm._s(_vm.getAllKeysResult))])]), _c('panel', {
 	    attrs: {
 	      "title": "removeItem"
 	    }
-	  }, [_h('text', [_vm._s(_vm.removeItemResult)])])])])
+	  }, [_c('text', [_vm._v(_vm._s(_vm.removeItemResult))])])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/modules/stream.js b/ios/playground/bundlejs/vue/modules/stream.js
index 288fee2..eca9d2f 100644
--- a/ios/playground/bundlejs/vue/modules/stream.js
+++ b/ios/playground/bundlejs/vue/modules/stream.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(487)
+	__vue_exports__ = __webpack_require__(508)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(488)
+	var __vue_template__ = __webpack_require__(509)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/modules/stream.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/modules/stream.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 487:
+/***/ 508:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -288,7 +295,7 @@
 	//
 	//
 
-	var stream = __weex_require_module__('stream');
+	var stream = weex.requireModule('stream');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -302,7 +309,7 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381)
+	    panel: __webpack_require__(399)
 	  },
 	  created: function created() {
 	    var me = this;
@@ -431,46 +438,10 @@
 
 /***/ },
 
-/***/ 488:
+/***/ 509:
 /***/ function(module, exports) {
 
-	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
-	    attrs: {
-	      "title": "stream.fetch",
-	      "type": "primary"
-	    }
-	  }, [_h('panel', {
-	    attrs: {
-	      "title": "method = GET"
-	    }
-	  }, [_h('text', [_vm._s(_vm.getResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = GET / type = jsonp"
-	    }
-	  }, [_h('text', [_vm._s(_vm.getJsonpResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = POST"
-	    }
-	  }, [_h('text', [_vm._s(_vm.postResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = PUT"
-	    }
-	  }, [_h('text', [_vm._s(_vm.putResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = DELETE"
-	    }
-	  }, [_h('text', [_vm._s(_vm.deleteResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = HEAD"
-	    }
-	  }, [_h('text', [_vm._s(_vm.headResult)])]), _h('panel', {
-	    attrs: {
-	      "title": "method = PATCH"
-	    }
-	  }, [_h('text', [_vm._s(_vm.patchResult)])])])])
-	},staticRenderFns: []}
-	module.exports.render._withStripped = true
+	module.exports={render:function(){},staticRenderFns:[]}
 
 /***/ }
 
diff --git a/ios/playground/bundlejs/vue/showcase/boxshadow.js b/ios/playground/bundlejs/vue/showcase/boxshadow.js
new file mode 100644
index 0000000..a69f30d
--- /dev/null
+++ b/ios/playground/bundlejs/vue/showcase/boxshadow.js
@@ -0,0 +1,244 @@
+// { "framework": "Vue" }
+
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 0:
+/***/ function(module, exports, __webpack_require__) {
+
+	var __vue_exports__, __vue_options__
+	var __vue_styles__ = []
+
+	/* styles */
+	__vue_styles__.push(__webpack_require__(510)
+	)
+
+	/* script */
+	__vue_exports__ = __webpack_require__(511)
+
+	/* template */
+	var __vue_template__ = __webpack_require__(512)
+	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
+	if (
+	  typeof __vue_exports__.default === "object" ||
+	  typeof __vue_exports__.default === "function"
+	) {
+	if (Object.keys(__vue_exports__).some(function (key) { return key !== "default" && key !== "__esModule" })) {console.error("named exports are not supported in *.vue files.")}
+	__vue_options__ = __vue_exports__ = __vue_exports__.default
+	}
+	if (typeof __vue_options__ === "function") {
+	  __vue_options__ = __vue_options__.options
+	}
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/boxshadow.vue"
+	__vue_options__.render = __vue_template__.render
+	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-ddb560de"
+	__vue_options__.style = __vue_options__.style || {}
+	__vue_styles__.forEach(function (module) {
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
+	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
+
+	module.exports = __vue_exports__
+	module.exports.el = 'true'
+	new Vue(module.exports)
+
+
+/***/ },
+
+/***/ 510:
+/***/ function(module, exports) {
+
+	module.exports = {
+	  "wrapper": {
+	    "alignItems": "center",
+	    "marginTop": 120
+	  },
+	  "title": {
+	    "fontSize": 48
+	  }
+	}
+
+/***/ },
+
+/***/ 511:
+/***/ function(module, exports) {
+
+	'use strict';
+
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+	//
+
+	module.exports = {
+	    data: function data() {
+	        return {
+	            logoUrl: 'https://alibaba.github.io/weex/img/weex_logo_blue@3x.png',
+	            target: 'World'
+	        };
+	    }
+	};
+
+/***/ },
+
+/***/ 512:
+/***/ function(module, exports) {
+
+	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
+	  return _c('div', {
+	    staticClass: ["wrapper"]
+	  }, [_c('div', {
+	    staticStyle: {
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "20px  10px rgb(255, 69, 0)"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])]), _c('div', {
+	    staticStyle: {
+	      marginTop: "80px",
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "20px  10px 5px rgba(255, 69, 0, 0.8)"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])]), _c('div', {
+	    staticStyle: {
+	      marginTop: "80px",
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "inset 20px  10px 5px rgba(255, 69, 0, 0.8)"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])]), _c('div', {
+	    staticStyle: {
+	      marginTop: "80px",
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "inset 20px  10px 5px rgb(255, 69, 0)"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])]), _c('div', {
+	    staticStyle: {
+	      marginTop: "80px",
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "20px  10px 5px black"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])]), _c('div', {
+	    staticStyle: {
+	      marginTop: "80px",
+	      width: "400px",
+	      height: "60px",
+	      backgroundColor: "#FFE4C4",
+	      boxShadow: "20px  10px 5px #008B00"
+	    }
+	  }, [_c('text', {
+	    staticClass: ["title"],
+	    staticStyle: {
+	      textAlign: "center"
+	    }
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])])])
+	},staticRenderFns: []}
+	module.exports.render._withStripped = true
+
+/***/ }
+
+/******/ });
\ No newline at end of file
diff --git a/ios/playground/bundlejs/vue/showcase/calculator.js b/ios/playground/bundlejs/vue/showcase/calculator.js
index 1553415..287660b 100644
--- a/ios/playground/bundlejs/vue/showcase/calculator.js
+++ b/ios/playground/bundlejs/vue/showcase/calculator.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(489)
+	__vue_styles__.push(__webpack_require__(513)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(490)
+	__vue_exports__ = __webpack_require__(514)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(491)
+	var __vue_template__ = __webpack_require__(515)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/calculator.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/calculator.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4d170e8c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 489:
+/***/ 513:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -121,7 +125,7 @@
 
 /***/ },
 
-/***/ 490:
+/***/ 514:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -190,7 +194,7 @@
 	//
 
 	var OP = ['+', '-', '*', '/'];
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -233,105 +237,105 @@
 
 /***/ },
 
-/***/ 491:
+/***/ 515:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      padding: "5px"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["result"]
-	  }, [_vm._s(_vm.result)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.result))]), _c('div', {
 	    staticClass: ["row"]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["1"]), _h('text', {
+	  }, [_vm._v("1")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["2"]), _h('text', {
+	  }, [_vm._v("2")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["3"]), _h('text', {
+	  }, [_vm._v("3")]), _c('text', {
 	    staticClass: ["btn", "btn-operator"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["+"])]), _h('div', {
+	  }, [_vm._v("+")])]), _c('div', {
 	    staticClass: ["row"]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["4"]), _h('text', {
+	  }, [_vm._v("4")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["5"]), _h('text', {
+	  }, [_vm._v("5")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["6"]), _h('text', {
+	  }, [_vm._v("6")]), _c('text', {
 	    staticClass: ["btn", "btn-operator"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["-"])]), _h('div', {
+	  }, [_vm._v("-")])]), _c('div', {
 	    staticClass: ["row"]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["7"]), _h('text', {
+	  }, [_vm._v("7")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["8"]), _h('text', {
+	  }, [_vm._v("8")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["9"]), _h('text', {
+	  }, [_vm._v("9")]), _c('text', {
 	    staticClass: ["btn", "btn-operator"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["*"])]), _h('div', {
+	  }, [_vm._v("*")])]), _c('div', {
 	    staticClass: ["row"]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["0"]), _h('text', {
+	  }, [_vm._v("0")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.input
 	    }
-	  }, ["."]), _h('text', {
+	  }, [_vm._v(".")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.clear
 	    }
-	  }, ["AC"]), _h('text', {
+	  }, [_vm._v("AC")]), _c('text', {
 	    staticClass: ["btn", "btn-operator"],
 	    on: {
 	      "click": _vm.calculate
 	    }
-	  }, ["="])])])
+	  }, [_vm._v("=")])])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/showcase/itemlist.js b/ios/playground/bundlejs/vue/showcase/itemlist.js
index d11ba81..132d962 100644
--- a/ios/playground/bundlejs/vue/showcase/itemlist.js
+++ b/ios/playground/bundlejs/vue/showcase/itemlist.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(492)
+	__vue_styles__.push(__webpack_require__(516)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(493)
+	__vue_exports__ = __webpack_require__(517)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(494)
+	var __vue_template__ = __webpack_require__(518)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/itemlist.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/itemlist.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-b34e9a8a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 492:
+/***/ 516:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -156,7 +160,7 @@
 
 /***/ },
 
-/***/ 493:
+/***/ 517:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -380,7 +384,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -695,11 +699,11 @@
 
 /***/ },
 
-/***/ 494:
+/***/ 518:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('list', {
+	  return _c('list', {
 	    staticClass: ["list"],
 	    attrs: {
 	      "loadmoreoffset": "2000"
@@ -707,30 +711,32 @@
 	    on: {
 	      "loadmore": _vm.loadmore
 	    }
-	  }, [_vm._l((_vm.shopList), function(item) {
-	    return _h('cell', {
+	  }, _vm._l((_vm.shopList), function(item) {
+	    return _c('cell', {
 	      staticClass: ["cell"],
+	      appendAsTree: true,
 	      attrs: {
-	        "scope": item.scopeValue
+	        "scope": item.scopeValue,
+	        "append": "tree"
 	      },
 	      on: {
 	        "click": function($event) {
 	          _vm.oncellclick(item.id)
 	        }
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticClass: ["shopDiv"]
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticClass: ["shopHeader"],
 	      staticStyle: {
 	        flexDirection: "row"
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticStyle: {
 	        flex: "2",
 	        flexDirection: "row"
 	      }
-	    }, [_h('div', [_h('image', {
+	    }, [_c('div', [_c('image', {
 	      staticStyle: {
 	        width: "60",
 	        height: "60"
@@ -738,57 +744,57 @@
 	      attrs: {
 	        "src": item.PersonPhoto
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticStyle: {
 	        flexDirection: "column",
 	        marginLeft: "5"
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticStyle: {
 	        marginTop: "5"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticStyle: {
 	        fontSize: "20"
 	      }
-	    }, [_vm._s(item.PersonName)])]), _h('div', {
+	    }, [_vm._v(_vm._s(item.PersonName))])]), _c('div', {
 	      staticStyle: {
 	        marginTop: "5"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticStyle: {
 	        fontSize: "20",
 	        color: "#cccccc"
 	      }
-	    }, [_vm._s(item.PersonVisitTime)])])])]), _vm._m(0, true)]), _h('div', {
+	    }, [_vm._v(_vm._s(item.PersonVisitTime))])])])]), _vm._m(0, true)]), _c('div', {
 	      staticClass: ["shopBody"],
 	      staticStyle: {
 	        flexDirection: "column"
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticClass: ["descDiv"],
 	      staticStyle: {
 	        marginTop: "10",
 	        marginLeft: "10"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["shopDesc"],
 	      staticStyle: {
 	        fontSize: "25"
 	      }
-	    }, [_vm._s(item.shopDesc)])]), _h('div', {
+	    }, [_vm._v(_vm._s(item.shopDesc))])]), _c('div', {
 	      staticStyle: {
 	        flexDirection: "row"
 	      }
-	    }, [_vm._l((item.shopImgList), function(img) {
-	      return _h('div', {
+	    }, _vm._l((item.shopImgList), function(img) {
+	      return _c('div', {
 	        staticClass: ["imgDiv"],
 	        staticStyle: {
 	          flex: "1",
 	          flexDirection: "column",
 	          margin: "10"
 	        }
-	      }, [_h('div', [_h('image', {
+	      }, [_c('div', [_c('image', {
 	        staticClass: ["shopImg"],
 	        style: {
 	          width: img.shopImgWidth,
@@ -798,7 +804,7 @@
 	          "src": img.shopImg
 	        }
 	      })]), _vm._m(1, true)])
-	    })])]), _h('div', {
+	    }))]), _c('div', {
 	      staticClass: ["shopFooter"],
 	      staticStyle: {
 	        flexDirection: "row",
@@ -806,93 +812,93 @@
 	        marginLeft: "10",
 	        justifyContent: "flex-end"
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      staticStyle: {
 	        marginRight: "5"
 	      }
-	    }, [_h('image', {
+	    }, [_c('image', {
 	      staticClass: ["shopLikeImg", "smallImg"],
 	      attrs: {
 	        "src": item.shopLikeImg
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticStyle: {
 	        marginRight: "15"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["shopLikeText"],
 	      staticStyle: {
 	        fontSize: "20"
 	      }
-	    }, [_vm._s(item.shopLikeText)])]), _h('div', {
+	    }, [_vm._v(_vm._s(item.shopLikeText))])]), _c('div', {
 	      staticStyle: {
 	        marginRight: "5"
 	      }
-	    }, [_h('image', {
+	    }, [_c('image', {
 	      staticClass: ["shopCommentImg", "smallImg"],
 	      attrs: {
 	        "src": item.shopCommentImg
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticStyle: {
 	        marginRight: "15"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["shopCommentText"],
 	      staticStyle: {
 	        fontSize: "20"
 	      }
-	    }, [_vm._s(item.shopCommentText)])]), _h('div', {
+	    }, [_vm._v(_vm._s(item.shopCommentText))])]), _c('div', {
 	      staticStyle: {
 	        marginRight: "5"
 	      }
-	    }, [_h('image', {
+	    }, [_c('image', {
 	      staticClass: ["shopLookImg", "smallImg"],
 	      attrs: {
 	        "src": item.shopLookImg
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticStyle: {
 	        marginRight: "15"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["shopLookText"],
 	      staticStyle: {
 	        fontSize: "20"
 	      }
-	    }, [_vm._s(item.shopLookText)])]), _h('div', {
+	    }, [_vm._v(_vm._s(item.shopLookText))])]), _c('div', {
 	      staticStyle: {
 	        marginRight: "5"
 	      }
-	    }, [_h('image', {
+	    }, [_c('image', {
 	      staticClass: ["shareImg", "smallImg"],
 	      attrs: {
 	        "src": item.shareImg
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticStyle: {
 	        marginRight: "20"
 	      }
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["shareText"],
 	      staticStyle: {
 	        fontSize: "20"
 	      }
-	    }, [_vm._s(item.shareText)])])])])])
-	  })])
+	    }, [_vm._v(_vm._s(item.shareText))])])])])])
+	  }))
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      flex: "5",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row",
 	      marginLeft: "10",
 	      marginTop: "10"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -900,18 +906,18 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i4/TB1zkDeIFXXXXXrXVXX07tlTXXX-200-200.png_88x88xz.jpg"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["Hope"])])]), _h('div', {
+	  }, [_vm._v("Hope")])])]), _c('div', {
 	    staticStyle: {
 	      position: "absolute",
 	      left: "90",
 	      top: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -919,18 +925,18 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i2/TB1hRb1IXXXXXX3XVXXXQaP.pXX-87-87.jpeg"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["Mem"])])]), _h('div', {
+	  }, [_vm._v("Mem")])])]), _c('div', {
 	    staticStyle: {
 	      position: "absolute",
 	      left: "170",
 	      top: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -938,18 +944,18 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i3/TB1DGkJJFXXXXaZXFXX07tlTXXX-200-200.png"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["auth"])])]), _h('div', {
+	  }, [_vm._v("auth")])])]), _c('div', {
 	    staticStyle: {
 	      position: "absolute",
 	      left: "250",
 	      top: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -957,18 +963,18 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["Friend"])])]), _h('div', {
+	  }, [_vm._v("Friend")])])]), _c('div', {
 	    staticStyle: {
 	      position: "absolute",
 	      left: "330",
 	      top: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -976,18 +982,18 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["issue"])])]), _h('div', {
+	  }, [_vm._v("issue")])])]), _c('div', {
 	    staticStyle: {
 	      position: "absolute",
 	      left: "410",
 	      top: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -995,25 +1001,25 @@
 	    attrs: {
 	      "src": "https://gtms02.alicdn.com/tps/i2/TB11ZZfIVXXXXbMXFXXEDhGGXXX-32-32.png"
 	    }
-	  })]), _h('div', [_h('text', {
+	  })]), _c('div', [_c('text', {
 	    staticStyle: {
 	      fontSize: "20"
 	    }
-	  }, ["super"])])])])
+	  }, [_vm._v("super")])])])])
 	},function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      flex: "1",
 	      marginTop: "10",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flex: "1",
 	      justifyContent: "center",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -1021,22 +1027,22 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i1/TB1nFvPIXXXXXbUXXXXUAkPJpXX-87-87.png"
 	    }
-	  })]), _h('div', {
+	  })]), _c('div', {
 	    staticStyle: {
 	      marginLeft: "5"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      fontSize: "20",
 	      textAlign: "center"
 	    }
-	  }, ["Up"])])]), _h('div', {
+	  }, [_vm._v("Up")])])]), _c('div', {
 	    staticStyle: {
 	      flex: "1",
 	      justifyContent: "center",
 	      flexDirection: "row"
 	    }
-	  }, [_h('div', [_h('image', {
+	  }, [_c('div', [_c('image', {
 	    staticStyle: {
 	      width: "20",
 	      height: "20"
@@ -1044,16 +1050,16 @@
 	    attrs: {
 	      "src": "https://img.alicdn.com/tps/i2/TB1CpD7IXXXXXbSXXXXUAkPJpXX-87-87.png"
 	    }
-	  })]), _h('div', {
+	  })]), _c('div', {
 	    staticStyle: {
 	      marginLeft: "5"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      fontSize: "20",
 	      textAlign: "center"
 	    }
-	  }, ["down"])])])])
+	  }, [_vm._v("down")])])])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/showcase/new-fashion.js b/ios/playground/bundlejs/vue/showcase/new-fashion.js
index ce13f82..9e22dc0 100644
--- a/ios/playground/bundlejs/vue/showcase/new-fashion.js
+++ b/ios/playground/bundlejs/vue/showcase/new-fashion.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(495)
+	__vue_styles__.push(__webpack_require__(519)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(496)
+	__vue_exports__ = __webpack_require__(520)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(538)
+	var __vue_template__ = __webpack_require__(562)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/new-fashion.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/new-fashion.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-706c7bf1"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 495:
+/***/ 519:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -112,7 +116,7 @@
 
 /***/ },
 
-/***/ 496:
+/***/ 520:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -159,19 +163,19 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
-	var timer = __weex_require_module__('timer');
+	var modal = weex.requireModule('modal');
+	var timer = weex.requireModule('timer');
 
 	module.exports = {
 	  components: {
-	    headlines: __webpack_require__(497),
-	    category: __webpack_require__(510),
-	    coupon: __webpack_require__(514),
-	    goods: __webpack_require__(518),
-	    resource: __webpack_require__(522),
-	    scene: __webpack_require__(526),
-	    match: __webpack_require__(530),
-	    brand: __webpack_require__(534)
+	    headlines: __webpack_require__(521),
+	    category: __webpack_require__(534),
+	    coupon: __webpack_require__(538),
+	    goods: __webpack_require__(542),
+	    resource: __webpack_require__(546),
+	    scene: __webpack_require__(550),
+	    match: __webpack_require__(554),
+	    brand: __webpack_require__(558)
 	  },
 	  data: {
 	    navBarHeight: 88,
@@ -683,21 +687,21 @@
 
 /***/ },
 
-/***/ 497:
+/***/ 521:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(498)
+	__vue_styles__.push(__webpack_require__(522)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(499)
+	__vue_exports__ = __webpack_require__(523)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(509)
+	var __vue_template__ = __webpack_require__(533)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -709,22 +713,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/headlines.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/headlines.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-49775644"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 498:
+/***/ 522:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -780,7 +788,7 @@
 
 /***/ },
 
-/***/ 499:
+/***/ 523:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -860,8 +868,8 @@
 
 	module.exports = {
 	  components: {
-	    link: __webpack_require__(500),
-	    banners: __webpack_require__(503)
+	    link: __webpack_require__(524),
+	    banners: __webpack_require__(527)
 	  },
 	  props: {
 	    ds: {
@@ -881,17 +889,17 @@
 
 /***/ },
 
-/***/ 500:
+/***/ 524:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(501)
+	__vue_exports__ = __webpack_require__(525)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(502)
+	var __vue_template__ = __webpack_require__(526)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -903,22 +911,25 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/link.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/link.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 501:
+/***/ 525:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -927,7 +938,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  props: ['text', 'href'],
 	  methods: {
@@ -942,31 +953,31 @@
 
 /***/ },
 
-/***/ 502:
+/***/ 526:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    on: {
 	      "click": _vm.clickHandler
 	    }
-	  }, [_vm._s(_vm.text)])
+	  }, [_vm._v(_vm._s(_vm.text))])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 503:
+/***/ 527:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(504)
+	__vue_exports__ = __webpack_require__(528)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(508)
+	var __vue_template__ = __webpack_require__(532)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -978,22 +989,25 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/banners.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/banners.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 504:
+/***/ 528:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -1015,24 +1029,24 @@
 
 	module.exports = {
 	  components: {
-	    banner: __webpack_require__(505)
+	    banner: __webpack_require__(529)
 	  },
 	  props: ['ds', 'width', 'height', 'space', 'direction']
 	};
 
 /***/ },
 
-/***/ 505:
+/***/ 529:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(506)
+	__vue_exports__ = __webpack_require__(530)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(507)
+	var __vue_template__ = __webpack_require__(531)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -1044,22 +1058,25 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/banner.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/banner.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 506:
+/***/ 530:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -1069,7 +1086,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  props: ['width', 'height', 'src', 'href'],
 	  data: function data() {
@@ -1089,18 +1106,18 @@
 
 /***/ },
 
-/***/ 507:
+/***/ 531:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('image', {
+	  return _c('image', {
 	    style: {
 	      width: _vm.width,
 	      height: _vm.height
 	    },
 	    attrs: {
 	      "src": _vm.src,
-	      "image-quality": _vm.quality
+	      "imageQuality": _vm.quality
 	    },
 	    on: {
 	      "click": _vm.clickHandler
@@ -1111,64 +1128,64 @@
 
 /***/ },
 
-/***/ 508:
+/***/ 532:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [(_vm.direction === 'row') ? _h('div', {
+	  return _c('div', [(_vm.direction === 'row') ? _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_vm._l((_vm.ds), function(i, item) {
-	    return _h('div', {
+	  }, _vm._l((_vm.ds), function(i, item) {
+	    return _c('div', {
 	      style: {
 	        width: _vm.width,
 	        height: _vm.height,
 	        marginLeft: (i % _vm.ds.length ? _vm.space : 0)
 	      }
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.width,
 	        "height": _vm.height,
 	        "src": item.img,
 	        "href": item.url
 	      }
-	    })])
-	  })]) : _vm._e(), (_vm.direction === 'column') ? _h('div', [_vm._l((_vm.ds), function(i, item) {
-	    return _h('div', {
+	    })], 1)
+	  })) : _vm._e(), (_vm.direction === 'column') ? _c('div', _vm._l((_vm.ds), function(i, item) {
+	    return _c('div', {
 	      style: {
 	        width: _vm.width,
 	        height: _vm.height,
 	        marginTop: (i % _vm.ds.length ? _vm.space : 0)
 	      }
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.width,
 	        "height": _vm.height,
 	        "src": item.img,
 	        "href": item.url
 	      }
-	    })])
-	  })]) : _vm._e()])
+	    })], 1)
+	  })) : _vm._e()])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 509:
+/***/ 533:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["container"]
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["banner"],
 	    attrs: {
 	      "src": _vm.ds.topBanner
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticClass: ["rule-container"]
-	  }, [_h('link', {
+	  }, [_c('link', {
 	    staticStyle: {
 	      fontSize: "22px",
 	      color: "#ffffff",
@@ -1178,14 +1195,14 @@
 	      "text": "帮助",
 	      "href": _vm.ds.ruleLink
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["announce"]
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["announce-hd"],
 	    attrs: {
 	      "src": _vm.ds.announceHdBanner
 	    }
-	  }), _h('banners', {
+	  }), _c('banners', {
 	    staticStyle: {
 	      marginLeft: "6",
 	      marginRight: "6"
@@ -1197,27 +1214,27 @@
 	      "height": _vm.NUMBER_172,
 	      "space": _vm.NUMBER_3
 	    }
-	  })])])
+	  })], 1)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 510:
+/***/ 534:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(511)
+	__vue_styles__.push(__webpack_require__(535)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(512)
+	__vue_exports__ = __webpack_require__(536)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(513)
+	var __vue_template__ = __webpack_require__(537)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -1229,22 +1246,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/category.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/category.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-fee419e2"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 511:
+/***/ 535:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -1292,7 +1313,7 @@
 
 /***/ },
 
-/***/ 512:
+/***/ 536:
 /***/ function(module, exports, __webpack_require__) {
 
 	"use strict";
@@ -1770,7 +1791,7 @@
 
 	module.exports = {
 	  components: {
-	    banner: __webpack_require__(505)
+	    banner: __webpack_require__(529)
 	  },
 	  props: {
 	    ds: {
@@ -1812,105 +1833,105 @@
 
 /***/ },
 
-/***/ 513:
+/***/ 537:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	  return _c('div', [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), _h('div', {
+	  }) : _vm._e(), _c('div', {
 	    staticClass: ["item-container"]
-	  }, [_vm._l((_vm.items), function(i, item) {
-	    return _h('div', {
+	  }, _vm._l((_vm.items), function(i, item) {
+	    return _c('div', {
 	      style: {
 	        width: 750,
 	        paddingBottom: 14,
 	        backgroundColor: item.colour
 	      }
-	    }, [_h('div', [_h('banner', {
+	    }, [_c('div', [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_750,
 	        "height": _vm.NUMBER_237,
 	        "src": i % 2 === 0 ? item.leftBannerImg : item.rightBannerImg,
 	        "href": item.bannerUrl
 	      }
-	    })]), _h('div', {
+	    })], 1), _c('div', {
 	      staticClass: ["shop-list"]
-	    }, [_vm._l((item.shopList), function(shop) {
-	      return _h('div', {
+	    }, _vm._l((item.shopList), function(shop) {
+	      return _c('div', {
 	        staticClass: ["shop-img-container"]
-	      }, [_h('banner', {
+	      }, [_c('banner', {
 	        attrs: {
 	          "width": _vm.NUMBER_186,
 	          "height": _vm.NUMBER_208,
 	          "src": shop.picUrl,
 	          "href": shop.shopUrl
 	        }
-	      })])
-	    })])])
-	  })]), _h('div', {
+	      })], 1)
+	    }))])
+	  })), _c('div', {
 	    staticClass: ["sub-item-container"],
 	    style: {
 	      height: Math.round(_vm.subItems.length / 3) * (241 + 3)
 	    }
-	  }, [_vm._l((_vm.subItems), function(i, item) {
-	    return _h('div', {
+	  }, _vm._l((_vm.subItems), function(i, item) {
+	    return _c('div', {
 	      staticClass: ["sub-item"],
 	      style: {
 	        top: _vm.getSubItemTop(i),
 	        left: _vm.getSubItemLeft(i)
 	      }
-	    }, [_h('image', {
+	    }, [_c('image', {
 	      staticClass: ["sub-item-bg"],
 	      attrs: {
 	        "src": _vm.subItemBg
 	      }
-	    }), _h('div', {
+	    }), _c('div', {
 	      staticClass: ["sub-item-img"]
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_248,
 	        "height": _vm.NUMBER_155,
 	        "src": item.industryImg,
 	        "href": item.industryUrl
 	      }
-	    })]), _h('div', {
+	    })], 1), _c('div', {
 	      staticClass: ["sub-item-title"]
-	    }, [_h('text', {
+	    }, [_c('text', {
 	      staticClass: ["industry-title"],
 	      attrs: {
 	        "href": item.industryUrl
 	      }
-	    }, [_vm._s(item.industryTitle)]), _h('text', {
+	    }, [_vm._v(_vm._s(item.industryTitle))]), _c('text', {
 	      staticClass: ["industry-benefit"],
 	      attrs: {
 	        "href": item.industryUrl
 	      }
-	    }, [_vm._s(item.industryBenefit)])])])
-	  })])])
+	    }, [_vm._v(_vm._s(item.industryBenefit))])])])
+	  }))])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 514:
+/***/ 538:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(515)
+	__vue_styles__.push(__webpack_require__(539)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(516)
+	__vue_exports__ = __webpack_require__(540)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(517)
+	var __vue_template__ = __webpack_require__(541)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -1922,22 +1943,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/coupon.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/coupon.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-f32ef712"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 515:
+/***/ 539:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -1985,7 +2010,7 @@
 
 /***/ },
 
-/***/ 516:
+/***/ 540:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -2051,7 +2076,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  props: {
 	    ds: {
@@ -2077,33 +2102,33 @@
 
 /***/ },
 
-/***/ 517:
+/***/ 541:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	  return _c('div', [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), _h('div', {
+	  }) : _vm._e(), _c('div', {
 	    staticClass: ["wrapper"]
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["img"],
 	    attrs: {
 	      "src": _vm.currentStatus
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticClass: ["my-coupon"],
 	    on: {
 	      "click": _vm.handleClick
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticClass: ["guides"],
 	    on: {
 	      "click": _vm.handleClick
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticClass: ["lottery"],
 	    on: {
 	      "click": _vm.handleClick
@@ -2114,21 +2139,21 @@
 
 /***/ },
 
-/***/ 518:
+/***/ 542:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(519)
+	__vue_styles__.push(__webpack_require__(543)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(520)
+	__vue_exports__ = __webpack_require__(544)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(521)
+	var __vue_template__ = __webpack_require__(545)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -2140,22 +2165,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/goods.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/goods.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-3ac791d6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 519:
+/***/ 543:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2181,7 +2210,7 @@
 
 /***/ },
 
-/***/ 520:
+/***/ 544:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -2236,7 +2265,7 @@
 
 	module.exports = {
 	  components: {
-	    banner: __webpack_require__(505)
+	    banner: __webpack_require__(529)
 	  },
 	  props: {
 	    ds: {
@@ -2257,26 +2286,26 @@
 
 /***/ },
 
-/***/ 521:
+/***/ 545:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return (!_vm.ds.isHide) ? _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	  return (!_vm.ds.isHide) ? _c('div', [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), _h('slider', {
+	  }) : _vm._e(), _c('slider', {
 	    staticClass: ["slider"],
 	    attrs: {
-	      "show-indicators": "true",
-	      "auto-play": "true",
+	      "showIndicators": "true",
+	      "autoPlay": "true",
 	      "interval": "3000"
 	    }
 	  }, [_vm._l((_vm.ds.bannerItems), function(item) {
-	    return _h('div', {
+	    return _c('div', {
 	      staticClass: ["pannel"]
-	    }, [_h('div', [_h('banner', {
+	    }, [_c('div', [_c('banner', {
 	      staticStyle: {
 	        marginBottom: "4"
 	      },
@@ -2286,23 +2315,23 @@
 	        "src": item.img1,
 	        "href": item.url1
 	      }
-	    }), _h('banner', {
+	    }), _c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_251,
 	        "height": _vm.NUMBER_292,
 	        "src": item.img2,
 	        "href": item.url2
 	      }
-	    })]), _h('div', {
+	    })], 1), _c('div', {
 	      staticClass: ["middle-col"]
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_240,
 	        "height": _vm.NUMBER_588,
 	        "src": item.img3,
 	        "href": item.url3
 	      }
-	    })]), _h('div', [_h('banner', {
+	    })], 1), _c('div', [_c('banner', {
 	      staticStyle: {
 	        marginBottom: "4"
 	      },
@@ -2312,15 +2341,15 @@
 	        "src": item.img4,
 	        "href": item.url4
 	      }
-	    }), _h('banner', {
+	    }), _c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_251,
 	        "height": _vm.NUMBER_292,
 	        "src": item.img5,
 	        "href": item.url5
 	      }
-	    })])])
-	  }), _h('indicator', {
+	    })], 1)])
+	  }), _c('indicator', {
 	    staticStyle: {
 	      position: "absolute",
 	      width: "714",
@@ -2331,27 +2360,27 @@
 	      itemColor: "#999999",
 	      itemSelectedColor: "#000000"
 	    }
-	  })])]) : _vm._e()
+	  })], 2)]) : _vm._e()
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 522:
+/***/ 546:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(523)
+	__vue_styles__.push(__webpack_require__(547)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(524)
+	__vue_exports__ = __webpack_require__(548)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(525)
+	var __vue_template__ = __webpack_require__(549)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -2363,22 +2392,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/resource.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/resource.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-503cf21f"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 523:
+/***/ 547:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2393,7 +2426,7 @@
 
 /***/ },
 
-/***/ 524:
+/***/ 548:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -2420,8 +2453,8 @@
 
 	module.exports = {
 	  components: {
-	    banners: __webpack_require__(503),
-	    banner: __webpack_require__(505)
+	    banners: __webpack_require__(527),
+	    banner: __webpack_require__(529)
 	  },
 	  props: {
 	    ds: {
@@ -2443,20 +2476,20 @@
 
 /***/ },
 
-/***/ 525:
+/***/ 549:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return (!_vm.ds.isHide) ? _h('div', [_h('div', {
+	  return (!_vm.ds.isHide) ? _c('div', [_c('div', {
 	    staticClass: ["big-banner-container"]
-	  }, [_h('banner', {
+	  }, [_c('banner', {
 	    attrs: {
 	      "width": _vm.NUMBER_750,
 	      "height": _vm.NUMBER_200,
 	      "src": _vm.ds.bigBannerImg,
 	      "href": _vm.ds.bigBannerUrl
 	    }
-	  })]), _h('banners', {
+	  })], 1), _c('banners', {
 	    attrs: {
 	      "direction": "row",
 	      "ds": _vm.ds.smallBannerItems,
@@ -2464,27 +2497,27 @@
 	      "height": _vm.NUMBER_224,
 	      "space": _vm.NUMBER_4
 	    }
-	  })]) : _vm._e()
+	  })], 1) : _vm._e()
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 526:
+/***/ 550:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(527)
+	__vue_styles__.push(__webpack_require__(551)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(528)
+	__vue_exports__ = __webpack_require__(552)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(529)
+	var __vue_template__ = __webpack_require__(553)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -2496,22 +2529,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/scene.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/scene.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-12dfa56a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 527:
+/***/ 551:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2571,7 +2608,7 @@
 
 /***/ },
 
-/***/ 528:
+/***/ 552:
 /***/ function(module, exports, __webpack_require__) {
 
 	"use strict";
@@ -2815,7 +2852,7 @@
 
 	module.exports = {
 	  components: {
-	    banner: __webpack_require__(505)
+	    banner: __webpack_require__(529)
 	  },
 	  props: {
 	    ds: {
@@ -2857,72 +2894,72 @@
 
 /***/ },
 
-/***/ 529:
+/***/ 553:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	  return _c('div', [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), _h('div', {
+	  }) : _vm._e(), _c('div', {
 	    staticClass: ["small-item-container"],
 	    style: {
 	      height: Math.round(_vm.smallItems.length / 2) * 234
 	    }
-	  }, [_vm._l((_vm.smallItems), function(i, item) {
-	    return _h('div', {
+	  }, _vm._l((_vm.smallItems), function(i, item) {
+	    return _c('div', {
 	      staticClass: ["small-item"],
 	      style: {
 	        top: _vm.getItemTop(i),
 	        left: _vm.getItemLeft(i)
 	      }
-	    }, [_h('div', [_h('image', {
+	    }, [_c('div', [_c('image', {
 	      staticClass: ["small-item-bg"],
 	      attrs: {
 	        "src": _vm.smallItemBg
 	      }
-	    })]), _h('div', {
+	    })]), _c('div', {
 	      staticClass: ["small-item-img"]
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_186,
 	        "height": _vm.NUMBER_206,
 	        "src": item.itemImg,
 	        "href": item.sceneUrl
 	      }
-	    })]), _h('div', {
+	    })], 1), _c('div', {
 	      staticClass: ["small-benifit-img"]
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_170,
 	        "height": _vm.NUMBER_100,
 	        "src": item.benefitImg,
 	        "href": item.sceneUrl
 	      }
-	    })])])
-	  })])])
+	    })], 1)])
+	  }))])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 530:
+/***/ 554:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(531)
+	__vue_styles__.push(__webpack_require__(555)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(532)
+	__vue_exports__ = __webpack_require__(556)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(533)
+	var __vue_template__ = __webpack_require__(557)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -2934,22 +2971,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/match.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/match.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-97d4abf8"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 531:
+/***/ 555:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -2964,7 +3005,7 @@
 
 /***/ },
 
-/***/ 532:
+/***/ 556:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -2999,7 +3040,7 @@
 
 	module.exports = {
 	  components: {
-	    banner: __webpack_require__(505)
+	    banner: __webpack_require__(529)
 	  },
 	  props: {
 	    ds: {
@@ -3021,70 +3062,70 @@
 
 /***/ },
 
-/***/ 533:
+/***/ 557:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [(_vm.ds.floorTitle) ? _h('image', {
+	  return _c('div', [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), (_vm.ds.isShowTmSpecBanner && _vm.ds.tmSpecBanner) ? _h('div', {
+	  }) : _vm._e(), (_vm.ds.isShowTmSpecBanner && _vm.ds.tmSpecBanner) ? _c('div', {
 	    staticClass: ["tm-banner"]
-	  }, [_h('banner', {
+	  }, [_c('banner', {
 	    attrs: {
 	      "width": _vm.NUMBER_750,
 	      "height": _vm.NUMBER_200,
 	      "src": _vm.ds.tmSpecBanner.img,
 	      "href": _vm.ds.tmSpecBanner.url
 	    }
-	  })]) : _vm._e(), _vm._l((_vm.ds.bannerItems), function(item) {
-	    return _h('div', {
+	  })], 1) : _vm._e(), _vm._l((_vm.ds.bannerItems), function(item) {
+	    return _c('div', {
 	      style: {
 	        flexDirection: 'row',
 	        marginBottom: _vm.NUMBER_4
 	      }
-	    }, [_h('div', {
+	    }, [_c('div', {
 	      style: {
 	        marginRight: _vm.NUMBER_4
 	      }
-	    }, [_h('banner', {
+	    }, [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_373,
 	        "height": _vm.NUMBER_240,
 	        "src": item.leftImg,
 	        "href": item.leftUrl
 	      }
-	    })]), _h('div', [_h('banner', {
+	    })], 1), _c('div', [_c('banner', {
 	      attrs: {
 	        "width": _vm.NUMBER_373,
 	        "height": _vm.NUMBER_240,
 	        "src": item.rightImg,
 	        "href": item.rightUrl
 	      }
-	    })])])
-	  })])
+	    })], 1)])
+	  })], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 534:
+/***/ 558:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(535)
+	__vue_styles__.push(__webpack_require__(559)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(536)
+	__vue_exports__ = __webpack_require__(560)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(537)
+	var __vue_template__ = __webpack_require__(561)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -3096,22 +3137,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/include/brand.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/include/brand.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-608f6ac6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 535:
+/***/ 559:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -3127,7 +3172,7 @@
 
 /***/ },
 
-/***/ 536:
+/***/ 560:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -3154,7 +3199,7 @@
 
 	module.exports = {
 	  components: {
-	    banners: __webpack_require__(503)
+	    banners: __webpack_require__(527)
 	  },
 	  props: {
 	    ds: {
@@ -3197,23 +3242,23 @@
 
 /***/ },
 
-/***/ 537:
+/***/ 561:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["container"]
-	  }, [(_vm.ds.floorTitle) ? _h('image', {
+	  }, [(_vm.ds.floorTitle) ? _c('image', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "src": _vm.ds.floorTitle
 	    }
-	  }) : _vm._e(), _h('div', {
+	  }) : _vm._e(), _c('div', {
 	    staticStyle: {
 	      marginLeft: "4",
 	      marginRight: "4"
 	    }
-	  }, [_h('banners', {
+	  }, [_c('banners', {
 	    attrs: {
 	      "direction": "column",
 	      "ds": _vm.bannerItems,
@@ -3221,19 +3266,19 @@
 	      "height": _vm.NUMBER_230,
 	      "space": _vm.NUMBER_4
 	    }
-	  })])])
+	  })], 1)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 538:
+/***/ 562:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', {
+	  return _c('scroller', {
 	    staticClass: ["content"]
-	  }, [_h('refresh', {
+	  }, [_c('refresh', {
 	    staticClass: ["refresh"],
 	    staticStyle: {
 	      flexDirection: "row"
@@ -3244,44 +3289,44 @@
 	    on: {
 	      "refresh": _vm.handleRefresh
 	    }
-	  }, [_h('loading-indicator'), _h('text', {
+	  }, [_c('loading-indicator'), _c('text', {
 	    staticStyle: {
 	      marginLeft: "36px",
 	      color: "#eee"
 	    }
-	  }, ["下拉刷新..."])]), (_vm.show0) ? _h('headlines', {
+	  }, [_vm._v("下拉刷新...")])], 1), (_vm.show0) ? _c('headlines', {
 	    attrs: {
 	      "ds": _vm.showData.header
 	    }
-	  }) : _vm._e(), (_vm.show0) ? _h('category', {
+	  }) : _vm._e(), (_vm.show0) ? _c('category', {
 	    attrs: {
 	      "ds": _vm.showData.category
 	    }
-	  }) : _vm._e(), (_vm.show1) ? _h('coupon', {
+	  }) : _vm._e(), (_vm.show1) ? _c('coupon', {
 	    attrs: {
 	      "ds": _vm.showData.coupon
 	    }
-	  }) : _vm._e(), (_vm.show1) ? _h('goods', {
+	  }) : _vm._e(), (_vm.show1) ? _c('goods', {
 	    attrs: {
 	      "ds": _vm.showData.goods
 	    }
-	  }) : _vm._e(), (_vm.show1) ? _h('resource', {
+	  }) : _vm._e(), (_vm.show1) ? _c('resource', {
 	    attrs: {
 	      "ds": _vm.showData.resource
 	    }
-	  }) : _vm._e(), (_vm.show1) ? _h('scene', {
+	  }) : _vm._e(), (_vm.show1) ? _c('scene', {
 	    attrs: {
 	      "ds": _vm.showData.scene
 	    }
-	  }) : _vm._e(), (_vm.show2) ? _h('match', {
+	  }) : _vm._e(), (_vm.show2) ? _c('match', {
 	    attrs: {
 	      "ds": _vm.showData.match
 	    }
-	  }) : _vm._e(), (_vm.show2) ? _h('brand', {
+	  }) : _vm._e(), (_vm.show2) ? _c('brand', {
 	    attrs: {
 	      "ds": _vm.showData.brand
 	    }
-	  }) : _vm._e(), _h('loading', {
+	  }) : _vm._e(), _c('loading', {
 	    staticClass: ["loading"],
 	    attrs: {
 	      "display": _vm.displayLoading
@@ -3289,11 +3334,11 @@
 	    on: {
 	      "loading": _vm.handleLoading
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      color: "#eee"
 	    }
-	  }, ["加载更多..."])])])
+	  }, [_vm._v("加载更多...")])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/showcase/progress.js b/ios/playground/bundlejs/vue/showcase/progress.js
index db5df7e..24550ee 100644
--- a/ios/playground/bundlejs/vue/showcase/progress.js
+++ b/ios/playground/bundlejs/vue/showcase/progress.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(539)
+	__vue_exports__ = __webpack_require__(563)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(540)
+	var __vue_template__ = __webpack_require__(564)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/showcase/progress.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/showcase/progress.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,13 +255,13 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 539:
+/***/ 563:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -290,7 +297,7 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381)
+	    panel: __webpack_require__(399)
 	  },
 	  created: function created() {
 	    var me = this;
@@ -305,29 +312,29 @@
 
 /***/ },
 
-/***/ 540:
+/***/ 564:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Basic",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    style: {
 	      width: _vm.fullW,
 	      borderColor: '#333',
 	      borderWidth: 1,
 	      borderStyle: 'solid'
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    style: {
 	      width: _vm.w,
 	      height: 60,
 	      backgroundColor: '#333'
 	    }
-	  })])])])
+	  })])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/style/index.js b/ios/playground/bundlejs/vue/style/index.js
index 44611ad..a3df2ff 100644
--- a/ios/playground/bundlejs/vue/style/index.js
+++ b/ios/playground/bundlejs/vue/style/index.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(541)
+	__vue_styles__.push(__webpack_require__(565)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(542)
+	__vue_exports__ = __webpack_require__(566)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(555)
+	var __vue_template__ = __webpack_require__(579)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/index.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/index.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6706eadc"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,27 +260,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -284,22 +292,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -345,7 +357,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -367,21 +379,21 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 541:
+/***/ 565:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -393,7 +405,7 @@
 
 /***/ },
 
-/***/ 542:
+/***/ 566:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -432,30 +444,30 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381),
-	    styleBox: __webpack_require__(543),
-	    styleFlex: __webpack_require__(551),
-	    styleItem: __webpack_require__(546)
+	    panel: __webpack_require__(399),
+	    styleBox: __webpack_require__(567),
+	    styleFlex: __webpack_require__(575),
+	    styleItem: __webpack_require__(570)
 	  }
 	};
 
 /***/ },
 
-/***/ 543:
+/***/ 567:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(544)
+	__vue_styles__.push(__webpack_require__(568)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(545)
+	__vue_exports__ = __webpack_require__(569)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(550)
+	var __vue_template__ = __webpack_require__(574)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -467,22 +479,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-box.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-box.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-319e5239"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 544:
+/***/ 568:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -506,7 +522,7 @@
 
 /***/ },
 
-/***/ 545:
+/***/ 569:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -575,29 +591,29 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381),
-	    tip: __webpack_require__(391),
-	    styleItem: __webpack_require__(546)
+	    panel: __webpack_require__(399),
+	    tip: __webpack_require__(409),
+	    styleItem: __webpack_require__(570)
 	  }
 	};
 
 /***/ },
 
-/***/ 546:
+/***/ 570:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(547)
+	__vue_styles__.push(__webpack_require__(571)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(548)
+	__vue_exports__ = __webpack_require__(572)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(549)
+	var __vue_template__ = __webpack_require__(573)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -609,22 +625,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-768350d6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 547:
+/***/ 571:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -644,7 +664,7 @@
 
 /***/ },
 
-/***/ 548:
+/***/ 572:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -671,11 +691,11 @@
 
 /***/ },
 
-/***/ 549:
+/***/ 573:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    staticClass: ["item", "txt"],
 	    style: {
 	      backgroundColor: _vm.bgColor
@@ -689,33 +709,33 @@
 
 /***/ },
 
-/***/ 550:
+/***/ 574:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('panel', {
+	  return _c('div', [_c('panel', {
 	    attrs: {
 	      "title": "Box Model",
-	      "padding-body": "0",
+	      "paddingBody": "0",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["box"]
-	  }, ["Box"])]), _h('panel', {
+	  }, [_vm._v("Box")])]), _c('panel', {
 	    attrs: {
 	      "title": "border",
 	      "type": "primary"
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "border-width",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "2px",
@@ -724,7 +744,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "10px",
@@ -733,7 +753,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderLeftWidth: "4px",
@@ -742,7 +762,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderBottomWidth: "4px",
@@ -751,16 +771,16 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "border-color",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -769,7 +789,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -778,7 +798,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -787,12 +807,12 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "border-style",
 	      "type": ""
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "10px"
 	    },
@@ -800,11 +820,11 @@
 	      "type": "warning",
 	      "value": "just support four edges"
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -813,7 +833,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "dashed",
 	      borderWidth: "4px",
@@ -823,7 +843,7 @@
 	      "value": "",
 	      "type": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "dotted",
 	      borderWidth: "4px",
@@ -832,16 +852,16 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)], 1), _c('panel', {
 	    attrs: {
 	      "title": "border-radius",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      width: "75px",
 	      borderRadius: "38px"
@@ -849,14 +869,14 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderRadius: "20px"
 	    },
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderTopLeftRadius: "20px",
 	      borderTopRightRadius: "20px"
@@ -864,7 +884,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderBottomLeftRadius: "20px",
 	      borderBottomRightRadius: "20px"
@@ -872,27 +892,27 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])])])])
+	  })], 1)])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 551:
+/***/ 575:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(552)
+	__vue_styles__.push(__webpack_require__(576)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(553)
+	__vue_exports__ = __webpack_require__(577)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(554)
+	var __vue_template__ = __webpack_require__(578)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -904,22 +924,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-flex.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-flex.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-32f80d0a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 552:
+/***/ 576:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -937,7 +961,7 @@
 
 /***/ },
 
-/***/ 553:
+/***/ 577:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -1062,239 +1086,239 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381),
-	    styleItem: __webpack_require__(546)
+	    panel: __webpack_require__(399),
+	    styleItem: __webpack_require__(570)
 	  }
 	};
 
 /***/ },
 
-/***/ 554:
+/***/ 578:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('panel', {
+	  return _c('div', [_c('panel', {
 	    attrs: {
 	      "title": "flex-direction",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "row"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "type": "1"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexDirection: "column"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "column"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "type": "1"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "justify-content",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "flex-end"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "center"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "space-between"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "align-items",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "flex-end"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "center"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "stretch"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "flex",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
@@ -1302,26 +1326,26 @@
 	      "value": "no flex",
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -1330,7 +1354,7 @@
 	      "type": "1",
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "2"
@@ -1338,12 +1362,12 @@
 	    attrs: {
 	      "value": "flex:2"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -1351,7 +1375,7 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -1360,7 +1384,7 @@
 	      "type": "1",
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -1368,12 +1392,12 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -1381,7 +1405,7 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "2"
@@ -1390,7 +1414,7 @@
 	      "type": "1",
 	      "value": "flex:2"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "3"
@@ -1398,126 +1422,126 @@
 	    attrs: {
 	      "value": "flex:3"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "flex-wrap",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexWrap: "wrap",
 	      backgroundColor: "grey",
 	      padding: "10"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "1:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "2:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "3:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "4:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "5:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "6:wrap"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexWrap: "nowrap",
 	      backgroundColor: "grey",
 	      padding: "10"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "1:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "2:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "3:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "4:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "5:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "6:nowrap"
 	    }
-	  })])])])
+	  })], 1)])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 555:
+/***/ 579:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('style-box'), _h('style-flex'), _h('panel', {
+	  return _c('scroller', [_c('style-box'), _c('style-flex'), _c('panel', {
 	    attrs: {
 	      "title": "opacity",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      opacity: "1"
 	    },
 	    attrs: {
 	      "value": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      opacity: "0.9"
 	    },
 	    attrs: {
 	      "value": "0.9"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      opacity: "0.5"
 	    },
 	    attrs: {
 	      "value": "0.5"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      opacity: "0.2"
 	    },
 	    attrs: {
 	      "value": "0.2"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "background-color",
 	      "type": "primary"
 	    }
-	  }, [_h('div', [_h('style-item', {
+	  }, [_c('div', [_c('style-item', {
 	    staticClass: ["bg-item"],
 	    staticStyle: {
 	      backgroundColor: "#333"
@@ -1525,7 +1549,7 @@
 	    attrs: {
 	      "value": "#333"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticClass: ["bg-item"],
 	    staticStyle: {
 	      backgroundColor: "#333333"
@@ -1533,7 +1557,7 @@
 	    attrs: {
 	      "value": "#333333"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticClass: ["bg-item"],
 	    staticStyle: {
 	      backgroundColor: "rgb(238, 162, 54)"
@@ -1541,7 +1565,7 @@
 	    attrs: {
 	      "value": "rgb()"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticClass: ["bg-item"],
 	    staticStyle: {
 	      backgroundColor: "rgba(238, 162, 54, 0.5)"
@@ -1549,7 +1573,7 @@
 	    attrs: {
 	      "value": "rgba()"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticClass: ["bg-item"],
 	    staticStyle: {
 	      backgroundColor: "red"
@@ -1557,7 +1581,7 @@
 	    attrs: {
 	      "value": "red"
 	    }
-	  })])])])
+	  })], 1)])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/style/style-box.js b/ios/playground/bundlejs/vue/style/style-box.js
index f178901..3f4fc34 100644
--- a/ios/playground/bundlejs/vue/style/style-box.js
+++ b/ios/playground/bundlejs/vue/style/style-box.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(544)
+	__vue_styles__.push(__webpack_require__(568)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(545)
+	__vue_exports__ = __webpack_require__(569)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(550)
+	var __vue_template__ = __webpack_require__(574)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-box.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-box.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-319e5239"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,27 +260,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -284,22 +292,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -345,7 +357,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -367,21 +379,21 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 544:
+/***/ 568:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -405,7 +417,7 @@
 
 /***/ },
 
-/***/ 545:
+/***/ 569:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -474,29 +486,29 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381),
-	    tip: __webpack_require__(391),
-	    styleItem: __webpack_require__(546)
+	    panel: __webpack_require__(399),
+	    tip: __webpack_require__(409),
+	    styleItem: __webpack_require__(570)
 	  }
 	};
 
 /***/ },
 
-/***/ 546:
+/***/ 570:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(547)
+	__vue_styles__.push(__webpack_require__(571)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(548)
+	__vue_exports__ = __webpack_require__(572)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(549)
+	var __vue_template__ = __webpack_require__(573)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -508,22 +520,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-768350d6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 547:
+/***/ 571:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -543,7 +559,7 @@
 
 /***/ },
 
-/***/ 548:
+/***/ 572:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -570,11 +586,11 @@
 
 /***/ },
 
-/***/ 549:
+/***/ 573:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    staticClass: ["item", "txt"],
 	    style: {
 	      backgroundColor: _vm.bgColor
@@ -588,33 +604,33 @@
 
 /***/ },
 
-/***/ 550:
+/***/ 574:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('panel', {
+	  return _c('div', [_c('panel', {
 	    attrs: {
 	      "title": "Box Model",
-	      "padding-body": "0",
+	      "paddingBody": "0",
 	      "type": "primary"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["box"]
-	  }, ["Box"])]), _h('panel', {
+	  }, [_vm._v("Box")])]), _c('panel', {
 	    attrs: {
 	      "title": "border",
 	      "type": "primary"
 	    }
-	  }, [_h('panel', {
+	  }, [_c('panel', {
 	    attrs: {
 	      "title": "border-width",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "2px",
@@ -623,7 +639,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "10px",
@@ -632,7 +648,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderLeftWidth: "4px",
@@ -641,7 +657,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderBottomWidth: "4px",
@@ -650,16 +666,16 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "border-color",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -668,7 +684,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -677,7 +693,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -686,12 +702,12 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "border-style",
 	      "type": ""
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "10px"
 	    },
@@ -699,11 +715,11 @@
 	      "type": "warning",
 	      "value": "just support four edges"
 	    }
-	  }), _h('div', {
+	  }), _c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      borderStyle: "solid",
 	      borderWidth: "4px",
@@ -712,7 +728,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "dashed",
 	      borderWidth: "4px",
@@ -722,7 +738,7 @@
 	      "value": "",
 	      "type": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderStyle: "dotted",
 	      borderWidth: "4px",
@@ -731,16 +747,16 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])]), _h('panel', {
+	  })], 1)], 1), _c('panel', {
 	    attrs: {
 	      "title": "border-radius",
 	      "type": ""
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      width: "75px",
 	      borderRadius: "38px"
@@ -748,14 +764,14 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderRadius: "20px"
 	    },
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderTopLeftRadius: "20px",
 	      borderTopRightRadius: "20px"
@@ -763,7 +779,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      borderBottomLeftRadius: "20px",
 	      borderBottomRightRadius: "20px"
@@ -771,7 +787,7 @@
 	    attrs: {
 	      "value": ""
 	    }
-	  })])])])])
+	  })], 1)])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/style/style-flex.js b/ios/playground/bundlejs/vue/style/style-flex.js
index 96ea35f..bf6aebf 100644
--- a/ios/playground/bundlejs/vue/style/style-flex.js
+++ b/ios/playground/bundlejs/vue/style/style-flex.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(552)
+	__vue_styles__.push(__webpack_require__(576)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(553)
+	__vue_exports__ = __webpack_require__(577)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(554)
+	var __vue_template__ = __webpack_require__(578)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-flex.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-flex.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-32f80d0a"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,21 +91,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -113,22 +117,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -182,7 +190,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -227,16 +235,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -244,7 +252,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -252,27 +260,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 546:
+/***/ 570:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(547)
+	__vue_styles__.push(__webpack_require__(571)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(548)
+	__vue_exports__ = __webpack_require__(572)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(549)
+	var __vue_template__ = __webpack_require__(573)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -284,22 +292,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-768350d6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 547:
+/***/ 571:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -319,7 +331,7 @@
 
 /***/ },
 
-/***/ 548:
+/***/ 572:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -346,11 +358,11 @@
 
 /***/ },
 
-/***/ 549:
+/***/ 573:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    staticClass: ["item", "txt"],
 	    style: {
 	      backgroundColor: _vm.bgColor
@@ -364,7 +376,7 @@
 
 /***/ },
 
-/***/ 552:
+/***/ 576:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -382,7 +394,7 @@
 
 /***/ },
 
-/***/ 553:
+/***/ 577:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -507,239 +519,239 @@
 
 	module.exports = {
 	  components: {
-	    panel: __webpack_require__(381),
-	    styleItem: __webpack_require__(546)
+	    panel: __webpack_require__(399),
+	    styleItem: __webpack_require__(570)
 	  }
 	};
 
 /***/ },
 
-/***/ 554:
+/***/ 578:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('panel', {
+	  return _c('div', [_c('panel', {
 	    attrs: {
 	      "title": "flex-direction",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexDirection: "row"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "row"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "type": "1"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexDirection: "column"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "column"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "type": "1"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "justify-content",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "flex-end"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "center"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      justifyContent: "space-between"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "align-items",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "flex-end"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "center"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row", "row-align"],
 	    staticStyle: {
 	      alignItems: "stretch"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "flex",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
@@ -747,26 +759,26 @@
 	      "value": "no flex",
 	      "type": "1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0"
 	    },
 	    attrs: {
 	      "value": "no flex"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -775,7 +787,7 @@
 	      "type": "1",
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "2"
@@ -783,12 +795,12 @@
 	    attrs: {
 	      "value": "flex:2"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -796,7 +808,7 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -805,7 +817,7 @@
 	      "type": "1",
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -813,12 +825,12 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      alignItems: "flex-start"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "1"
@@ -826,7 +838,7 @@
 	    attrs: {
 	      "value": "flex:1"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "2"
@@ -835,7 +847,7 @@
 	      "type": "1",
 	      "value": "flex:2"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    staticStyle: {
 	      marginRight: "0",
 	      flex: "3"
@@ -843,74 +855,74 @@
 	    attrs: {
 	      "value": "flex:3"
 	    }
-	  })])]), _h('panel', {
+	  })], 1)]), _c('panel', {
 	    attrs: {
 	      "title": "flex-wrap",
 	      "type": "primary"
 	    }
-	  }, [_h('div', {
+	  }, [_c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexWrap: "wrap",
 	      backgroundColor: "grey",
 	      padding: "10"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "1:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "2:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "3:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "4:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "5:wrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "6:wrap"
 	    }
-	  })]), _h('div', {
+	  })], 1), _c('div', {
 	    staticClass: ["row"],
 	    staticStyle: {
 	      flexWrap: "nowrap",
 	      backgroundColor: "grey",
 	      padding: "10"
 	    }
-	  }, [_h('style-item', {
+	  }, [_c('style-item', {
 	    attrs: {
 	      "value": "1:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "2:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "3:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "4:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "5:nowrap"
 	    }
-	  }), _h('style-item', {
+	  }), _c('style-item', {
 	    attrs: {
 	      "value": "6:nowrap"
 	    }
-	  })])])])
+	  })], 1)])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/style/style-item.js b/ios/playground/bundlejs/vue/style/style-item.js
index f579b2c..9513938 100644
--- a/ios/playground/bundlejs/vue/style/style-item.js
+++ b/ios/playground/bundlejs/vue/style/style-item.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(547)
+	__vue_styles__.push(__webpack_require__(571)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(548)
+	__vue_exports__ = __webpack_require__(572)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(549)
+	var __vue_template__ = __webpack_require__(573)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/style/style-item.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/style/style-item.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-768350d6"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 547:
+/***/ 571:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -107,7 +111,7 @@
 
 /***/ },
 
-/***/ 548:
+/***/ 572:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -134,11 +138,11 @@
 
 /***/ },
 
-/***/ 549:
+/***/ 573:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    staticClass: ["item", "txt"],
 	    style: {
 	      backgroundColor: _vm.bgColor
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world-1.js b/ios/playground/bundlejs/vue/syntax/hello-world-1.js
index 48a2ee9..0736357 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world-1.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world-1.js
@@ -51,7 +51,7 @@
 	var __vue_styles__ = []
 
 	/* template */
-	var __vue_template__ = __webpack_require__(559)
+	var __vue_template__ = __webpack_require__(583)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -63,15 +63,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world-1.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world-1.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -80,13 +83,13 @@
 
 /***/ },
 
-/***/ 559:
+/***/ 583:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', ["Hello World"])])
+	  return _c('div', [_c('text', [_vm._v("Hello World")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world-2.js b/ios/playground/bundlejs/vue/syntax/hello-world-2.js
index cabd90c..2c64fc4 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world-2.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world-2.js
@@ -51,7 +51,7 @@
 	var __vue_styles__ = []
 
 	/* template */
-	var __vue_template__ = __webpack_require__(560)
+	var __vue_template__ = __webpack_require__(584)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -63,15 +63,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world-2.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world-2.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -80,18 +83,18 @@
 
 /***/ },
 
-/***/ 560:
+/***/ 584:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticStyle: {
 	      alignItems: "center",
 	      marginTop: "120px"
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticStyle: {
 	      width: "360px",
 	      height: "82px"
@@ -99,11 +102,11 @@
 	    attrs: {
 	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticStyle: {
 	      fontSize: "48px"
 	    }
-	  }, ["Hello World"])])
+	  }, [_vm._v("Hello World")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world-3.js b/ios/playground/bundlejs/vue/syntax/hello-world-3.js
index 32fe52f..68944d9 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world-3.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world-3.js
@@ -51,11 +51,11 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(561)
+	__vue_styles__.push(__webpack_require__(585)
 	)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(562)
+	var __vue_template__ = __webpack_require__(586)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -67,15 +67,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world-3.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world-3.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7fcbe259"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -84,7 +88,7 @@
 
 /***/ },
 
-/***/ 561:
+/***/ 585:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -103,22 +107,22 @@
 
 /***/ },
 
-/***/ 562:
+/***/ 586:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"]
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["logo"],
 	    attrs: {
 	      "src": "https://alibaba.github.io/weex/img/weex_logo_blue@3x.png"
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Hello World"])])
+	  }, [_vm._v("Hello World")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world-4.js b/ios/playground/bundlejs/vue/syntax/hello-world-4.js
index de35b71..739131c 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world-4.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world-4.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(563)
+	__vue_styles__.push(__webpack_require__(587)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(564)
+	__vue_exports__ = __webpack_require__(588)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(565)
+	var __vue_template__ = __webpack_require__(589)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world-4.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world-4.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7fd9f9da"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 563:
+/***/ 587:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -106,7 +110,7 @@
 
 /***/ },
 
-/***/ 564:
+/***/ 588:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -145,20 +149,20 @@
 
 /***/ },
 
-/***/ 565:
+/***/ 589:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"]
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["logo"],
 	    attrs: {
 	      "src": _vm.logoUrl
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Hello " + _vm._s(_vm.target)])])
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world-5.js b/ios/playground/bundlejs/vue/syntax/hello-world-5.js
index 456900d..d405ec5 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world-5.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world-5.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(566)
+	__vue_styles__.push(__webpack_require__(590)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(567)
+	__vue_exports__ = __webpack_require__(591)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(568)
+	var __vue_template__ = __webpack_require__(592)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world-5.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world-5.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7fe8115b"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 566:
+/***/ 590:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -106,7 +110,7 @@
 
 /***/ },
 
-/***/ 567:
+/***/ 591:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -148,23 +152,23 @@
 
 /***/ },
 
-/***/ 568:
+/***/ 592:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"],
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["logo"],
 	    attrs: {
 	      "src": _vm.logoUrl
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Hello " + _vm._s(_vm.target)])])
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/hello-world.js b/ios/playground/bundlejs/vue/syntax/hello-world.js
index 2909096..ce8af36 100644
--- a/ios/playground/bundlejs/vue/syntax/hello-world.js
+++ b/ios/playground/bundlejs/vue/syntax/hello-world.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(556)
+	__vue_styles__.push(__webpack_require__(580)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(557)
+	__vue_exports__ = __webpack_require__(581)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(558)
+	var __vue_template__ = __webpack_require__(582)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/hello-world.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/hello-world.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-0311aa73"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 556:
+/***/ 580:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -106,7 +110,7 @@
 
 /***/ },
 
-/***/ 557:
+/***/ 581:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -158,23 +162,23 @@
 
 /***/ },
 
-/***/ 558:
+/***/ 582:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["wrapper"],
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, [_h('image', {
+	  }, [_c('image', {
 	    staticClass: ["logo"],
 	    attrs: {
 	      "src": _vm.logoUrl
 	    }
-	  }), _h('text', {
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Hello " + _vm._s(_vm.target)])])
+	  }, [_vm._v("Hello " + _vm._s(_vm.target))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-component.js b/ios/playground/bundlejs/vue/syntax/script-component.js
index 5502c08..c95172d 100644
--- a/ios/playground/bundlejs/vue/syntax/script-component.js
+++ b/ios/playground/bundlejs/vue/syntax/script-component.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(569)
+	__vue_exports__ = __webpack_require__(593)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(574)
+	var __vue_template__ = __webpack_require__(598)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-component.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-component.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,7 +86,7 @@
 
 /***/ },
 
-/***/ 569:
+/***/ 593:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -111,27 +114,27 @@
 	    };
 	  },
 	  components: {
-	    item: __webpack_require__(570)
+	    item: __webpack_require__(594)
 	  }
 	};
 
 /***/ },
 
-/***/ 570:
+/***/ 594:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(571)
+	__vue_styles__.push(__webpack_require__(595)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(572)
+	__vue_exports__ = __webpack_require__(596)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(573)
+	var __vue_template__ = __webpack_require__(597)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -143,22 +146,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/include/sub.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/include/sub.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-7967da16"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 571:
+/***/ 595:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -170,7 +177,7 @@
 
 /***/ },
 
-/***/ 572:
+/***/ 596:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -193,29 +200,34 @@
 
 /***/ },
 
-/***/ 573:
+/***/ 597:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('text', {
+	  return _c('text', {
 	    staticClass: ["item-txt"]
-	  }, [_vm._s(_vm.title)])
+	  }, [_vm._v(_vm._s(_vm.title))])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 574:
+/***/ 598:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('list', [_vm._l((_vm.items), function(item) {
-	    return _h('cell', [_h('text', [_vm._s(item.title)]), _h('item', {
+	  return _c('list', _vm._l((_vm.items), function(item) {
+	    return _c('cell', {
+	      appendAsTree: true,
+	      attrs: {
+	        "append": "tree"
+	      }
+	    }, [_c('text', [_vm._v(_vm._s(item.title))]), _c('item', {
 	      attrs: {
 	        "title": 'a'
 	      }
-	    })])
-	  })])
+	    })], 1)
+	  }))
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-data.js b/ios/playground/bundlejs/vue/syntax/script-data.js
index 6f35add..85a3e55 100644
--- a/ios/playground/bundlejs/vue/syntax/script-data.js
+++ b/ios/playground/bundlejs/vue/syntax/script-data.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(575)
+	__vue_styles__.push(__webpack_require__(599)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(576)
+	__vue_exports__ = __webpack_require__(600)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(577)
+	var __vue_template__ = __webpack_require__(601)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-data.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-data.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-28c17c88"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 575:
+/***/ 599:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +102,7 @@
 
 /***/ },
 
-/***/ 576:
+/***/ 600:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -189,23 +193,23 @@
 
 /***/ },
 
-/***/ 577:
+/***/ 601:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["title"]
-	  }, [_vm._s(_vm.firstName)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.firstName))]), _c('text', {
 	    staticClass: ["title"]
-	  }, [_vm._s(_vm.lastName)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.lastName))]), _c('text', {
 	    staticClass: ["title"]
-	  }, [_vm._s(_vm.fullName)]), _h('text', {
+	  }, [_vm._v(_vm._s(_vm.fullName))]), _c('text', {
 	    staticClass: ["title"]
-	  }, [_vm._s(_vm.today)])])
+	  }, [_vm._v(_vm._s(_vm.today))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-events.js b/ios/playground/bundlejs/vue/syntax/script-events.js
index b16b272..51bb4e1 100644
--- a/ios/playground/bundlejs/vue/syntax/script-events.js
+++ b/ios/playground/bundlejs/vue/syntax/script-events.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(578)
+	__vue_styles__.push(__webpack_require__(602)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(579)
+	__vue_exports__ = __webpack_require__(603)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(580)
+	var __vue_template__ = __webpack_require__(604)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-events.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-events.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-2ce364f7"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 578:
+/***/ 602:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +102,7 @@
 
 /***/ },
 
-/***/ 579:
+/***/ 603:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -144,15 +148,15 @@
 
 /***/ },
 
-/***/ 580:
+/***/ 604:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_vm._l((_vm.list), function(value) {
-	    return _h('text', {
+	  return _c('div', _vm._l((_vm.list), function(value) {
+	    return _c('text', {
 	      staticClass: ["title"]
-	    }, [_vm._s(value)])
-	  })])
+	    }, [_vm._v(_vm._s(value))])
+	  }))
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-instance.js b/ios/playground/bundlejs/vue/syntax/script-instance.js
index 489bba9..c8a3f9a 100644
--- a/ios/playground/bundlejs/vue/syntax/script-instance.js
+++ b/ios/playground/bundlejs/vue/syntax/script-instance.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(581)
+	__vue_styles__.push(__webpack_require__(605)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(582)
+	__vue_exports__ = __webpack_require__(606)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(583)
+	var __vue_template__ = __webpack_require__(607)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-instance.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-instance.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6a09a0f3"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 581:
+/***/ 605:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +102,7 @@
 
 /***/ },
 
-/***/ 582:
+/***/ 606:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -160,7 +164,7 @@
 	      // this.$refs['sub'].$emit('custom')
 
 	      // // find element
-	      // var dom = __weex_require_module__('dom')
+	      // var dom = weex.requireModule('dom')
 	      // dom.scrollToElement(this.$el('title'), {offset: 0})
 	    }
 	  },
@@ -176,18 +180,18 @@
 
 /***/ },
 
-/***/ 583:
+/***/ 607:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title"],
 	    attrs: {
 	      "id": "title"
 	    }
-	  }, ["Please check out the source code."])])
+	  }, [_vm._v("Please check out the source code.")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-lifecycle.js b/ios/playground/bundlejs/vue/syntax/script-lifecycle.js
index f753203..f2c8ecd 100644
--- a/ios/playground/bundlejs/vue/syntax/script-lifecycle.js
+++ b/ios/playground/bundlejs/vue/syntax/script-lifecycle.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(584)
+	__vue_styles__.push(__webpack_require__(608)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(585)
+	__vue_exports__ = __webpack_require__(609)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(586)
+	var __vue_template__ = __webpack_require__(610)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-lifecycle.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-lifecycle.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4a5eb17c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 584:
+/***/ 608:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +102,7 @@
 
 /***/ },
 
-/***/ 585:
+/***/ 609:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -138,15 +142,15 @@
 
 /***/ },
 
-/***/ 586:
+/***/ 610:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_vm._l((_vm.list), function(value) {
-	    return _h('text', {
+	  return _c('div', _vm._l((_vm.list), function(value) {
+	    return _c('text', {
 	      staticClass: ["title"]
-	    }, [_vm._s(value)])
-	  })])
+	    }, [_vm._v(_vm._s(value))])
+	  }))
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-module.js b/ios/playground/bundlejs/vue/syntax/script-module.js
index 5d6388d..2e7b024 100644
--- a/ios/playground/bundlejs/vue/syntax/script-module.js
+++ b/ios/playground/bundlejs/vue/syntax/script-module.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(587)
+	__vue_styles__.push(__webpack_require__(611)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(588)
+	__vue_exports__ = __webpack_require__(612)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(589)
+	var __vue_template__ = __webpack_require__(613)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-module.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-module.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-85636e6c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 587:
+/***/ 611:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -103,7 +107,7 @@
 
 /***/ },
 
-/***/ 588:
+/***/ 612:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -124,7 +128,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  methods: {
 	    test: function test() {
@@ -138,16 +142,16 @@
 
 /***/ },
 
-/***/ 589:
+/***/ 613:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.test
 	    }
-	  }, ["Toast!"])])
+	  }, [_vm._v("Toast!")])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/script-options.js b/ios/playground/bundlejs/vue/syntax/script-options.js
index e028972..abb71a2 100644
--- a/ios/playground/bundlejs/vue/syntax/script-options.js
+++ b/ios/playground/bundlejs/vue/syntax/script-options.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(590)
+	__vue_styles__.push(__webpack_require__(614)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(591)
+	__vue_exports__ = __webpack_require__(615)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(592)
+	var __vue_template__ = __webpack_require__(616)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/script-options.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/script-options.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-22006d30"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 590:
+/***/ 614:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -98,7 +102,7 @@
 
 /***/ },
 
-/***/ 591:
+/***/ 615:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -165,15 +169,15 @@
 
 /***/ },
 
-/***/ 592:
+/***/ 616:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
 	  return _vm._m(0)
 	},staticRenderFns: [function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title"]
-	  }, ["Please check out the source code."])])
+	  }, [_vm._v("Please check out the source code.")])])
 	}]}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-class.js b/ios/playground/bundlejs/vue/syntax/template-class.js
index 32ac703..27ce4dc 100644
--- a/ios/playground/bundlejs/vue/syntax/template-class.js
+++ b/ios/playground/bundlejs/vue/syntax/template-class.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(593)
+	__vue_styles__.push(__webpack_require__(617)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(594)
+	__vue_exports__ = __webpack_require__(618)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(595)
+	var __vue_template__ = __webpack_require__(619)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-class.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-class.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-3f026779"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 593:
+/***/ 617:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +105,7 @@
 
 /***/ },
 
-/***/ 594:
+/***/ 618:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -138,21 +142,21 @@
 
 /***/ },
 
-/***/ 595:
+/***/ 619:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticClass: ["a"]
-	  }, ["Hello"]), _h('text', {
+	  }, [_vm._v("Hello")]), _c('text', {
 	    staticClass: ["b"]
-	  }, ["Hello"]), _h('text', {
+	  }, [_vm._v("Hello")]), _c('text', {
 	    class: ['a', _vm.x]
-	  }, ["Hello"])])
+	  }, [_vm._v("Hello")])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-content.js b/ios/playground/bundlejs/vue/syntax/template-content.js
index 506e51a..fcaa1bf 100644
--- a/ios/playground/bundlejs/vue/syntax/template-content.js
+++ b/ios/playground/bundlejs/vue/syntax/template-content.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(596)
+	__vue_exports__ = __webpack_require__(620)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(600)
+	var __vue_template__ = __webpack_require__(624)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-content.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-content.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,7 +86,7 @@
 
 /***/ },
 
-/***/ 596:
+/***/ 620:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -104,24 +107,24 @@
 
 	module.exports = {
 	  components: {
-	    btn: __webpack_require__(597)
+	    btn: __webpack_require__(621)
 	  }
 	};
 
 /***/ },
 
-/***/ 597:
+/***/ 621:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(598)
+	__vue_styles__.push(__webpack_require__(622)
 	)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(599)
+	var __vue_template__ = __webpack_require__(623)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -133,22 +136,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/include/btn.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/include/btn.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-3ef66511"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 598:
+/***/ 622:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -164,23 +171,23 @@
 
 /***/ },
 
-/***/ 599:
+/***/ 623:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    staticClass: ["btn"]
-	  }, [_vm._t("default")])
+	  }, [_vm._t("default")], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 600:
+/***/ 624:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('btn', [_h('text', ["Click!"])])])
+	  return _c('div', [_c('btn', [_c('text', [_vm._v("Click!")])])], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-event.js b/ios/playground/bundlejs/vue/syntax/template-event.js
index 7e0a163..4a7fac2 100644
--- a/ios/playground/bundlejs/vue/syntax/template-event.js
+++ b/ios/playground/bundlejs/vue/syntax/template-event.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(601)
+	__vue_styles__.push(__webpack_require__(625)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(602)
+	__vue_exports__ = __webpack_require__(626)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(603)
+	var __vue_template__ = __webpack_require__(627)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-event.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-event.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4175cf9b"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 601:
+/***/ 625:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +113,7 @@
 
 /***/ },
 
-/***/ 602:
+/***/ 626:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -156,39 +160,39 @@
 
 /***/ },
 
-/***/ 603:
+/***/ 627:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title"]
-	  }, ["Hello " + _vm._s(_vm.name)]), _h('text', {
+	  }, [_vm._v("Hello " + _vm._s(_vm.name))]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, ["Update 1"]), _h('text', {
+	  }, [_vm._v("Update 1")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": function($event) {
 	        _vm.update($event)
 	      }
 	    }
-	  }, ["Update 1"]), _h('text', {
+	  }, [_vm._v("Update 1")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": function($event) {
 	        _vm.setName(_vm.temp, $event)
 	      }
 	    }
-	  }, ["Update 2"]), _h('text', {
+	  }, [_vm._v("Update 2")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": function($event) {
 	        _vm.setName('John')
 	      }
 	    }
-	  }, ["Update 3"])])
+	  }, [_vm._v("Update 3")])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-if.js b/ios/playground/bundlejs/vue/syntax/template-if.js
index 0d4a4c7..117952d 100644
--- a/ios/playground/bundlejs/vue/syntax/template-if.js
+++ b/ios/playground/bundlejs/vue/syntax/template-if.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(604)
+	__vue_styles__.push(__webpack_require__(628)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(605)
+	__vue_exports__ = __webpack_require__(629)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(606)
+	var __vue_template__ = __webpack_require__(630)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-if.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-if.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-1437c26c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 604:
+/***/ 628:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -106,7 +110,7 @@
 
 /***/ },
 
-/***/ 605:
+/***/ 629:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -143,20 +147,20 @@
 
 /***/ },
 
-/***/ 606:
+/***/ 630:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.toggle
 	    }
-	  }, ["Toggle"]), (_vm.flag) ? _h('text', {
+	  }, [_vm._v("Toggle")]), (_vm.flag) ? _c('text', {
 	    staticClass: ["title"]
-	  }, ["I'm ON"]) : _vm._e(), (!_vm.flag) ? _h('text', {
+	  }, [_vm._v("I'm ON")]) : _vm._e(), (!_vm.flag) ? _c('text', {
 	    staticClass: ["title"]
-	  }, ["I'm Off"]) : _vm._e()])
+	  }, [_vm._v("I'm Off")]) : _vm._e()])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-repeat-update.js b/ios/playground/bundlejs/vue/syntax/template-repeat-update.js
index b78e7ac..1aead31 100644
--- a/ios/playground/bundlejs/vue/syntax/template-repeat-update.js
+++ b/ios/playground/bundlejs/vue/syntax/template-repeat-update.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(610)
+	__vue_styles__.push(__webpack_require__(634)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(611)
+	__vue_exports__ = __webpack_require__(635)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(612)
+	var __vue_template__ = __webpack_require__(636)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-repeat-update.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-repeat-update.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46d4a688"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 610:
+/***/ 634:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -109,7 +113,7 @@
 
 /***/ },
 
-/***/ 611:
+/***/ 635:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -163,30 +167,30 @@
 
 /***/ },
 
-/***/ 612:
+/***/ 636:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title"]
-	  }, ["Track by"]), _vm._l((_vm.list), function(item, k, $index) {
-	    return _h('text', {
+	  }, [_vm._v("Track by")]), _vm._l((_vm.list), function(item, k, $index) {
+	    return _c('text', {
 	      staticClass: ["subtitle"],
 	      attrs: {
-	        "track-by": "item.key"
+	        "trackBy": "item.key"
 	      }
-	    }, [_vm._s($index) + "-" + _vm._s(item.text)])
-	  }), _h('text', {
+	    }, [_vm._v(_vm._s($index) + "-" + _vm._s(item.text))])
+	  }), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, ["Update"]), _h('text', {
+	  }, [_vm._v("Update")]), _c('text', {
 	    staticClass: ["btn"],
 	    on: {
 	      "click": _vm.mutate
 	    }
-	  }, ["Mutate"])])
+	  }, [_vm._v("Mutate")])], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-repeat.js b/ios/playground/bundlejs/vue/syntax/template-repeat.js
index f0a0e7a..8af6d94 100644
--- a/ios/playground/bundlejs/vue/syntax/template-repeat.js
+++ b/ios/playground/bundlejs/vue/syntax/template-repeat.js
@@ -51,14 +51,14 @@
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(607)
+	__vue_styles__.push(__webpack_require__(631)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(608)
+	__vue_exports__ = __webpack_require__(632)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(609)
+	var __vue_template__ = __webpack_require__(633)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -70,15 +70,19 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-repeat.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-repeat.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-0b53ff2c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -87,7 +91,7 @@
 
 /***/ },
 
-/***/ 607:
+/***/ 631:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -101,7 +105,7 @@
 
 /***/ },
 
-/***/ 608:
+/***/ 632:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -139,29 +143,29 @@
 
 /***/ },
 
-/***/ 609:
+/***/ 633:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', [_h('text', {
+	  return _c('div', [_c('text', {
 	    staticClass: ["title"]
-	  }, ["Custom item"]), _vm._l((_vm.list), function(item) {
-	    return _h('text', {
+	  }, [_vm._v("Custom item")]), _vm._l((_vm.list), function(item) {
+	    return _c('text', {
 	      staticClass: ["subtitle"]
-	    }, [_vm._s(item)])
-	  }), _h('text', {
+	    }, [_vm._v(_vm._s(item))])
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Custom key and item"]), _vm._l((_vm.list), function(i, v) {
-	    return _h('text', {
+	  }, [_vm._v("Custom key and item")]), _vm._l((_vm.list), function(i, v) {
+	    return _c('text', {
 	      staticClass: ["subtitle"]
-	    }, [_vm._s(i) + "-" + _vm._s(v)])
-	  }), _h('text', {
+	    }, [_vm._v(_vm._s(i) + "-" + _vm._s(v))])
+	  }), _c('text', {
 	    staticClass: ["title"]
-	  }, ["Array of Object"]), _vm._l((_vm.list2), function(item, k, index) {
-	    return _h('text', {
+	  }, [_vm._v("Array of Object")]), _vm._l((_vm.list2), function(item, k, index) {
+	    return _c('text', {
 	      staticClass: ["subtitle"]
-	    }, ["> " + _vm._s(index) + "-" + _vm._s(item.text)])
-	  })])
+	    }, [_vm._v("> " + _vm._s(index) + "-" + _vm._s(item.text))])
+	  })], 2)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/syntax/template-style.js b/ios/playground/bundlejs/vue/syntax/template-style.js
index 76858a9..143676e 100644
--- a/ios/playground/bundlejs/vue/syntax/template-style.js
+++ b/ios/playground/bundlejs/vue/syntax/template-style.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(613)
+	__vue_exports__ = __webpack_require__(637)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(614)
+	var __vue_template__ = __webpack_require__(638)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/syntax/template-style.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/syntax/template-style.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,7 +86,7 @@
 
 /***/ },
 
-/***/ 613:
+/***/ 637:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -117,25 +120,25 @@
 
 /***/ },
 
-/***/ 614:
+/***/ 638:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    on: {
 	      "click": _vm.update
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    staticStyle: {
 	      fontSize: "48px",
 	      color: "#0000ff"
 	    }
-	  }, ["Hello"]), _h('text', {
+	  }, [_vm._v("Hello")]), _c('text', {
 	    style: {
 	      fontSize: _vm.size,
 	      color: _vm.color
 	    }
-	  }, ["Hello"])])
+	  }, [_vm._v("Hello")])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/playground/bundlejs/vue/template.js b/ios/playground/bundlejs/vue/template.js
index db75605..d005f6b 100644
--- a/ios/playground/bundlejs/vue/template.js
+++ b/ios/playground/bundlejs/vue/template.js
@@ -51,10 +51,10 @@
 	var __vue_styles__ = []
 
 	/* script */
-	__vue_exports__ = __webpack_require__(615)
+	__vue_exports__ = __webpack_require__(639)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(620)
+	var __vue_template__ = __webpack_require__(644)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -66,15 +66,18 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/template.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/template.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 	module.exports.el = 'true'
@@ -83,21 +86,21 @@
 
 /***/ },
 
-/***/ 381:
+/***/ 399:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(382)
+	__vue_styles__.push(__webpack_require__(400)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(383)
+	__vue_exports__ = __webpack_require__(401)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(384)
+	var __vue_template__ = __webpack_require__(402)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -109,22 +112,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/panel.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/panel.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-46407d45"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 382:
+/***/ 400:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -178,7 +185,7 @@
 
 /***/ },
 
-/***/ 383:
+/***/ 401:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -223,16 +230,16 @@
 
 /***/ },
 
-/***/ 384:
+/***/ 402:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['panel', 'panel-' + _vm.type],
 	    style: {
 	      borderWidth: _vm.border
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['panel-header', 'panel-header-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingHead,
@@ -240,7 +247,7 @@
 	      paddingLeft: _vm.paddingHead * 1.5,
 	      paddingRight: _vm.paddingHead * 1.5
 	    }
-	  }, [_vm._s(_vm.title)]), _h('div', {
+	  }, [_vm._v(_vm._s(_vm.title))]), _c('div', {
 	    class: ['panel-body', 'panel-body-' + _vm.type],
 	    style: {
 	      paddingTop: _vm.paddingBody,
@@ -248,27 +255,27 @@
 	      paddingLeft: _vm.paddingBody * 1.5,
 	      paddingRight: _vm.paddingBody * 1.5
 	    }
-	  }, [_vm._t("default")])])
+	  }, [_vm._t("default")], 2)])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 385:
+/***/ 403:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(386)
+	__vue_styles__.push(__webpack_require__(404)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(387)
+	__vue_exports__ = __webpack_require__(405)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(388)
+	var __vue_template__ = __webpack_require__(406)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -280,22 +287,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/button.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/button.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-4c6be341"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 386:
+/***/ 404:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -395,7 +406,7 @@
 
 /***/ },
 
-/***/ 387:
+/***/ 405:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -418,35 +429,35 @@
 
 /***/ },
 
-/***/ 388:
+/***/ 406:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['btn', 'btn-' + _vm.type, 'btn-sz-' + _vm.size]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['btn-txt', 'btn-txt-' + _vm.type, 'btn-txt-sz-' + _vm.size]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 391:
+/***/ 409:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(392)
+	__vue_styles__.push(__webpack_require__(410)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(393)
+	__vue_exports__ = __webpack_require__(411)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(394)
+	var __vue_template__ = __webpack_require__(412)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -458,22 +469,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/tip.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/tip.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-6ec9a69c"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 392:
+/***/ 410:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -519,7 +534,7 @@
 
 /***/ },
 
-/***/ 393:
+/***/ 411:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -541,21 +556,21 @@
 
 /***/ },
 
-/***/ 394:
+/***/ 412:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['tip', 'tip-' + _vm.type]
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['tip-txt', 'tip-txt-' + _vm.type]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 615:
+/***/ 639:
 /***/ function(module, exports, __webpack_require__) {
 
 	'use strict';
@@ -580,7 +595,7 @@
 	//
 	//
 
-	var modal = __weex_require_module__('modal');
+	var modal = weex.requireModule('modal');
 	module.exports = {
 	  data: function data() {
 	    return {
@@ -588,10 +603,10 @@
 	    };
 	  },
 	  components: {
-	    panel: __webpack_require__(381),
-	    hn: __webpack_require__(616),
-	    tip: __webpack_require__(391),
-	    button: __webpack_require__(385)
+	    panel: __webpack_require__(399),
+	    hn: __webpack_require__(640),
+	    tip: __webpack_require__(409),
+	    button: __webpack_require__(403)
 	  },
 	  methods: {
 	    toast: function toast() {
@@ -602,21 +617,21 @@
 
 /***/ },
 
-/***/ 616:
+/***/ 640:
 /***/ function(module, exports, __webpack_require__) {
 
 	var __vue_exports__, __vue_options__
 	var __vue_styles__ = []
 
 	/* styles */
-	__vue_styles__.push(__webpack_require__(617)
+	__vue_styles__.push(__webpack_require__(641)
 	)
 
 	/* script */
-	__vue_exports__ = __webpack_require__(618)
+	__vue_exports__ = __webpack_require__(642)
 
 	/* template */
-	var __vue_template__ = __webpack_require__(619)
+	var __vue_template__ = __webpack_require__(643)
 	__vue_options__ = __vue_exports__ = __vue_exports__ || {}
 	if (
 	  typeof __vue_exports__.default === "object" ||
@@ -628,22 +643,26 @@
 	if (typeof __vue_options__ === "function") {
 	  __vue_options__ = __vue_options__.options
 	}
-	__vue_options__.__file = "/Users/bobning/work/source/weex_fork/examples/vue/include/hn.vue"
+	__vue_options__.__file = "/Users/bobning/work/source/apache-incubator-weex/examples/vue/include/hn.vue"
 	__vue_options__.render = __vue_template__.render
 	__vue_options__.staticRenderFns = __vue_template__.staticRenderFns
+	__vue_options__._scopeId = "data-v-188c9295"
 	__vue_options__.style = __vue_options__.style || {}
 	__vue_styles__.forEach(function (module) {
-	for (var name in module) {
-	__vue_options__.style[name] = module[name]
-	}
+	  for (var name in module) {
+	    __vue_options__.style[name] = module[name]
+	  }
 	})
+	if (typeof __register_static_styles__ === "function") {
+	  __register_static_styles__(__vue_options__._scopeId, __vue_styles__)
+	}
 
 	module.exports = __vue_exports__
 
 
 /***/ },
 
-/***/ 617:
+/***/ 641:
 /***/ function(module, exports) {
 
 	module.exports = {
@@ -675,7 +694,7 @@
 
 /***/ },
 
-/***/ 618:
+/***/ 642:
 /***/ function(module, exports) {
 
 	'use strict';
@@ -696,33 +715,33 @@
 
 /***/ },
 
-/***/ 619:
+/***/ 643:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('div', {
+	  return _c('div', {
 	    class: ['h' + _vm.level],
 	    staticStyle: {
 	      justifyContent: "center"
 	    }
-	  }, [_h('text', {
+	  }, [_c('text', {
 	    class: ['txt-h' + _vm.level]
-	  }, [_vm._s(_vm.value)])])
+	  }, [_vm._v(_vm._s(_vm.value))])])
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
 /***/ },
 
-/***/ 620:
+/***/ 644:
 /***/ function(module, exports) {
 
 	module.exports={render:function (){var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;
-	  return _h('scroller', [_h('panel', {
+	  return _c('scroller', [_c('panel', {
 	    attrs: {
 	      "title": "Dialog",
 	      "type": "primary"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -730,12 +749,12 @@
 	      "type": "success",
 	      "value": "It's a weex example template."
 	    }
-	  }), _h('hn', {
+	  }), _c('hn', {
 	    attrs: {
 	      "level": "1",
 	      "value": "H1"
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    attrs: {
 	      "type": "primary",
 	      "value": "Toast"
@@ -745,12 +764,12 @@
 	        _vm.toast($event)
 	      }
 	    }
-	  }), _h('hn', {
+	  }), _c('hn', {
 	    attrs: {
 	      "level": "2",
 	      "value": "H3"
 	    }
-	  }), _h('button', {
+	  }), _c('button', {
 	    attrs: {
 	      "type": "warning",
 	      "value": "Toast"
@@ -760,12 +779,12 @@
 	        _vm.toast($event)
 	      }
 	    }
-	  })]), _h('panel', {
+	  })], 1), _c('panel', {
 	    attrs: {
 	      "title": "Image",
 	      "type": "primary"
 	    }
-	  }, [_h('tip', {
+	  }, [_c('tip', {
 	    staticStyle: {
 	      marginBottom: "20px"
 	    },
@@ -773,7 +792,7 @@
 	      "type": "warning",
 	      "value": "Weex screen width is 750"
 	    }
-	  }), _h('image', {
+	  }), _c('image', {
 	    staticClass: ["img"],
 	    staticStyle: {
 	      width: "400px",
@@ -782,12 +801,12 @@
 	    attrs: {
 	      "src": _vm.img
 	    }
-	  }), _h('panel', {
+	  }), _c('panel', {
 	    attrs: {
 	      "title": "Image",
 	      "type": "default"
 	    }
-	  }, [_h('text', ["sub info"])])])])
+	  }, [_c('text', [_vm._v("sub info")])])], 1)], 1)
 	},staticRenderFns: []}
 	module.exports.render._withStripped = true
 
diff --git a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
index 6330741..d211f5f 100644
--- a/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
+++ b/ios/sdk/WeexSDK.xcodeproj/project.pbxproj
@@ -7,6 +7,7 @@
 	objects = {
 
 /* Begin PBXBuildFile section */
+		042013AD1E66CD6A001FC79C /* WXValidateProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 042013AC1E66CD6A001FC79C /* WXValidateProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		1C1A2BED1D91172800539AA1 /* WXConvertTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 1C1A2BEC1D91172800539AA1 /* WXConvertTests.m */; };
 		1D3000F11D40B9AC004F3B4F /* WXClipboardModule.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D3000EF1D40B9AB004F3B4F /* WXClipboardModule.h */; };
 		1D3000F21D40B9AC004F3B4F /* WXClipboardModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3000F01D40B9AB004F3B4F /* WXClipboardModule.m */; };
@@ -31,11 +32,13 @@
 		2AAFC1B61C48DFF70026D2FE /* WXSDKError.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AAFC1B41C48DFF70026D2FE /* WXSDKError.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2AC750241C7565690041D390 /* WXIndicatorComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC750221C7565690041D390 /* WXIndicatorComponent.h */; };
 		2AC750251C7565690041D390 /* WXIndicatorComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC750231C7565690041D390 /* WXIndicatorComponent.m */; };
-		2AE5B7521CAB7DBD0082FDDB /* WXAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE5B7501CAB7DBD0082FDDB /* WXAComponent.h */; };
+		2AE5B7521CAB7DBD0082FDDB /* WXAComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE5B7501CAB7DBD0082FDDB /* WXAComponent.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2AE5B7531CAB7DBD0082FDDB /* WXAComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AE5B7511CAB7DBD0082FDDB /* WXAComponent.m */; };
 		2AE5B7561CABA04E0082FDDB /* WXEventModuleProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AE5B7551CABA04E0082FDDB /* WXEventModuleProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		2AFEB17B1C747139000507FA /* WXInstanceWrap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AFEB1791C747139000507FA /* WXInstanceWrap.h */; };
 		2AFEB17C1C747139000507FA /* WXInstanceWrap.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AFEB17A1C747139000507FA /* WXInstanceWrap.m */; };
+		37B51EE41E97804D0040A743 /* WXCycleSliderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 37B51EE21E97804D0040A743 /* WXCycleSliderComponent.h */; };
+		37B51EE51E97804D0040A743 /* WXCycleSliderComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 37B51EE31E97804D0040A743 /* WXCycleSliderComponent.m */; };
 		591324A31D49B7F1004E89ED /* WXTimerModuleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 591324A21D49B7F1004E89ED /* WXTimerModuleTests.m */; };
 		591DD3311D23AD5800BE8709 /* WXErrorView.m in Sources */ = {isa = PBXBuildFile; fileRef = 591DD32F1D23AD5800BE8709 /* WXErrorView.m */; };
 		591DD3321D23AD5800BE8709 /* WXErrorView.h in Headers */ = {isa = PBXBuildFile; fileRef = 591DD3301D23AD5800BE8709 /* WXErrorView.h */; };
@@ -50,8 +53,6 @@
 		598805AD1D52D8C800EDED2C /* WXStorageTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 598805AC1D52D8C800EDED2C /* WXStorageTests.m */; };
 		5996BD701D49EC0600C0FEA6 /* WXInstanceWrapTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5996BD6F1D49EC0600C0FEA6 /* WXInstanceWrapTests.m */; };
 		5996BD751D4D8A0E00C0FEA6 /* WXSDKEngineTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 5996BD741D4D8A0E00C0FEA6 /* WXSDKEngineTests.m */; };
-		59970D2E1E0D228D0049F535 /* WXComponent+GradientColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 59970D2C1E0D228D0049F535 /* WXComponent+GradientColor.h */; };
-		59970D2F1E0D228D0049F535 /* WXComponent+GradientColor.m in Sources */ = {isa = PBXBuildFile; fileRef = 59970D2D1E0D228D0049F535 /* WXComponent+GradientColor.m */; };
 		59A582D41CF481110081FD3E /* WXAppMonitorProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A582D31CF481110081FD3E /* WXAppMonitorProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		59A582FC1CF5B17B0081FD3E /* WXBridgeContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 59A582FA1CF5B17B0081FD3E /* WXBridgeContext.h */; };
 		59A582FD1CF5B17B0081FD3E /* WXBridgeContext.m in Sources */ = {isa = PBXBuildFile; fileRef = 59A582FB1CF5B17B0081FD3E /* WXBridgeContext.m */; };
@@ -115,6 +116,22 @@
 		744BEA561D05178F00452B5D /* WXComponent+Display.m in Sources */ = {isa = PBXBuildFile; fileRef = 744BEA541D05178F00452B5D /* WXComponent+Display.m */; };
 		744BEA591D0520F300452B5D /* WXComponent+Layout.h in Headers */ = {isa = PBXBuildFile; fileRef = 744BEA571D0520F300452B5D /* WXComponent+Layout.h */; };
 		744BEA5A1D0520F300452B5D /* WXComponent+Layout.m in Sources */ = {isa = PBXBuildFile; fileRef = 744BEA581D0520F300452B5D /* WXComponent+Layout.m */; };
+		744D610C1E49978200B624B3 /* WXHeaderComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 744D610A1E49978200B624B3 /* WXHeaderComponent.h */; };
+		744D610D1E49978200B624B3 /* WXHeaderComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 744D610B1E49978200B624B3 /* WXHeaderComponent.m */; };
+		744D61101E49979000B624B3 /* WXFooterComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 744D610E1E49979000B624B3 /* WXFooterComponent.h */; };
+		744D61111E49979000B624B3 /* WXFooterComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 744D610F1E49979000B624B3 /* WXFooterComponent.m */; };
+		744D61141E4AF23E00B624B3 /* WXDiffUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 744D61121E4AF23E00B624B3 /* WXDiffUtil.h */; };
+		744D61151E4AF23E00B624B3 /* WXDiffUtil.m in Sources */ = {isa = PBXBuildFile; fileRef = 744D61131E4AF23E00B624B3 /* WXDiffUtil.m */; };
+		745B2D681E5A8E1E0092D38A /* WXMultiColumnLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 745B2D5E1E5A8E1E0092D38A /* WXMultiColumnLayout.h */; };
+		745B2D691E5A8E1E0092D38A /* WXMultiColumnLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 745B2D5F1E5A8E1E0092D38A /* WXMultiColumnLayout.m */; };
+		745B2D6A1E5A8E1E0092D38A /* WXRecyclerComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = 745B2D601E5A8E1E0092D38A /* WXRecyclerComponent.h */; };
+		745B2D6B1E5A8E1E0092D38A /* WXRecyclerComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 745B2D611E5A8E1E0092D38A /* WXRecyclerComponent.m */; };
+		745B2D6C1E5A8E1E0092D38A /* WXRecyclerDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 745B2D621E5A8E1E0092D38A /* WXRecyclerDataController.h */; };
+		745B2D6D1E5A8E1E0092D38A /* WXRecyclerDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = 745B2D631E5A8E1E0092D38A /* WXRecyclerDataController.m */; };
+		745B2D6E1E5A8E1E0092D38A /* WXRecyclerUpdateController.h in Headers */ = {isa = PBXBuildFile; fileRef = 745B2D641E5A8E1E0092D38A /* WXRecyclerUpdateController.h */; };
+		745B2D6F1E5A8E1E0092D38A /* WXRecyclerUpdateController.m in Sources */ = {isa = PBXBuildFile; fileRef = 745B2D651E5A8E1E0092D38A /* WXRecyclerUpdateController.m */; };
+		745B2D701E5A8E1E0092D38A /* WXSectionDataController.h in Headers */ = {isa = PBXBuildFile; fileRef = 745B2D661E5A8E1E0092D38A /* WXSectionDataController.h */; };
+		745B2D711E5A8E1E0092D38A /* WXSectionDataController.m in Sources */ = {isa = PBXBuildFile; fileRef = 745B2D671E5A8E1E0092D38A /* WXSectionDataController.m */; };
 		745ED2DA1C5F2C7E002DB5A8 /* WXView.h in Headers */ = {isa = PBXBuildFile; fileRef = 745ED2D61C5F2C7E002DB5A8 /* WXView.h */; };
 		745ED2DB1C5F2C7E002DB5A8 /* WXView.m in Sources */ = {isa = PBXBuildFile; fileRef = 745ED2D71C5F2C7E002DB5A8 /* WXView.m */; };
 		7461F8901CFB373100F62D44 /* WXDisplayQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 7461F88C1CFB373100F62D44 /* WXDisplayQueue.h */; };
@@ -219,10 +236,18 @@
 		C401945E1E344E8300D19C31 /* WXFloatCompareTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C401945D1E344E8300D19C31 /* WXFloatCompareTests.m */; };
 		C41E1A971DC1FD15009C7F90 /* WXDatePickerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C41E1A951DC1FD15009C7F90 /* WXDatePickerManager.h */; };
 		C41E1A981DC1FD15009C7F90 /* WXDatePickerManager.m in Sources */ = {isa = PBXBuildFile; fileRef = C41E1A961DC1FD15009C7F90 /* WXDatePickerManager.m */; };
+		C4B3D6D41E6954300013F38D /* WXEditComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B3D6D21E6954300013F38D /* WXEditComponent.h */; };
+		C4B3D6D51E6954300013F38D /* WXEditComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B3D6D31E6954300013F38D /* WXEditComponent.m */; };
 		C4B834271DE69B09007AD27E /* WXPickerModule.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B834251DE69B09007AD27E /* WXPickerModule.m */; };
 		C4B834281DE69B09007AD27E /* WXPickerModule.h in Headers */ = {isa = PBXBuildFile; fileRef = C4B834261DE69B09007AD27E /* WXPickerModule.h */; };
 		C4C30DE81E1B833D00786B6C /* WXComponent+PseudoClassManagement.m in Sources */ = {isa = PBXBuildFile; fileRef = C4C30DE61E1B833D00786B6C /* WXComponent+PseudoClassManagement.m */; };
 		C4C30DE91E1B833D00786B6C /* WXComponent+PseudoClassManagement.h in Headers */ = {isa = PBXBuildFile; fileRef = C4C30DE71E1B833D00786B6C /* WXComponent+PseudoClassManagement.h */; };
+		C4D872211E5DDEDA00E39BC1 /* WXInnerLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = C4D8721F1E5DDEDA00E39BC1 /* WXInnerLayer.m */; };
+		C4D872221E5DDEDA00E39BC1 /* WXInnerLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D872201E5DDEDA00E39BC1 /* WXInnerLayer.h */; };
+		C4D872251E5DDF7500E39BC1 /* WXBoxShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = C4D872231E5DDF7500E39BC1 /* WXBoxShadow.h */; };
+		C4D872261E5DDF7500E39BC1 /* WXBoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C4D872241E5DDF7500E39BC1 /* WXBoxShadow.m */; };
+		C4E375371E5FCBD3009B2D9C /* WXComponent+BoxShadow.m in Sources */ = {isa = PBXBuildFile; fileRef = C4E375351E5FCBD3009B2D9C /* WXComponent+BoxShadow.m */; };
+		C4E375381E5FCBD3009B2D9C /* WXComponent+BoxShadow.h in Headers */ = {isa = PBXBuildFile; fileRef = C4E375361E5FCBD3009B2D9C /* WXComponent+BoxShadow.h */; };
 		C4F012791E1502A6003378D0 /* SRWebSocket+Weex.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F012721E1502A6003378D0 /* SRWebSocket+Weex.h */; };
 		C4F0127A1E1502A6003378D0 /* SRWebSocket+Weex.m in Sources */ = {isa = PBXBuildFile; fileRef = C4F012731E1502A6003378D0 /* SRWebSocket+Weex.m */; };
 		C4F0127B1E1502A6003378D0 /* WXWebSocketDefaultImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = C4F012741E1502A6003378D0 /* WXWebSocketDefaultImpl.h */; };
@@ -257,9 +282,9 @@
 		DCAB35FF1D658EB700C0EA70 /* WXRuleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = DCAB35FD1D658EB700C0EA70 /* WXRuleManager.m */; };
 		DCC77C131D770AE300CE7288 /* WXSliderNeighborComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = DCC77C111D770AE300CE7288 /* WXSliderNeighborComponent.m */; };
 		DCC77C141D770AE300CE7288 /* WXSliderNeighborComponent.h in Headers */ = {isa = PBXBuildFile; fileRef = DCC77C121D770AE300CE7288 /* WXSliderNeighborComponent.h */; };
+		DCDFED011E68238F00C228D7 /* WXJSExceptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = DCDFED001E68238F00C228D7 /* WXJSExceptionProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		DCF087611DCAE161005CD6EB /* WXInvocationConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF0875F1DCAE161005CD6EB /* WXInvocationConfig.h */; };
 		DCF087621DCAE161005CD6EB /* WXInvocationConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF087601DCAE161005CD6EB /* WXInvocationConfig.m */; };
-		DCF343641E49CA1D00A2FB34 /* WXJSExceptionProtocol.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF343631E49CA1D00A2FB34 /* WXJSExceptionProtocol.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		DCF343671E49CAEE00A2FB34 /* WXJSExceptionInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = DCF343651E49CAEE00A2FB34 /* WXJSExceptionInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		DCF343681E49CAEE00A2FB34 /* WXJSExceptionInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = DCF343661E49CAEE00A2FB34 /* WXJSExceptionInfo.m */; };
 /* End PBXBuildFile section */
@@ -289,6 +314,7 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		042013AC1E66CD6A001FC79C /* WXValidateProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXValidateProtocol.h; sourceTree = "<group>"; };
 		1C1A2BEC1D91172800539AA1 /* WXConvertTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXConvertTests.m; sourceTree = "<group>"; };
 		1D3000EF1D40B9AB004F3B4F /* WXClipboardModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXClipboardModule.h; sourceTree = "<group>"; };
 		1D3000F01D40B9AB004F3B4F /* WXClipboardModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXClipboardModule.m; sourceTree = "<group>"; };
@@ -321,6 +347,8 @@
 		2AE5B7551CABA04E0082FDDB /* WXEventModuleProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXEventModuleProtocol.h; sourceTree = "<group>"; };
 		2AFEB1791C747139000507FA /* WXInstanceWrap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXInstanceWrap.h; sourceTree = "<group>"; };
 		2AFEB17A1C747139000507FA /* WXInstanceWrap.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXInstanceWrap.m; sourceTree = "<group>"; };
+		37B51EE21E97804D0040A743 /* WXCycleSliderComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXCycleSliderComponent.h; sourceTree = "<group>"; };
+		37B51EE31E97804D0040A743 /* WXCycleSliderComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXCycleSliderComponent.m; sourceTree = "<group>"; };
 		591324A21D49B7F1004E89ED /* WXTimerModuleTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXTimerModuleTests.m; sourceTree = "<group>"; };
 		591DD32F1D23AD5800BE8709 /* WXErrorView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXErrorView.m; sourceTree = "<group>"; };
 		591DD3301D23AD5800BE8709 /* WXErrorView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXErrorView.h; sourceTree = "<group>"; };
@@ -336,8 +364,6 @@
 		598805AC1D52D8C800EDED2C /* WXStorageTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXStorageTests.m; sourceTree = "<group>"; };
 		5996BD6F1D49EC0600C0FEA6 /* WXInstanceWrapTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXInstanceWrapTests.m; sourceTree = "<group>"; };
 		5996BD741D4D8A0E00C0FEA6 /* WXSDKEngineTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXSDKEngineTests.m; sourceTree = "<group>"; };
-		59970D2C1E0D228D0049F535 /* WXComponent+GradientColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WXComponent+GradientColor.h"; sourceTree = "<group>"; };
-		59970D2D1E0D228D0049F535 /* WXComponent+GradientColor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WXComponent+GradientColor.m"; sourceTree = "<group>"; };
 		59A582D31CF481110081FD3E /* WXAppMonitorProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXAppMonitorProtocol.h; sourceTree = "<group>"; };
 		59A582FA1CF5B17B0081FD3E /* WXBridgeContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXBridgeContext.h; sourceTree = "<group>"; };
 		59A582FB1CF5B17B0081FD3E /* WXBridgeContext.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXBridgeContext.m; sourceTree = "<group>"; };
@@ -399,6 +425,22 @@
 		744BEA541D05178F00452B5D /* WXComponent+Display.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WXComponent+Display.m"; sourceTree = "<group>"; };
 		744BEA571D0520F300452B5D /* WXComponent+Layout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "WXComponent+Layout.h"; path = "Layout/WXComponent+Layout.h"; sourceTree = "<group>"; };
 		744BEA581D0520F300452B5D /* WXComponent+Layout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "WXComponent+Layout.m"; path = "Layout/WXComponent+Layout.m"; sourceTree = "<group>"; };
+		744D610A1E49978200B624B3 /* WXHeaderComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXHeaderComponent.h; sourceTree = "<group>"; };
+		744D610B1E49978200B624B3 /* WXHeaderComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXHeaderComponent.m; sourceTree = "<group>"; };
+		744D610E1E49979000B624B3 /* WXFooterComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXFooterComponent.h; sourceTree = "<group>"; };
+		744D610F1E49979000B624B3 /* WXFooterComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXFooterComponent.m; sourceTree = "<group>"; };
+		744D61121E4AF23E00B624B3 /* WXDiffUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXDiffUtil.h; sourceTree = "<group>"; };
+		744D61131E4AF23E00B624B3 /* WXDiffUtil.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXDiffUtil.m; sourceTree = "<group>"; };
+		745B2D5E1E5A8E1E0092D38A /* WXMultiColumnLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXMultiColumnLayout.h; path = WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h; sourceTree = SOURCE_ROOT; };
+		745B2D5F1E5A8E1E0092D38A /* WXMultiColumnLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXMultiColumnLayout.m; path = WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m; sourceTree = SOURCE_ROOT; };
+		745B2D601E5A8E1E0092D38A /* WXRecyclerComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXRecyclerComponent.h; path = WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h; sourceTree = SOURCE_ROOT; };
+		745B2D611E5A8E1E0092D38A /* WXRecyclerComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerComponent.m; path = WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m; sourceTree = SOURCE_ROOT; };
+		745B2D621E5A8E1E0092D38A /* WXRecyclerDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXRecyclerDataController.h; path = WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h; sourceTree = SOURCE_ROOT; };
+		745B2D631E5A8E1E0092D38A /* WXRecyclerDataController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerDataController.m; path = WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m; sourceTree = SOURCE_ROOT; };
+		745B2D641E5A8E1E0092D38A /* WXRecyclerUpdateController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXRecyclerUpdateController.h; path = WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h; sourceTree = SOURCE_ROOT; };
+		745B2D651E5A8E1E0092D38A /* WXRecyclerUpdateController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXRecyclerUpdateController.m; path = WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m; sourceTree = SOURCE_ROOT; };
+		745B2D661E5A8E1E0092D38A /* WXSectionDataController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WXSectionDataController.h; path = WeexSDK/Sources/Component/Recycler/WXSectionDataController.h; sourceTree = SOURCE_ROOT; };
+		745B2D671E5A8E1E0092D38A /* WXSectionDataController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WXSectionDataController.m; path = WeexSDK/Sources/Component/Recycler/WXSectionDataController.m; sourceTree = SOURCE_ROOT; };
 		745ED2D61C5F2C7E002DB5A8 /* WXView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXView.h; sourceTree = "<group>"; };
 		745ED2D71C5F2C7E002DB5A8 /* WXView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXView.m; sourceTree = "<group>"; };
 		7461F88C1CFB373100F62D44 /* WXDisplayQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXDisplayQueue.h; sourceTree = "<group>"; };
@@ -508,10 +550,18 @@
 		C401945D1E344E8300D19C31 /* WXFloatCompareTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXFloatCompareTests.m; sourceTree = "<group>"; };
 		C41E1A951DC1FD15009C7F90 /* WXDatePickerManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXDatePickerManager.h; sourceTree = "<group>"; };
 		C41E1A961DC1FD15009C7F90 /* WXDatePickerManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXDatePickerManager.m; sourceTree = "<group>"; };
+		C4B3D6D21E6954300013F38D /* WXEditComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXEditComponent.h; sourceTree = "<group>"; };
+		C4B3D6D31E6954300013F38D /* WXEditComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXEditComponent.m; sourceTree = "<group>"; };
 		C4B834251DE69B09007AD27E /* WXPickerModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXPickerModule.m; sourceTree = "<group>"; };
 		C4B834261DE69B09007AD27E /* WXPickerModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXPickerModule.h; sourceTree = "<group>"; };
 		C4C30DE61E1B833D00786B6C /* WXComponent+PseudoClassManagement.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WXComponent+PseudoClassManagement.m"; sourceTree = "<group>"; };
 		C4C30DE71E1B833D00786B6C /* WXComponent+PseudoClassManagement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WXComponent+PseudoClassManagement.h"; sourceTree = "<group>"; };
+		C4D8721F1E5DDEDA00E39BC1 /* WXInnerLayer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXInnerLayer.m; sourceTree = "<group>"; };
+		C4D872201E5DDEDA00E39BC1 /* WXInnerLayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXInnerLayer.h; sourceTree = "<group>"; };
+		C4D872231E5DDF7500E39BC1 /* WXBoxShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXBoxShadow.h; sourceTree = "<group>"; };
+		C4D872241E5DDF7500E39BC1 /* WXBoxShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXBoxShadow.m; sourceTree = "<group>"; };
+		C4E375351E5FCBD3009B2D9C /* WXComponent+BoxShadow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "WXComponent+BoxShadow.m"; sourceTree = "<group>"; };
+		C4E375361E5FCBD3009B2D9C /* WXComponent+BoxShadow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "WXComponent+BoxShadow.h"; sourceTree = "<group>"; };
 		C4F012721E1502A6003378D0 /* SRWebSocket+Weex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "SRWebSocket+Weex.h"; sourceTree = "<group>"; };
 		C4F012731E1502A6003378D0 /* SRWebSocket+Weex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "SRWebSocket+Weex.m"; sourceTree = "<group>"; };
 		C4F012741E1502A6003378D0 /* WXWebSocketDefaultImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXWebSocketDefaultImpl.h; sourceTree = "<group>"; };
@@ -545,9 +595,9 @@
 		DCAB35FD1D658EB700C0EA70 /* WXRuleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXRuleManager.m; sourceTree = "<group>"; };
 		DCC77C111D770AE300CE7288 /* WXSliderNeighborComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXSliderNeighborComponent.m; sourceTree = "<group>"; };
 		DCC77C121D770AE300CE7288 /* WXSliderNeighborComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXSliderNeighborComponent.h; sourceTree = "<group>"; };
+		DCDFED001E68238F00C228D7 /* WXJSExceptionProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXJSExceptionProtocol.h; sourceTree = "<group>"; };
 		DCF0875F1DCAE161005CD6EB /* WXInvocationConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXInvocationConfig.h; sourceTree = "<group>"; };
 		DCF087601DCAE161005CD6EB /* WXInvocationConfig.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXInvocationConfig.m; sourceTree = "<group>"; };
-		DCF343631E49CA1D00A2FB34 /* WXJSExceptionProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXJSExceptionProtocol.h; sourceTree = "<group>"; };
 		DCF343651E49CAEE00A2FB34 /* WXJSExceptionInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WXJSExceptionInfo.h; sourceTree = "<group>"; };
 		DCF343661E49CAEE00A2FB34 /* WXJSExceptionInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WXJSExceptionInfo.m; sourceTree = "<group>"; };
 /* End PBXFileReference section */
@@ -679,6 +729,10 @@
 		7461F88B1CFB373100F62D44 /* Display */ = {
 			isa = PBXGroup;
 			children = (
+				C4E375351E5FCBD3009B2D9C /* WXComponent+BoxShadow.m */,
+				C4E375361E5FCBD3009B2D9C /* WXComponent+BoxShadow.h */,
+				C4D8721F1E5DDEDA00E39BC1 /* WXInnerLayer.m */,
+				C4D872201E5DDEDA00E39BC1 /* WXInnerLayer.h */,
 				7461F88C1CFB373100F62D44 /* WXDisplayQueue.h */,
 				7461F88D1CFB373100F62D44 /* WXDisplayQueue.m */,
 				7461F88E1CFB373100F62D44 /* WXLayer.h */,
@@ -758,6 +812,24 @@
 			path = WeexSDKTests;
 			sourceTree = "<group>";
 		};
+		74D8DB401E4825920078B667 /* Recycler */ = {
+			isa = PBXGroup;
+			children = (
+				745B2D5E1E5A8E1E0092D38A /* WXMultiColumnLayout.h */,
+				745B2D5F1E5A8E1E0092D38A /* WXMultiColumnLayout.m */,
+				745B2D601E5A8E1E0092D38A /* WXRecyclerComponent.h */,
+				745B2D611E5A8E1E0092D38A /* WXRecyclerComponent.m */,
+				745B2D621E5A8E1E0092D38A /* WXRecyclerDataController.h */,
+				745B2D631E5A8E1E0092D38A /* WXRecyclerDataController.m */,
+				745B2D641E5A8E1E0092D38A /* WXRecyclerUpdateController.h */,
+				745B2D651E5A8E1E0092D38A /* WXRecyclerUpdateController.m */,
+				745B2D661E5A8E1E0092D38A /* WXSectionDataController.h */,
+				745B2D671E5A8E1E0092D38A /* WXSectionDataController.m */,
+			);
+			name = Recycler;
+			path = Grid;
+			sourceTree = "<group>";
+		};
 		74EF31C11DE6932900667A07 /* handler */ = {
 			isa = PBXGroup;
 			children = (
@@ -912,6 +984,7 @@
 			isa = PBXGroup;
 			children = (
 				59A596171CB630E50012CD52 /* WXNavigationProtocol.h */,
+				DCDFED001E68238F00C228D7 /* WXJSExceptionProtocol.h */,
 				2AE5B7551CABA04E0082FDDB /* WXEventModuleProtocol.h */,
 				2A4445BE1CA8FD56009E7C6D /* WXTextComponentProtocol.h */,
 				775BEE701C1BD977008D1629 /* WXModuleProtocol.h */,
@@ -921,7 +994,7 @@
 				74A4BA841CAD453400195969 /* WXNetworkProtocol.h */,
 				59A582D31CF481110081FD3E /* WXAppMonitorProtocol.h */,
 				74EF31A91DE58AE600667A07 /* WXURLRewriteProtocol.h */,
-				DCF343631E49CA1D00A2FB34 /* WXJSExceptionProtocol.h */,
+				042013AC1E66CD6A001FC79C /* WXValidateProtocol.h */,
 			);
 			path = Protocol;
 			sourceTree = "<group>";
@@ -938,6 +1011,8 @@
 		77D161481C02E3670010B15B /* Utility */ = {
 			isa = PBXGroup;
 			children = (
+				C4D872231E5DDF7500E39BC1 /* WXBoxShadow.h */,
+				C4D872241E5DDF7500E39BC1 /* WXBoxShadow.m */,
 				59D3CA481CFC3CE1008835DC /* NSTimer+Weex.h */,
 				59D3CA491CFC3CE1008835DC /* NSTimer+Weex.m */,
 				77D161491C02E3790010B15B /* WXConvert.h */,
@@ -968,6 +1043,8 @@
 				74896F2F1D1AC79400D1D593 /* NSObject+WXSwizzle.m */,
 				747DF6801E31AEE4005C53A8 /* WXLength.h */,
 				747DF6811E31AEE4005C53A8 /* WXLength.m */,
+				744D61121E4AF23E00B624B3 /* WXDiffUtil.h */,
+				744D61131E4AF23E00B624B3 /* WXDiffUtil.m */,
 			);
 			path = Utility;
 			sourceTree = "<group>";
@@ -1012,6 +1089,9 @@
 		77E65A0A1C155E6E008B8775 /* Component */ = {
 			isa = PBXGroup;
 			children = (
+				C4B3D6D21E6954300013F38D /* WXEditComponent.h */,
+				C4B3D6D31E6954300013F38D /* WXEditComponent.m */,
+				74D8DB401E4825920078B667 /* Recycler */,
 				2A837AAC1CD9DE9200AEDF03 /* WXLoadingComponent.h */,
 				2A837AAD1CD9DE9200AEDF03 /* WXLoadingComponent.m */,
 				2A837AAE1CD9DE9200AEDF03 /* WXLoadingIndicator.h */,
@@ -1034,14 +1114,16 @@
 				77E65A141C155EB5008B8775 /* WXTextComponent.m */,
 				77E65A171C155F25008B8775 /* WXScrollerComponent.h */,
 				77E65A181C155F25008B8775 /* WXScrollerComponent.m */,
+				37B51EE21E97804D0040A743 /* WXCycleSliderComponent.h */,
+				37B51EE31E97804D0040A743 /* WXCycleSliderComponent.m */,
 				2A44AB0F1C1AD5B00067A7EA /* WXSliderComponent.h */,
 				59D3CA461CFC3CC0008835DC /* WXSliderComponent.m */,
-				74CC7A1A1C2BC5F800829368 /* WXCellComponent.h */,
 				74CC7A1B1C2BC5F800829368 /* WXCellComponent.m */,
 				74CC7A1E1C2BF9DC00829368 /* WXListComponent.h */,
 				74CC7A1F1C2BF9DC00829368 /* WXListComponent.m */,
 				2AC750221C7565690041D390 /* WXIndicatorComponent.h */,
 				2AC750231C7565690041D390 /* WXIndicatorComponent.m */,
+				74CC7A1A1C2BC5F800829368 /* WXCellComponent.h */,
 				2A1F57B51C75C6A600B58017 /* WXTextInputComponent.h */,
 				2A1F57B61C75C6A600B58017 /* WXTextInputComponent.m */,
 				DC03ADB81D508719003F76E7 /* WXTextAreaComponent.h */,
@@ -1057,8 +1139,10 @@
 				741081251CEDB4EC001BC6E5 /* WXComponent_internal.h */,
 				D33451061D3E19480083598A /* WXCanvasComponent.h */,
 				D33451071D3E19480083598A /* WXCanvasComponent.m */,
-				59970D2C1E0D228D0049F535 /* WXComponent+GradientColor.h */,
-				59970D2D1E0D228D0049F535 /* WXComponent+GradientColor.m */,
+				744D610A1E49978200B624B3 /* WXHeaderComponent.h */,
+				744D610B1E49978200B624B3 /* WXHeaderComponent.m */,
+				744D610E1E49979000B624B3 /* WXFooterComponent.h */,
+				744D610F1E49979000B624B3 /* WXFooterComponent.m */,
 			);
 			path = Component;
 			sourceTree = "<group>";
@@ -1136,7 +1220,6 @@
 				740451EA1E14BB26004157CB /* WXServiceFactory.h in Headers */,
 				744BEA591D0520F300452B5D /* WXComponent+Layout.h in Headers */,
 				74A4BA5B1CABBBD000195969 /* WXDebugTool.h in Headers */,
-				DCF343641E49CA1D00A2FB34 /* WXJSExceptionProtocol.h in Headers */,
 				2A837AB41CD9DE9200AEDF03 /* WXLoadingIndicator.h in Headers */,
 				747A787C1D1BAAC900DED9D0 /* WXComponent+ViewManagement.h in Headers */,
 				DC0F99311D48E5320087C6AF /* WeexSDK.h in Headers */,
@@ -1146,7 +1229,11 @@
 				D362F94F1C83EDA20003F546 /* WXWebViewModule.h in Headers */,
 				C4F012861E150307003378D0 /* WXWebSocketLoader.h in Headers */,
 				77D161381C02DE940010B15B /* WXBridgeManager.h in Headers */,
+				C4D872251E5DDF7500E39BC1 /* WXBoxShadow.h in Headers */,
+				042013AD1E66CD6A001FC79C /* WXValidateProtocol.h in Headers */,
+				C4D872221E5DDEDA00E39BC1 /* WXInnerLayer.h in Headers */,
 				2A919DA61E321F1F006EB6B5 /* WXBridgeMethod.h in Headers */,
+				37B51EE41E97804D0040A743 /* WXCycleSliderComponent.h in Headers */,
 				77D161281C02DE1A0010B15B /* WXSDKManager.h in Headers */,
 				59CE27E81CC387DB000BE37A /* WXEmbedComponent.h in Headers */,
 				74BB5FB91DFEE81A004FC3DF /* WXMetaModule.h in Headers */,
@@ -1157,9 +1244,12 @@
 				77D161621C02ED790010B15B /* WXLog.h in Headers */,
 				77D1614B1C02E3790010B15B /* WXConvert.h in Headers */,
 				59A596221CB6311F0012CD52 /* WXNavigatorModule.h in Headers */,
+				745B2D6A1E5A8E1E0092D38A /* WXRecyclerComponent.h in Headers */,
 				749DC27B1D40827B009E1C91 /* WXMonitor.h in Headers */,
 				77E659DA1C07F594008B8775 /* WXDomModule.h in Headers */,
 				74EF31AD1DE58BE200667A07 /* WXURLRewriteDefaultImpl.h in Headers */,
+				744D61101E49979000B624B3 /* WXFooterComponent.h in Headers */,
+				744D61141E4AF23E00B624B3 /* WXDiffUtil.h in Headers */,
 				74862F791E02B88D00B7A041 /* JSValue+Weex.h in Headers */,
 				2A1F57B71C75C6A600B58017 /* WXTextInputComponent.h in Headers */,
 				C4F012791E1502A6003378D0 /* SRWebSocket+Weex.h in Headers */,
@@ -1173,10 +1263,13 @@
 				74A4BA961CB365D100195969 /* WXAppConfiguration.h in Headers */,
 				7461F8921CFB373100F62D44 /* WXLayer.h in Headers */,
 				594C28931CF9E61A009793A4 /* WXAnimationModule.h in Headers */,
+				745B2D701E5A8E1E0092D38A /* WXSectionDataController.h in Headers */,
+				745B2D6E1E5A8E1E0092D38A /* WXRecyclerUpdateController.h in Headers */,
 				D3FC0DF71C508B2A002B9E31 /* WXTimerModule.h in Headers */,
 				D312CE3B1C730DEB00046D68 /* WXWebComponent.h in Headers */,
 				741081261CEDB4EC001BC6E5 /* WXComponent_internal.h in Headers */,
 				77E65A191C155F25008B8775 /* WXScrollerComponent.h in Headers */,
+				C4E375381E5FCBD3009B2D9C /* WXComponent+BoxShadow.h in Headers */,
 				742AD7311DF98C45007DC46C /* WXResourceRequestHandlerDefaultImpl.h in Headers */,
 				C4F0127D1E1502A6003378D0 /* WXWebSocketHandler.h in Headers */,
 				DC03ADBA1D508719003F76E7 /* WXTextAreaComponent.h in Headers */,
@@ -1202,6 +1295,7 @@
 				DCF087611DCAE161005CD6EB /* WXInvocationConfig.h in Headers */,
 				742AD7301DF98C45007DC46C /* WXResourceRequestHandler.h in Headers */,
 				77E65A151C155EB5008B8775 /* WXTextComponent.h in Headers */,
+				C4B3D6D41E6954300013F38D /* WXEditComponent.h in Headers */,
 				74CC7A1C1C2BC5F800829368 /* WXCellComponent.h in Headers */,
 				74896F301D1AC79400D1D593 /* NSObject+WXSwizzle.h in Headers */,
 				DCF343671E49CAEE00A2FB34 /* WXJSExceptionInfo.h in Headers */,
@@ -1213,9 +1307,13 @@
 				D33451081D3E19480083598A /* WXCanvasComponent.h in Headers */,
 				74B8BEFE1DC47B72004A6027 /* WXRootView.h in Headers */,
 				77E65A111C155EA8008B8775 /* WXImageComponent.h in Headers */,
+				745B2D6C1E5A8E1E0092D38A /* WXRecyclerDataController.h in Headers */,
+				745B2D681E5A8E1E0092D38A /* WXMultiColumnLayout.h in Headers */,
 				2A60CE9C1C91733E00857B9F /* WXSwitchComponent.h in Headers */,
+				DCDFED011E68238F00C228D7 /* WXJSExceptionProtocol.h in Headers */,
 				2A4445BF1CA8FD56009E7C6D /* WXTextComponentProtocol.h in Headers */,
 				746319021C60AFC100EFEBD4 /* WXThreadSafeCounter.h in Headers */,
+				744D610C1E49978200B624B3 /* WXHeaderComponent.h in Headers */,
 				77D1613C1C02DEA60010B15B /* WXJSCoreBridge.h in Headers */,
 				74D205201E091B8000128F44 /* WXCallJSMethod.h in Headers */,
 				741DFE061DDD9B30009B020F /* UIBezierPath+Weex.h in Headers */,
@@ -1224,7 +1322,6 @@
 				D317338C1C57257000BB7539 /* WXTransform.h in Headers */,
 				77D161301C02DE4E0010B15B /* WXComponent.h in Headers */,
 				2AFEB17B1C747139000507FA /* WXInstanceWrap.h in Headers */,
-				59970D2E1E0D228D0049F535 /* WXComponent+GradientColor.h in Headers */,
 				744BEA551D05178F00452B5D /* WXComponent+Display.h in Headers */,
 				741081231CED6756001BC6E5 /* WXComponentFactory.h in Headers */,
 				59D3CA4A1CFC3CE1008835DC /* NSTimer+Weex.h in Headers */,
@@ -1432,10 +1529,14 @@
 				C4F0127C1E1502A6003378D0 /* WXWebSocketDefaultImpl.m in Sources */,
 				77E65A0E1C155E99008B8775 /* WXDivComponent.m in Sources */,
 				2A60CE9D1C91733E00857B9F /* WXSwitchComponent.m in Sources */,
+				744D61111E49979000B624B3 /* WXFooterComponent.m in Sources */,
+				745B2D6F1E5A8E1E0092D38A /* WXRecyclerUpdateController.m in Sources */,
+				745B2D6B1E5A8E1E0092D38A /* WXRecyclerComponent.m in Sources */,
 				2A837AB71CD9DE9200AEDF03 /* WXRefreshComponent.m in Sources */,
 				74A4BA9B1CB3BAA100195969 /* WXThreadSafeMutableDictionary.m in Sources */,
 				77E65A1A1C155F25008B8775 /* WXScrollerComponent.m in Sources */,
 				747A787D1D1BAAC900DED9D0 /* WXComponent+ViewManagement.m in Sources */,
+				C4E375371E5FCBD3009B2D9C /* WXComponent+BoxShadow.m in Sources */,
 				2A837AB51CD9DE9200AEDF03 /* WXLoadingIndicator.m in Sources */,
 				C4F012831E1502E9003378D0 /* WXWebSocketModule.m in Sources */,
 				59D3CA401CF9ED57008835DC /* Layout.c in Sources */,
@@ -1459,6 +1560,7 @@
 				74AD99851D5B0E59008F0336 /* WXPolyfillSet.m in Sources */,
 				D317338D1C57257000BB7539 /* WXTransform.m in Sources */,
 				7461F8A91CFC33A800F62D44 /* WXThreadSafeMutableArray.m in Sources */,
+				745B2D6D1E5A8E1E0092D38A /* WXRecyclerDataController.m in Sources */,
 				2AC750251C7565690041D390 /* WXIndicatorComponent.m in Sources */,
 				591DD3311D23AD5800BE8709 /* WXErrorView.m in Sources */,
 				59D3CA4B1CFC3CE1008835DC /* NSTimer+Weex.m in Sources */,
@@ -1468,8 +1570,10 @@
 				74862F7E1E03A0F300B7A041 /* WXModuleMethod.m in Sources */,
 				742AD7341DF98C45007DC46C /* WXResourceResponse.m in Sources */,
 				77E65A161C155EB5008B8775 /* WXTextComponent.m in Sources */,
+				C4D872261E5DDF7500E39BC1 /* WXBoxShadow.m in Sources */,
 				746319031C60AFC100EFEBD4 /* WXThreadSafeCounter.m in Sources */,
 				74A4BAA71CB4F98300195969 /* WXStreamModule.m in Sources */,
+				744D610D1E49978200B624B3 /* WXHeaderComponent.m in Sources */,
 				59597F991D2A041700EE9317 /* WXDebugLoggerBridge.m in Sources */,
 				77E659F21C0C3612008B8775 /* WXModuleFactory.m in Sources */,
 				DCF343681E49CAEE00A2FB34 /* WXJSExceptionInfo.m in Sources */,
@@ -1478,7 +1582,9 @@
 				2A919DA71E321F1F006EB6B5 /* WXBridgeMethod.m in Sources */,
 				DCAB35FF1D658EB700C0EA70 /* WXRuleManager.m in Sources */,
 				77D161251C02DDD10010B15B /* WXSDKInstance.m in Sources */,
+				744D61151E4AF23E00B624B3 /* WXDiffUtil.m in Sources */,
 				74EF31AE1DE58BE200667A07 /* WXURLRewriteDefaultImpl.m in Sources */,
+				C4B3D6D51E6954300013F38D /* WXEditComponent.m in Sources */,
 				C4C30DE81E1B833D00786B6C /* WXComponent+PseudoClassManagement.m in Sources */,
 				74915F481C8EB02B00BEBCC0 /* WXAssert.m in Sources */,
 				59A596251CB6311F0012CD52 /* WXStorageModule.m in Sources */,
@@ -1488,6 +1594,7 @@
 				D334510D1D3E19B80083598A /* WXCanvasModule.m in Sources */,
 				741081241CED6756001BC6E5 /* WXComponentFactory.m in Sources */,
 				D362F9501C83EDA20003F546 /* WXWebViewModule.m in Sources */,
+				745B2D711E5A8E1E0092D38A /* WXSectionDataController.m in Sources */,
 				2A1F57B81C75C6A600B58017 /* WXTextInputComponent.m in Sources */,
 				74CC7A1D1C2BC5F800829368 /* WXCellComponent.m in Sources */,
 				74862F821E03A24500B7A041 /* WXComponentMethod.m in Sources */,
@@ -1501,9 +1608,11 @@
 				744BEA561D05178F00452B5D /* WXComponent+Display.m in Sources */,
 				7408C48F1CFB345D000BCCD0 /* WXComponent+Events.m in Sources */,
 				C4F012871E150307003378D0 /* WXWebSocketLoader.m in Sources */,
+				C4D872211E5DDEDA00E39BC1 /* WXInnerLayer.m in Sources */,
 				745ED2DB1C5F2C7E002DB5A8 /* WXView.m in Sources */,
 				DC03ADB91D508719003F76E7 /* WXTextAreaComponent.m in Sources */,
 				59A596231CB6311F0012CD52 /* WXNavigatorModule.m in Sources */,
+				37B51EE51E97804D0040A743 /* WXCycleSliderComponent.m in Sources */,
 				77D161211C02DDB40010B15B /* WXSDKEngine.m in Sources */,
 				D33451091D3E19480083598A /* WXCanvasComponent.m in Sources */,
 				74A4BA971CB365D100195969 /* WXAppConfiguration.m in Sources */,
@@ -1521,7 +1630,7 @@
 				749DC27C1D40827B009E1C91 /* WXMonitor.m in Sources */,
 				C4B834271DE69B09007AD27E /* WXPickerModule.m in Sources */,
 				C4F0127A1E1502A6003378D0 /* SRWebSocket+Weex.m in Sources */,
-				59970D2F1E0D228D0049F535 /* WXComponent+GradientColor.m in Sources */,
+				745B2D691E5A8E1E0092D38A /* WXMultiColumnLayout.m in Sources */,
 				77D161391C02DE940010B15B /* WXBridgeManager.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1751,6 +1860,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				VALID_ARCHS = "arm64 armv7 x86_64 i386";
+				WARNING_CFLAGS = "-Wno-documentation";
 			};
 			name = Debug;
 		};
@@ -1794,6 +1904,7 @@
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				VALID_ARCHS = "arm64 armv7 x86_64 i386";
+				WARNING_CFLAGS = "-Wno-documentation";
 			};
 			name = Release;
 		};
diff --git a/ios/sdk/WeexSDK/Resources/main.js b/ios/sdk/WeexSDK/Resources/main.js
index 6eeb4c8..15ada86 100644
--- a/ios/sdk/WeexSDK/Resources/main.js
+++ b/ios/sdk/WeexSDK/Resources/main.js
@@ -1,7 +1,8 @@
-(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.19.6, Build 2017-01-10 10:48."),this.getJSFMVersion=function(){return"0.19.6"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(this,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),"undefined"==typeof global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){Ls={},global.console=Vs}function o(){qs.forEach(function(e){var t=qs.indexOf(e);Ls[e]={},qs.forEach(function(n){var r=qs.indexOf(n);r<=t&&(Ls[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return Ls[t]&&Ls[t][e]}function a(e){return e.map(function(e){var t=Object.prototype.toString.call(e);return e="[object object]"===t.toLowerCase()?JSON.stringify(e):String(e)})}function s(){if("undefined"==typeof setTimeout&&"function"==typeof Js){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Js(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=Us,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),Object.freeze(Object.prototype),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),Object.freeze(Error.prototype),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=Ws.prototype,n=function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Bs(e,[{module:"dom",method:n,args:t}],"-1")}};for(var r in e)n(r);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Bs(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Bs(e,[{module:t,method:n,args:r}])}}function f(e,t){e&&(Xs[e]=t)}function d(e){return Xs[e]}function p(e){delete Xs[e]}function h(e){var t=Xs[e];return t&&t.taskCenter?t.taskCenter:null}function v(){return(Ks++).toString()}function m(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,g(t,r)):(t.children.forEach(function(e){e.parentNode=t}),_(e,t),t.docId=e.id,t.ownerDocument=e,g(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),y(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function y(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function _(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function g(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){g(t,e)})}function b(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function w(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function C(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function k(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function O(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function x(e){zs=e}function E(e,t){if(t&&t.length){var n=function(t){zs.call(this,e,t,!0)};n.prototype=Object.create(zs.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:zs}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=h(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Qs[e]=n}}function S(e,t){I(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Zs.push({name:e,options:t}))}function j(e){Zs.some(function(t,n){if(t.name===e)return Zs.splice(n,1),!0})}function I(e){return A(e)>=0}function A(e){return Zs.map(function(e){return e.name}).indexOf(e)}function T(e){var t,n=Ys.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function N(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Zs.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function R(e,t,n,r){var o=eu[e];if(!o){o=T(t)||{},Hs[o.framework]||(o.framework="Weex"),n=JSON.parse(JSON.stringify(n||{})),n.bundleVersion=o.version,n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),console.debug("[JS Framework] create an "+o.framework+"@"+n.bundleVersion+" instance from "+n.bundleVersion);var i=new Gs.CallbackManager(e),a={info:o,config:n,callbacks:i,created:Date.now(),framework:o.framework};return a.services=N(e,a,Gs),eu[e]=a,Hs[o.framework].createInstance(e,t,n,r,a)}return new Error('invalid instance id "'+e+'"')}function D(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&$(t[0]);for(var r in Hs){var o=Hs[r];o&&o[e]&&o[e].apply(o,t)}}}function $(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&E(e.type,e.methods)})}function P(e){tu[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];if(o&&Hs[o.framework]){var i=(a=Hs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Zs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Gs})}):"destroyInstance"===e&&(Zs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Gs})}),delete eu[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function M(e,t){tu[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=eu[r];return o&&Hs[o.framework]?(i=Hs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function F(e){Gs=e||{},Hs=Gs.frameworks||{},l();for(var t in Hs){var n=Hs[t];n.init(e)}return["registerComponents","registerModules","registerMethods"].forEach(D),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(P),M("receiveTasks","callJS"),tu}function q(){this.nodeId=v(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function L(e,t,n){void 0===e&&(e=nu);var r=Qs[e];return r&&!n?new r(t):(t=t||{},this.nodeType=1,this.nodeId=v(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],void(this.pureChildren=[]))}function V(e,t){var n=d(e);n.nodeMap[t.nodeId]=t}function U(e){this.nodeType=8,this.nodeId=v(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function J(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")}function B(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function W(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=H(e,t[r],n);if(o===-1)return o}}}function z(e,t){return"dom"===e&&ru[t]&&"function"==typeof global[ru[t]]}function H(e,t,n){var r=t.module,o=t.method,i=t.args;return z(r,o)?global[ru[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function G(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,f(e,this),this.nodeMap={};var r=G.Listener||J;this.listener=new r(e,n||W(e,G.handler)),this.taskCenter=new Ws(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:G.handler),this.createDocumentElement()}function X(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}function K(){c(),Object.freeze(iu.Element),Object.freeze(iu.Comment),Object.freeze(iu.Listener),Object.freeze(iu.Document.prototype),Object.freeze(iu.Element.prototype),Object.freeze(iu.Comment.prototype),Object.freeze(iu.Listener.prototype)}function Q(e){uu.Document=e.Document,uu.Element=e.Element,uu.Comment=e.Comment,uu.sendTasks=e.sendTasks}function Z(e){}function Y(e){}function ee(e){}function te(e,t,n){}function ne(e,t,n,r,o){var i=new uu.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},cu[e]=i;var u=Object.assign({Document:uu.Document,Element:uu.Element,Comment:uu.Comment,sendTasks:uu.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);c.push(t);var d=new(Function.prototype.bind.apply(Function,[null].concat(c)));return d.apply(void 0,l)}function re(e,t){}function oe(e){delete cu[e]}function ie(e){return cu[e].body.toJSON()}function ae(e,t){var n={fireEvent:function(e,t,n,r,o){var i=cu[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){var o=cu[e];return o.handleCallback(t,n,r)}},r=cu[e];if(r&&Array.isArray(t)){var o=[];return t.forEach(function(t){var r=n[t.method],i=[].concat(t.args);"function"==typeof r&&(i.unshift(e),o.push(r.apply(void 0,i)))}),o}}function se(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function ue(e){var t=this._ids[e];if(t)return t.el}function ce(e){var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._app,n=t.differ;return n.then(function(){e()})}function fe(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);if(n){var r=this._app.requireModule("dom");r.scrollToElement(n.ref,{offset:t})}}function de(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){var i=this._app.requireModule("animation");i.transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function pe(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function he(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead");var n=this._app.requireModule("stream");n.sendHttp(e,t)}function ve(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead");var t=this._app.requireModule("event");t.openURL(e)}function me(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead");var t=this._app.requireModule("pageInfo");t.setTitle(e)}function ye(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function _e(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&_e.apply(void 0,[e].concat(t))}return e}function ge(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function be(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function we(e,t){return Pu.call(e,t)}function Ce(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function ke(e){return null!==e&&"object"==typeof e}function Oe(e){return Mu.call(e)===Fu}function xe(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function Ee(){return"object"==typeof nativeSet?nativeSet.create():new au}function Se(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function je(e){var t=e.replace(Lu,"").replace(Vu,"");return t}function Ie(e){return e.replace(Ju,"")}function Ae(){this.id=Gu++,this.subs=[]}function Te(e){Ae.target&&Xu.push(Ae.target),Ae.target=e}function Ne(){Ae.target=Xu.pop()}function Re(){Ae.target=null,Xu=[]}function De(e,t,n,r){r&&_e(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++Ku,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=Ee(),this.newDepIds=Ee(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function $e(e,t){var n,r,o,i;if(t||(t=Qu,t.clear()),o=Array.isArray(e),i=ke(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)$e(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)$e(e[r[n]],t)}}function Pe(e){if(this.value=e,this.dep=new Ae,ge(e,"__ob__",this),Array.isArray(e)){var t=qu?Me:Fe;t(e,Yu,ec),this.observeArray(e)}else this.walk(e)}function Me(e,t){e.__proto__=t}function Fe(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];ge(e,i,t[i])}}function qe(e,t){if(ke(e)){var n;return we(e,"__ob__")&&e.__ob__ instanceof Pe?n=e.__ob__:(Array.isArray(e)||Oe(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Pe(e)),n&&t&&n.addVm(t),n}}function Le(e,t,n){var r=new Ae,o=Object.getOwnPropertyDescriptor(e,t);if(!o||o.configurable!==!1){var i=o&&o.get,a=o&&o.set,s=qe(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Ae.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)o=t[a],o&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){var o=i?i.call(e):n;t!==o&&(a?a.call(e,t):n=t,s=qe(t),r.notify())}})}}function Ve(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(we(e,t))return void(e[t]=n);if(e._isVue)return void Ve(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];Je(i,t)}return n}function Ue(e,t){if(we(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];Be(o,t)}}}function Je(e,t){(tc.indexOf(t)>-1||!xe(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Be(e,t){xe(t)||delete e[t]}function We(e){e._watchers=[],ze(e),Ge(e),Ke(e)}function ze(e){var t=e._data;Oe(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)Je(e,n[r]);qe(t,e)}function He(){}function Ge(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=Xe(r,e),o.set=He):(o.get=r.get?r.cache!==!1?Xe(r.get,e):Ce(r.get,e):He,o.set=r.set?Ce(r.set,e):He),Object.defineProperty(e,n,o)}}function Xe(e,t){var n=new De(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Ae.target&&n.depend(),n.value}}function Ke(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Qe(e){var t=e.type,n=rc[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Se(e[r])&&"object"===Se(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function Ze(e,t,n){ot(e,t,n.id,e),it(e,t,n.attr),st(e,t,n.classList),ut(e,t,n.style),lt(e,t,n.events)}function Ye(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),tt(r,i,e,t),tt(n.attr,i,e,t)}function et(e,t,n,r){void 0===r&&(r={}),rt(n.classList,e,t),nt(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function tt(e,t,n,r){if(e){var o=function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=pt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}};for(var i in e)o(i)}}function nt(e,t,n){var r=function(r){var o=e[r];if("function"==typeof o){var i=pt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)};for(var o in e)r(o)}function rt(e,t,n){function r(e,t){"array"===Se(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=pt(t,e,function(e){r(e,i),at(n._rootEl,o,e)});r(a,i),at(n._rootEl,o,a)}else null!=e&&(r(e,i),at(n._rootEl,o,e))}}function ot(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),pt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function it(e,t,n){ft(e,t,"attr",n)}function at(e,t,n){for(var r={},o=n.length,i=function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})},a=0;a<o;a++)i(a);e.setClassStyle(r)}function st(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=pt(e,n,function(e){at(t,r,e)});at(t,r,o)}else at(t,r,n)}}function ut(e,t,n){ft(e,t,"style",n)}function ct(e,t,n,r){t.addEvent(n,Ce(r,e))}function lt(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&(a=e[a],a||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ct(e,t,i,a)}}function ft(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?dt(e,t,n,a,s):t[oc[n]](a,s)}}function dt(e,t,n,r,o){var i=oc[n],a=pt(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function pt(e,t,n){if(e._static)return t.call(e,e);var r=new De(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)});return r.value}function ht(e,t){var n=e._app.doc;return n.createBody(t)}function vt(e,t){var n=e._app.doc;return n.createElement(t)}function mt(e,t){var n=yt(e),r=_t(e),o=ic++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function yt(e){var t=e._app.doc,n=t.createComment("start");return n}function _t(e){var t=e._app.doc,n=t.createComment("end");return n}function gt(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=bt(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function bt(e,t,n){return t.element?Ct(t,n):wt(t,n)}function wt(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function Ct(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,r!==-1}),r}}function kt(e,t,n){void 0===n&&(n=!1),t.element?xt(t,n):Ot(t),t._vm&&t._vm.$emit("hook:destroyed")}function Ot(e){var t=e.parentNode;t&&t.removeChild(e)}function xt(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||Ot(e.start),n.forEach(function(e){Ot(e)}),t||Ot(e.end)}function Et(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?St(e,n.children[0],e._parentEl):St(e,n.children,e._parentEl):St(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function St(e,t,n,r){var o=e._app||{};if(o.lastSignal!==-1){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),jt(t))return void Dt(e,t,n,r);if(r=r||{},It(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=mt(e,n));if(At(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):$t(e,t,n));if(Tt(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Pt(e,t,n,r));var i=r.type||t.type;if(Nt(i,r))return void Mt(e,t,n,i,r);var a=i,s=Rt(e,t,a);if(s)return console.debug("[JS Framework] compile composed component by",t),void Ft(e,s,t,n,a,r);console.debug("[JS Framework] compile native component by",t),qt(e,t,n,a)}}function jt(e){return Array.isArray(e)}function It(e){return"content"===e.type||"slot"===e.type}function At(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Tt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Nt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function Rt(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Dt(e,t,n,r){var o=mt(e,n);t.forEach(function(t){St(e,t,o,r)})}function $t(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=mt(e,n);c.children=[],c.data=[],c.vms=[],Vt(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Pt(e,t,n,r){var o={shown:!0},i=mt(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Ut(e,t,i,o)}function Mt(e,t,n,r,o){var i=r.call(e),a=_e({type:i},o),s=mt(e,n);n.element&&n.children&&n.children.push(s),pt(e,r,function(n){var r=_e({type:n},o);kt(e,s,!0),St(e,t,s,r)}),St(e,t,s,a)}function Ft(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),ot(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){Ye(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Lt(e,n,this._content)}});et(e,s,n,r)}function qt(e,t,n,r){Qe(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=ht(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=vt(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,Ce(c,s))}}Ze(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};f.lastSignal===-1||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=gt(e,o,n)),f.lastSignal!==-1&&Lt(e,t,o),f.lastSignal!==-1&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=gt(e,o,n))}function Lt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return St(e,t,n),r.lastSignal!==-1})}function Vt(e,t,n,r){function o(e,r,o){var a;c?(a=e,ke(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Bt(o,a);i.push(s),St(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=Jt(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):kt(e,r[n])}),a.length=0,i.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),bt(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function Ut(e,t,n,r){var o=Jt(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?St(e,t,n,r):kt(e,n,!0))});n.display=!!o,o&&St(e,t,n,r)}function Jt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return pt(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Bt(e,t){var n=Object.create(e);return n._data=t,ze(n),Ge(n),n._realParent=e,e._static&&(n._static=e._static),n}function Wt(e,t){if(t instanceof Wt)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function zt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Wt(e,t);o.forEach(function(e){e.call(n,i)})}}function Ht(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Gt(e,t){var n=new Wt(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Xt(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Kt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Qt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);ac.forEach(function(t){e.$on("hook:"+t,n[t])})}function Zt(e){e.$emit=zt,e.$dispatch=Ht,e.$broadcast=Gt,e.$on=Xt,e.$off=Kt}function Yt(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,Qt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&_e(this._data,o),We(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,Et(this))}function en(e,t){var n=function(n){var r=sc[n];r||(r={},sc[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})};for(var r in e)n(r)}function tn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function nn(e,t){var n=sc[t],r={},o=function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})};for(var i in n)o(i);return r}function rn(e,t){var n=e.customComponentMap;return n[t]}function on(e,t,n){var r=e.customComponentMap;return r[t]?void console.error("[JS Framework] define a component("+t+") that already exists"):void(r[t]=n)}function an(e){var t=uc.valid(e);if(t)return e;e="string"==typeof e?e:"";for(var n=e.split("."),r=0,o=[];r<3;){var i="string"==typeof n[r]&&n[r]?n[r]:"0";o.push(i),r++}return o.join(".")}function sn(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return r.errorMessage=o(e,t,n),i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r}function un(e,t){t=t||global.WXEnvironment,t=Oe(t)?t:{};var n={isDowngrade:!1};if("function"===Se(e)){var r=e.call(this,t,{semver:uc,normalizeVersion:an});r=!!r,n=r?sn("custom","","custom params"):n}else{e=Oe(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=an(p),v=an(t[s]);if(uc.satisfies(v,h)){n=sn(u,l,p);break}}else if(d){var m="array"===Se(p)?p:[p];if(m.indexOf(l)>=0){n=sn(u,l,p);break}}}}return n}function cn(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function ln(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Bu(t))o=je(t);else{if(!Hu(t))return new Error("Wrong component name: "+t);if(o=Ie(t),!rn(e,o))return new Error("It's not a component: "+t)}if(n=Oe(n)?n:{},"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!uc.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=un(n.downgrade);return i.isDowngrade?(e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]
-}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage)):(n.viewport&&cn(e,n.viewport),void(e.vm=new Yt(o,null,{_app:e},null,r)))}function fn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),on(e,t,n)}function dn(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):_e(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}function pn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&hn(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null,e.callbacks=null}function hn(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)hn(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function vn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function mn(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t){return mn(e,t,n,r)!==!1});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function yn(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.callbacks[t];return"function"==typeof o?(o(n),"undefined"!=typeof r&&r!==!1||(e.callbacks[t]=void 0),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"updateFinish"},[])):new Error('invalid callback id "'+t+'"')}function _n(e){e.differ.flush()}function gn(e,t){var n;return"array"!==Se(t)&&(t=[t]),t.forEach(function(t){t.args=t.args.map(function(t){return bn(t,e)}),n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function bn(e,t){var n=Se(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof nc.Element?e.ref:e;case"function":return t.callbacks[++t.uid]=e,t.uid.toString();default:return JSON.stringify(e)}}function wn(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return cc.apply(void 0,[e].concat(t))},a=function(t,r,i){o=ln(e,t,r,i||n),_n(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=Yt,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return fn.apply(void 0,[e].concat(t))},c=function(t,n){o=ln(e,t,{},n)},l=function(t){return function(n){o=ln(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(je(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.uid.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.uid.toString()},clearTimeout:function(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return Cn(_,h),o}function Cn(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function kn(e,t){var n=e[t];for(var r in n)n[r]()}function On(e,t){var n=e[t];for(var r in n){var o=n[r];o.forEach(function(e){e()})}}function xn(e,t,n){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},Object.defineProperty(this,"callbacks",{get:function(){return n.callbacks},set:function(e){e||n.close()}}),Object.defineProperty(this,"uid",{get:function(){return n.lastCallbackId},set:function(e){n.lastCallbackId=e}}),this.callbackManager=n,this.doc=new nc.Document(e,this.options.bundleUrl,null,nc.Listener),this.differ=new lc(e)}function En(e,t,n,r,o){var i=o||{},a=i.services,s=i.callbacks;Re();var u=fc[e];n=n||{};var c;return u?c=new Error('invalid instance id "'+e+'"'):(u=new xn(e,n,s),fc[e]=u,c=wn(u,t,r,a)),c}function Sn(e){nc.Document=e.Document,nc.Element=e.Element,nc.Comment=e.Comment,nc.sendTasks=e.sendTasks,nc.Listener=e.Listener}function jn(e,t){var n,r=fc[e];return n=r?dn(r,t):new Error('invalid instance id "'+e+'"')}function In(e){Re();var t=fc[e];return t?(pn(t),delete fc[e],fc):new Error('invalid instance id "'+e+'"')}function An(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?dc[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(dc[e.type]=e))})}function Tn(e){"object"==typeof e&&en(e)}function Nn(e){"object"==typeof e&&tn(Yt,e)}function Rn(e,t){var n=fc[e];if(n&&Array.isArray(t)){var r=[];return t.forEach(function(t){var n=pc[t.method],o=[].concat(t.args);"function"==typeof n&&(o.unshift(e),r.push(n.apply(void 0,o)))}),r}return new Error('invalid instance id "'+e+'" or tasks')}function Dn(e){var t,n=fc[e];return t=n?vn(n):new Error('invalid instance id "'+e+'"')}function $n(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Pn(){}function Mn(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead");var o=this._app.requireModule("userTrack");o.commit(e,t,n,r)}function Fn(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window){var n=this._app.requireModule("windvane");n.call({class:"MtopWVPlugin",method:"send",data:e},t)}else{var r=this._app.requireModule("stream");r.sendMtop(e,t)}}function qn(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead");var n=this._app.requireModule("windvane");n.call(e,t)}function Ln(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead");var n=this._app.requireModule("pageInfo");n.setSpm(e,t)}function Vn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead");var t=this._app.requireModule("user");t.getUserInfo(e)}function Un(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead");var t=this._app.requireModule("user");t.login(e)}function Jn(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead");var t=this._app.requireModule("user");t.logout(e)}var Bn={browser:"0.5.0",framework:"0.19.6",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if("undefined"!=typeof a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],a?c[l]="undefined"==typeof i?a(s,l):a.call(i,s,l):c[l]=s,l+=1;return c.length=u,c}}());var Wn="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},zn=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Hn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Gn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Xn=Gn,Kn=function(e){if(!Xn(e))throw TypeError(e+" is not an object!");return e},Qn=function(e){try{return!!e()}catch(e){return!0}},Zn=!Qn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),Yn=Gn,er=zn.document,tr=Yn(er)&&Yn(er.createElement),nr=function(e){return tr?er.createElement(e):{}},rr=!Zn&&!Qn(function(){return 7!=Object.defineProperty(nr("div"),"a",{get:function(){return 7}}).a}),or=Gn,ir=function(e,t){if(!or(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!or(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!or(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},ar=Kn,sr=rr,ur=ir,cr=Object.defineProperty,lr=Zn?Object.defineProperty:function(e,t,n){if(ar(e),t=ur(t,!0),ar(n),sr)try{return cr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},fr={f:lr},dr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},pr=fr,hr=dr,vr=Zn?function(e,t,n){return pr.f(e,t,hr(1,n))}:function(e,t,n){return e[t]=n,e},mr={}.hasOwnProperty,yr=function(e,t){return mr.call(e,t)},_r=0,gr=Math.random(),br=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++_r+gr).toString(36))},wr=t(function(e){var t=zn,n=vr,r=yr,o=br("src"),i="toString",a=Function[i],s=(""+a).split(i);Hn.inspectSource=function(e){return a.call(e)},(e.exports=function(e,i,a,u){var c="function"==typeof a;c&&(r(a,"name")||n(a,"name",i)),e[i]!==a&&(c&&(r(a,o)||n(a,o,e[i]?""+e[i]:s.join(String(i)))),e===t?e[i]=a:u?e[i]?e[i]=a:n(e,i,a):(delete e[i],n(e,i,a)))})(Function.prototype,i,function(){return"function"==typeof this&&this[o]||a.call(this)})}),Cr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},kr=Cr,Or=function(e,t,n){if(kr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},xr=zn,Er=Hn,Sr=vr,jr=wr,Ir=Or,Ar="prototype",Tr=function(e,t,n){var r,o,i,a,s=e&Tr.F,u=e&Tr.G,c=e&Tr.S,l=e&Tr.P,f=e&Tr.B,d=u?xr:c?xr[t]||(xr[t]={}):(xr[t]||{})[Ar],p=u?Er:Er[t]||(Er[t]={}),h=p[Ar]||(p[Ar]={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Ir(i,xr):l&&"function"==typeof i?Ir(Function.call,i):i,d&&jr(d,r,i,e&Tr.U),p[r]!=i&&Sr(p,r,a),l&&h[r]!=i&&(h[r]=i)};xr.core=Er,Tr.F=1,Tr.G=2,Tr.S=4,Tr.P=8,Tr.B=16,Tr.W=32,Tr.U=64,Tr.R=128;var Nr=Tr,Rr={}.toString,Dr=function(e){return Rr.call(e).slice(8,-1)},$r=Dr,Pr=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==$r(e)?e.split(""):Object(e)},Mr=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Fr=Pr,qr=Mr,Lr=function(e){return Fr(qr(e))},Vr=Math.ceil,Ur=Math.floor,Jr=function(e){return isNaN(e=+e)?0:(e>0?Ur:Vr)(e)},Br=Jr,Wr=Math.min,zr=function(e){return e>0?Wr(Br(e),9007199254740991):0},Hr=Jr,Gr=Math.max,Xr=Math.min,Kr=function(e,t){return e=Hr(e),e<0?Gr(e+t,0):Xr(e,t)},Qr=Lr,Zr=zr,Yr=Kr,eo=function(e){return function(t,n,r){var o,i=Qr(t),a=Zr(i.length),s=Yr(r,a);if(e&&n!=n){for(;a>s;)if(o=i[s++],o!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}},to=zn,no="__core-js_shared__",ro=to[no]||(to[no]={}),oo=function(e){return ro[e]||(ro[e]={})},io=oo("keys"),ao=br,so=function(e){return io[e]||(io[e]=ao(e))},uo=yr,co=Lr,lo=eo(!1),fo=so("IE_PROTO"),po=function(e,t){var n,r=co(e),o=0,i=[];for(n in r)n!=fo&&uo(r,n)&&i.push(n);for(;t.length>o;)uo(r,n=t[o++])&&(~lo(i,n)||i.push(n));return i},ho="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),vo=po,mo=ho,yo=Object.keys||function(e){return vo(e,mo)},_o=Object.getOwnPropertySymbols,go={f:_o},bo={}.propertyIsEnumerable,wo={f:bo},Co=Mr,ko=function(e){return Object(Co(e))},Oo=yo,xo=go,Eo=wo,So=ko,jo=Pr,Io=Object.assign,Ao=!Io||Qn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Io({},e)[n]||Object.keys(Io({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=So(e),o=arguments.length,i=1,a=xo.f,s=Eo.f;o>i;)for(var u,c=jo(n[i++]),l=a?Oo(c).concat(a(c)):Oo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Io,To=Nr;To(To.S+To.F,"Object",{assign:Ao}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,t).set,r.call({},null)}catch(o){if(e.prototype!=={}[t]||void 0==={__proto__:null}.__proto__)return;r=function(e){this[t]=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object,"__proto__"));var No=Wn,Ro=No.WXEnvironment;Ro&&"iOS"===Ro.platform&&(Wn.Promise=void 0);var Do=t(function(e){var t=oo("wks"),n=br,r=zn.Symbol,o="function"==typeof r,i=e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))};i.store=t}),$o=Dr,Po=Do("toStringTag"),Mo="Arguments"==$o(function(){return arguments}()),Fo=function(e,t){try{return e[t]}catch(e){}},qo=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=Fo(t=Object(e),Po))?n:Mo?$o(t):"Object"==(r=$o(t))&&"function"==typeof t.callee?"Arguments":r},Lo=qo,Vo={};Vo[Do("toStringTag")]="z",Vo+""!="[object z]"&&wr(Object.prototype,"toString",function(){return"[object "+Lo(this)+"]"},!0);var Uo=Jr,Jo=Mr,Bo=function(e){return function(t,n){var r,o,i=String(Jo(t)),a=Uo(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):(r-55296<<10)+(o-56320)+65536)}},Wo=!1,zo={},Ho=fr,Go=Kn,Xo=yo,Ko=Zn?Object.defineProperties:function(e,t){Go(e);for(var n,r=Xo(t),o=r.length,i=0;o>i;)Ho.f(e,n=r[i++],t[n]);return e},Qo=zn.document&&document.documentElement,Zo=Kn,Yo=Ko,ei=ho,ti=so("IE_PROTO"),ni=function(){},ri="prototype",oi=function(){var e,t=nr("iframe"),n=ei.length,r="<",o=">";for(t.style.display="none",Qo.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write(r+"script"+o+"document.F=Object"+r+"/script"+o),e.close(),oi=e.F;n--;)delete oi[ri][ei[n]];return oi()},ii=Object.create||function(e,t){var n;return null!==e?(ni[ri]=Zo(e),n=new ni,ni[ri]=null,n[ti]=e):n=oi(),void 0===t?n:Yo(n,t)},ai=fr.f,si=yr,ui=Do("toStringTag"),ci=function(e,t,n){e&&!si(e=n?e:e.prototype,ui)&&ai(e,ui,{configurable:!0,value:t})},li=ii,fi=dr,di=ci,pi={};vr(pi,Do("iterator"),function(){return this});var hi=function(e,t,n){e.prototype=li(pi,{next:fi(1,n)}),di(e,t+" Iterator")},vi=yr,mi=ko,yi=so("IE_PROTO"),_i=Object.prototype,gi=Object.getPrototypeOf||function(e){return e=mi(e),vi(e,yi)?e[yi]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?_i:null},bi=Wo,wi=Nr,Ci=wr,ki=vr,Oi=yr,xi=zo,Ei=hi,Si=ci,ji=gi,Ii=Do("iterator"),Ai=!([].keys&&"next"in[].keys()),Ti="@@iterator",Ni="keys",Ri="values",Di=function(){return this},$i=function(e,t,n,r,o,i,a){Ei(n,t,r);var s,u,c,l=function(e){if(!Ai&&e in h)return h[e];switch(e){case Ni:return function(){return new n(this,e)};case Ri:return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d=o==Ri,p=!1,h=e.prototype,v=h[Ii]||h[Ti]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=ji(_.call(new e)),c!==Object.prototype&&(Si(c,f,!0),bi||Oi(c,Ii)||ki(c,Ii,Di))),d&&v&&v.name!==Ri&&(p=!0,m=function(){return v.call(this)}),bi&&!a||!Ai&&!p&&h[Ii]||ki(h,Ii,m),xi[t]=m,xi[f]=Di,o)if(s={values:d?m:l(Ri),keys:i?m:l(Ni),entries:y},a)for(u in s)u in h||Ci(h,u,s[u]);else wi(wi.P+wi.F*(Ai||p),t,s);return s},Pi=Bo(!0);$i(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Pi(t,n),this._i+=e.length,{value:e,done:!1})});var Mi=Do("unscopables"),Fi=Array.prototype;void 0==Fi[Mi]&&vr(Fi,Mi,{});var qi=function(e){Fi[Mi][e]=!0},Li=function(e,t){return{value:t,done:!!e}},Vi=qi,Ui=Li,Ji=zo,Bi=Lr,Wi=$i(Array,"Array",function(e,t){this._t=Bi(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ui(1)):"keys"==t?Ui(0,n):"values"==t?Ui(0,e[n]):Ui(0,[n,e[n]])},"values");Ji.Arguments=Ji.Array,Vi("keys"),Vi("values"),Vi("entries");for(var zi=Wi,Hi=wr,Gi=zn,Xi=vr,Ki=zo,Qi=Do,Zi=Qi("iterator"),Yi=Qi("toStringTag"),ea=Ki.Array,ta=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],na=0;na<5;na++){var ra,oa=ta[na],ia=Gi[oa],aa=ia&&ia.prototype;if(aa){aa[Zi]||Xi(aa,Zi,ea),aa[Yi]||Xi(aa,Yi,oa),Ki[oa]=ea;for(ra in zi)aa[ra]||Hi(aa,ra,zi[ra],!0)}}var sa,ua,ca,la=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},fa=Kn,da=function(e,t,n,r){try{return r?t(fa(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&fa(o.call(e)),t}},pa=zo,ha=Do("iterator"),va=Array.prototype,ma=function(e){return void 0!==e&&(pa.Array===e||va[ha]===e)},ya=qo,_a=Do("iterator"),ga=zo,ba=Hn.getIteratorMethod=function(e){if(void 0!=e)return e[_a]||e["@@iterator"]||ga[ya(e)]},wa=t(function(e){var t=Or,n=da,r=ma,o=Kn,i=zr,a=ba,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if(m=c?_(o(h=e[g])[0],h[1]):_(e[g]),m===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if(m=n(v,_,h.value,c),m===s||m===u)return m};c.BREAK=s,c.RETURN=u}),Ca=Kn,ka=Cr,Oa=Do("species"),xa=function(e,t){var n,r=Ca(e).constructor;return void 0===r||void 0==(n=Ca(r)[Oa])?t:ka(n)},Ea=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},Sa=Or,ja=Ea,Ia=Qo,Aa=nr,Ta=zn,Na=Ta.process,Ra=Ta.setImmediate,Da=Ta.clearImmediate,$a=Ta.MessageChannel,Pa=0,Ma={},Fa="onreadystatechange",qa=function(){var e=+this;if(Ma.hasOwnProperty(e)){var t=Ma[e];delete Ma[e],t()}},La=function(e){qa.call(e.data)};Ra&&Da||(Ra=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return Ma[++Pa]=function(){ja("function"==typeof e?e:Function(e),n)},sa(Pa),Pa},Da=function(e){delete Ma[e]},"process"==Dr(Na)?sa=function(e){Na.nextTick(Sa(qa,e,1))}:$a?(ua=new $a,ca=ua.port2,ua.port1.onmessage=La,sa=Sa(ca.postMessage,ca,1)):Ta.addEventListener&&"function"==typeof postMessage&&!Ta.importScripts?(sa=function(e){Ta.postMessage(e+"","*")},Ta.addEventListener("message",La,!1)):sa=Fa in Aa("script")?function(e){Ia.appendChild(Aa("script"))[Fa]=function(){Ia.removeChild(this),qa.call(e)}}:function(e){setTimeout(Sa(qa,e,1),0)});var Va={set:Ra,clear:Da},Ua=zn,Ja=Va.set,Ba=Ua.MutationObserver||Ua.WebKitMutationObserver,Wa=Ua.process,za=Ua.Promise,Ha="process"==Dr(Wa),Ga=function(){var e,t,n,r=function(){var r,o;for(Ha&&(r=Wa.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Ha)n=function(){Wa.nextTick(r)};else if(Ba){var o=!0,i=document.createTextNode("");new Ba(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(za&&za.resolve){var a=za.resolve();n=function(){a.then(r)}}else n=function(){Ja.call(Ua,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}},Xa=wr,Ka=function(e,t,n){for(var r in t)Xa(e,r,t[r],n);return e},Qa=zn,Za=fr,Ya=Zn,es=Do("species"),ts=function(e){var t=Qa[e];Ya&&t&&!t[es]&&Za.f(t,es,{configurable:!0,get:function(){return this}})},ns=Do("iterator"),rs=!1;try{var os=[7][ns]();os.return=function(){rs=!0},Array.from(os,function(){throw 2})}catch(e){}var is,as,ss,us=function(e,t){if(!t&&!rs)return!1;var n=!1;try{var r=[7],o=r[ns]();o.next=function(){return{done:n=!0}},r[ns]=function(){return o},e(r)}catch(e){}return n},cs=Wo,ls=zn,fs=Or,ds=qo,ps=Nr,hs=Gn,vs=Cr,ms=la,ys=wa,_s=xa,gs=Va.set,bs=Ga(),ws="Promise",Cs=ls.TypeError,ks=ls.process,Os=ls[ws],ks=ls.process,xs="process"==ds(ks),Es=function(){},Ss=!!function(){try{var e=Os.resolve(1),t=(e.constructor={})[Do("species")]=function(e){e(Es,Es)};return(xs||"function"==typeof PromiseRejectionEvent)&&e.then(Es)instanceof t}catch(e){}}(),js=function(e,t){return e===t||e===Os&&t===ss},Is=function(e){var t;return!(!hs(e)||"function"!=typeof(t=e.then))&&t},As=function(e){return js(Os,e)?new Ts(e):new as(e)},Ts=as=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw Cs("Bad Promise constructor");t=e,n=r}),this.resolve=vs(t),this.reject=vs(n)},Ns=function(e){try{e()}catch(e){return{error:e}}},Rs=function(e,t){if(!e._n){e._n=!0;var n=e._c;bs(function(){for(var r=e._v,o=1==e._s,i=0,a=function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&Ps(e),e._h=1),a===!0?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(Cs("Promise-chain cycle")):(i=Is(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}};n.length>i;)a(n[i++]);e._c=[],e._n=!1,t&&!e._h&&Ds(e)})}},Ds=function(e){gs.call(ls,function(){var t,n,r,o=e._v;if($s(e)&&(t=Ns(function(){xs?ks.emit("unhandledRejection",o,e):(n=ls.onunhandledrejection)?n({promise:e,reason:o}):(r=ls.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=xs||$s(e)?2:1),e._a=void 0,t)throw t.error})},$s=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!$s(t.promise))return!1;return!0},Ps=function(e){gs.call(ls,function(){var t;xs?ks.emit("rejectionHandled",e):(t=ls.onrejectionhandled)&&t({promise:e,reason:e._v})})},Ms=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),Rs(t,!0))},Fs=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw Cs("Promise can't be resolved itself");(t=Is(e))?bs(function(){var r={_w:n,_d:!1};try{t.call(e,fs(Fs,r,1),fs(Ms,r,1))}catch(e){Ms.call(r,e)}}):(n._v=e,n._s=1,Rs(n,!1))}catch(e){Ms.call({_w:n,_d:!1},e)}}};Ss||(Os=function(e){ms(this,Os,ws,"_h"),vs(e),is.call(this);try{e(fs(Fs,this,1),fs(Ms,this,1))}catch(e){Ms.call(this,e)}},is=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},is.prototype=Ka(Os.prototype,{then:function(e,t){var n=As(_s(this,Os));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=xs?ks.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&Rs(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),Ts=function(){var e=new is;this.promise=e,this.resolve=fs(Fs,e,1),this.reject=fs(Ms,e,1)}),ps(ps.G+ps.W+ps.F*!Ss,{Promise:Os}),ci(Os,ws),ts(ws),ss=Hn[ws],ps(ps.S+ps.F*!Ss,ws,{reject:function(e){var t=As(this),n=t.reject;return n(e),t.promise}}),ps(ps.S+ps.F*(cs||!Ss),ws,{resolve:function(e){if(e instanceof Os&&js(e.constructor,this))return e;var t=As(this),n=t.resolve;return n(e),t.promise}}),ps(ps.S+ps.F*!(Ss&&us(function(e){Os.all(e).catch(Es)})),ws,{all:function(e){var t=this,n=As(t),r=n.resolve,o=n.reject,i=Ns(function(){var n=[],i=0,a=1;ys(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=As(t),r=n.reject,o=Ns(function(){ys(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var qs=["off","error","warn","info","log","debug"],Ls={},Vs=global.console,Us=global.setTimeout,Js=global.setTimeoutNative;s();var Bs=function(){},Ws=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Bs=t||function(){}};Ws.prototype.send=function(e,t,n){var r=t.action,o=t.component,i=t.ref,a=t.module,s=t.method;switch(e){case"dom":return this[r](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,i,s,n,{component:o});default:return this.moduleHandler(this.instanceId,a,s,n,{})}},Ws.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},Ws.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},Ws.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var zs,Hs,Gs,Xs={},Ks=1,Qs={},Zs=[],Ys=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,eu={},tu={createInstance:R,registerService:S,unregisterService:j};q.prototype.destroy=function(){var e=d(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var nu="div";L.prototype=Object.create(q.prototype),L.prototype.constructor=L,x(L),Object.assign(L.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(k(e,this.children,this.children.length,!0),1===e.nodeType){var t=k(e,this.pureChildren,this.pureChildren.length),n=h(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(g(e,this),C(e,this.children,this.children.length,!0),this.docId&&V(this.docId,e),1===e.nodeType){C(e,this.pureChildren,this.pureChildren.length);var r=h(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=b(t),r=k(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=h(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t),!0),this.docId&&V(this.docId,e),1===e.nodeType){var i=b(t),a=C(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=h(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(k(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=k(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),r=h(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(g(e,this),C(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&V(this.docId,e),1===e.nodeType){var o=C(e,this.pureChildren,this.pureChildren.indexOf(w(t))+1),i=h(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(O(e,this.children,!0),1===e.nodeType)){O(e,this.pureChildren);var n=h(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=h(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||n===!1){this.attr[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||n===!1){this.style[e]=t;var r=h(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=h(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=h(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=h(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}}),U.prototype=Object.create(q.prototype),U.prototype.constructor=U,U.prototype.toString=function(){return"<!-- "+this.value+" -->"},Object.assign(J.prototype,{createFinish:function(e){var t=this.handler;return t([B("createFinish")],e)},updateFinish:function(e){var t=this.handler;return t([B("updateFinish")],e)},refreshFinish:function(e){var t=this.handler;return t([B("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[B("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return B("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(B("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return B("removeElement",[e])});return this.addActions(t)}return this.addActions(B("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(B("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(B("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(B("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(B("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(B("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;return Array.isArray(e)||(e=[e]),this.batched?void t.push.apply(t,e):n(e)}});var ru={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};G.handler=null,Object.assign(G.prototype,{getRef:function(e){
-return this.nodeMap[e]},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new L("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){m(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){m(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){var n=new L(e,t);_(this,n)}return this.body},createElement:function(e,t){return new L(e,t)},createComment:function(e){return new U(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&X(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,p(this.id)}});var ou=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};ou.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},ou.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},ou.prototype.consume=function(e,t,n){var r=this.callbacks[e];return"undefined"!=typeof n&&n!==!1||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},ou.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var iu={Document:G,Element:L,Comment:U,Listener:J,TaskCenter:Ws,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return global.callNative.apply(global,e)},CallbackManager:ou};G.handler=iu.sendTasks;var au,su={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:S,unregister:j,has:I},freezePrototype:K,init:F,config:iu},uu={},cu={},lu=Q,fu=Z,du=Y,pu=ee,hu=te,vu=ne,mu=re,yu=oe,_u=ie,gu=ae,bu={init:lu,registerComponents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu},wu=Object.freeze({default:bu,__moduleExports:bu,init:lu,registerComponents:fu,registerModules:du,registerMethods:pu,prepareInstance:hu,createInstance:vu,refreshInstance:mu,destroyInstance:yu,getRoot:_u,receiveTasks:gu}),Cu=t(function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e,10);return t||0===t?t:e}function o(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return Xt.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}function c(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return tn.call(e)===nn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e){return e.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(",")}function y(e,t){var n=d(e),r=d(t);return n&&r?JSON.stringify(e)===JSON.stringify(t):!n&&!r&&String(e)===String(t)}function _(e,t){for(var n=0;n<e.length;n++)if(y(e[n],t))return n;return-1}function g(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function b(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function w(e){if(!sn.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function C(e){return/native code/.test(e.toString())}function k(e){Cn.target&&kn.push(Cn.target),Cn.target=e}function O(){Cn.target=kn.pop()}function x(e,t){e.__proto__=t}function E(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];b(e,i,t[i])}}function S(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof jn?n=e.__ob__:Sn.shouldConvert&&!mn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new jn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new Cn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||i.configurable!==!1){var a=i&&i.get,s=i&&i.set,u=S(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return Cn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,u=S(t),o.notify())}})}}function I(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return void(e[t]=n);var r=e.__ob__;if(!(e._isVue||r&&r.vmCount))return r?(j(r.value,t,n),r.dep.notify(),n):void(e[t]=n)}function A(e,t){var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&T(t)}function N(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&N(r,o):I(e,n,o);return e}function R(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function D(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)r=t[n],"string"==typeof r&&(o=Qt(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=Qt(a),i[o]=p(r)?r:{type:r};e.props=i}}function P(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function M(e,t,n){function r(r){var o=In[r]||Tn;l[r]=o(e[r],t[r],n,r)}$(t),P(t);var o=t.extends;if(o&&(e="function"==typeof o?M(e,o.options,n):M(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof Be&&(u=u.options),e=M(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=Qt(n);if(a(o,i))return o[i];var s=Zt(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function q(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(U(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:U(String,o.type)||""!==s&&s!==en(e)||(s=!0)),void 0===s){s=L(r,o,e);var u=Sn.shouldConvert;Sn.shouldConvert=!0,S(s),Sn.shouldConvert=u}return s}function L(e,t,n){if(a(t,"default")){var r=t.default;return d(r),e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e[n]?e[n]:"function"==typeof r&&t.type!==Function?r.call(e):r}}function V(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function U(e,t){if(!Array.isArray(t))return V(t)===V(e);for(var n=0,r=t.length;n<r;n++)if(V(t[n])===V(e))return!0;return!1}function J(e){return new Rn(void 0,void 0,void 0,String(e))}function B(e){var t=new Rn(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function W(e){for(var t=new Array(e.length),n=0;n<e.length;n++)t[n]=B(e[n]);return t}function z(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(e=Y(e,i,function(){n.$forceUpdate()}),!e)return;Je(e),t=t||{};var a=ee(t,e);if(e.options.functional)return H(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),ne(t);var u=e.options.name||o,c=new Rn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r});return c}}}function H(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=q(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return de(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return ye(o,r)}});return l instanceof Rn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function G(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function X(e,t,n,r){if(!e.child||e.child._isDestroyed){var o=e.child=G(e,qn,n,r);o.$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var i=e;K(i,i)}}function K(e,t){var n=t.componentOptions,r=t.child=e.child;r._updateFromParent(n.propsData,n.listeners,t,n.children)}function Q(e){e.child._isMounted||(e.child._isMounted=!0,xe(e.child,"mounted")),e.data.keepAlive&&(e.child._inactive=!1,xe(e.child,"activated"))}function Z(e){e.child._isDestroyed||(e.data.keepAlive?(e.child._inactive=!0,xe(e.child,"deactivated")):e.child.$destroy())}function Y(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function ee(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=en(s);te(r,i,s,u,!0)||te(r,o,s,u)||te(r,a,s,u)}return r}}function te(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function ne(e){e.hook||(e.hook={});for(var t=0;t<Pn.length;t++){var n=Pn[t],r=e.hook[n],o=$n[n];e.hook[n]=r?re(o,r):o}}function re(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function oe(e,t,n,r){r+=t;var o=e.__injected||(e.__injected={});if(!o[r]){o[r]=!0;var i=e[t];i?e[t]=function(){i.apply(this,arguments),n.apply(this,arguments)}:e[t]=n}}function ie(e,t,n,r,o){var i,a,s,u,c,l,f;for(i in e)if(a=e[i],s=t[i],a)if(s){if(a!==s)if(Array.isArray(s)){s.length=a.length;for(var d=0;d<s.length;d++)s[d]=a[d];e[i]=s}else s.fn=a,e[i]=s}else f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,Array.isArray(a)?n(c,a.invoker=ae(a),f,l):(a.invoker||(u=a,a=e[i]={},a.fn=u,a.invoker=se(a)),n(c,a.invoker,f,l));else;for(i in t)e[i]||(f="~"===i.charAt(0),c=f?i.slice(1):i,l="!"===c.charAt(0),c=l?c.slice(1):c,r(c,t[i].invoker,l))}function ae(e){return function(t){for(var n=arguments,r=1===arguments.length,o=0;o<e.length;o++)r?e[o](t):e[o].apply(null,n)}}function se(e){return function(t){var n=1===arguments.length;n?e.fn(t):e.fn.apply(null,arguments)}}function ue(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function ce(e){return s(e)?[J(e)]:Array.isArray(e)?le(e):void 0}function le(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)r=e[n],null!=r&&"boolean"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,le(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(J(r)):r.text&&o&&o.text?i[i.length-1]=J(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function fe(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function de(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=Fn),pe(e,t,n,r,o)}function pe(e,t,n,r,o){if(n&&n.__ob__)return Dn();if(!t)return Dn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===Fn?r=ce(r):o===Mn&&(r=ue(r));var i,a;if("string"==typeof t){var s;a=an.getTagNamespace(t),i=an.isReservedTag(t)?new Rn(an.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?z(s,n,e,r,t):new Rn(t,n,r,void 0,void 0,e)}else i=z(t,n,e,r);return i?(a&&he(i,a),i):Dn()}function he(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&he(o,t)}}function ve(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=ye(e.$options._renderChildren,n),e.$scopedSlots={},e._c=function(t,n,r,o){return de(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return de(e,t,n,r,o,!0)},e.$options.el&&e.$mount(e.$options.el)}function me(e){function t(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&o(e[r],t+"_"+r,n);else o(e,t,n)}function o(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}e.prototype.$nextTick=function(e){return _n(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=W(e.$slots[i]);o&&o.data.scopedSlots&&(e.$scopedSlots=o.data.scopedSlots),r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){if(!an.errorHandler)throw t;an.errorHandler.call(null,t,e),a=e._vnode}return a instanceof Rn||(a=Dn()),a.parent=o,a},e.prototype._s=n,e.prototype._v=J,e.prototype._n=r,e.prototype._e=Dn,e.prototype._q=y,e.prototype._i=_,e.prototype._m=function(e,n){var r=this._staticTrees[e];return r&&!n?Array.isArray(r)?W(r):B(r):(r=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),t(r,"__static__"+e,!1),r)},e.prototype._o=function(e,n,r){return t(e,"__once__"+n+(r?"_"+r:""),!0),e},e.prototype._f=function(e){return F(this.$options,"filters",e,!0)||on},e.prototype._l=function(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n},e.prototype._t=function(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t},e.prototype._b=function(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));for(var o in n)if("class"===o||"style"===o)e[o]=n[o];else{var i=r||an.mustUseProp(t,o)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={});i[o]=n[o]}}else;return e},e.prototype._k=function(e,t,n){var r=an.keyCodes[t]||n;return Array.isArray(r)?r.indexOf(e)===-1:r!==e}}function ye(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.length&&(1!==i.length||" "!==i[0].text&&!i[0].isComment)&&(n.default=i),n}function _e(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&we(e,t)}function ge(e,t,n){n?An.$once(e,t):An.$on(e,t)}function be(e,t){An.$off(e,t)}function we(e,t,n){An=e,ie(t,n||{},ge,be,e)}function Ce(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this;return(r._events[e]||(r._events[e]=[])).push(n),t.test(e)&&(r._hasHookEvent=!0),r},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;var r=n._events[e];if(!r)return n;if(1===arguments.length)return n._events[e]=null,n;for(var o,i=r.length;i--;)if(o=r[i],o===t||o.fn===t){r.splice(i,1);break}return n},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}function ke(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function Oe(e){e.prototype._mount=function(e,t){var n=this;return n.$el=e,n.$options.render||(n.$options.render=Dn),xe(n,"beforeMount"),n._watcher=new Hn(n,function(){n._update(n._render(),t)},v),t=!1,null==n.$vnode&&(n._isMounted=!0,xe(n,"mounted")),n},e.prototype._update=function(e,t){var n=this;n._isMounted&&xe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=qn;qn=n,n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),qn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype._updateFromParent=function(e,t,n,r){var o=this,i=!(!o.$options._renderChildren&&!r);if(o.$options._parentVnode=n,o.$vnode=n,o._vnode&&(o._vnode.parent=n),o.$options._renderChildren=r,e&&o.$options.props){Sn.shouldConvert=!1;for(var a=o.$options._propKeys||[],s=0;s<a.length;s++){var u=a[s];o[u]=q(u,o.$options.props,e,o)}Sn.shouldConvert=!0,o.$options.propsData=e}if(t){var c=o.$options._parentListeners;o.$options._parentListeners=t,we(o,t,c)}i&&(o.$slots=ye(r,n.context),o.$forceUpdate())},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){xe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,xe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}function xe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)n[r].call(e);e._hasHookEvent&&e.$emit("hook:"+t)}function Ee(){Ln.length=0,Vn={},Un=Jn=!1}function Se(){Jn=!0;var e,t,n;for(Ln.sort(function(e,t){return e.id-t.id}),Bn=0;Bn<Ln.length;Bn++)e=Ln[Bn],t=e.id,Vn[t]=null,e.run();for(Bn=Ln.length;Bn--;)e=Ln[Bn],n=e.vm,n._watcher===e&&n._isMounted&&xe(n,"updated");yn&&an.devtools&&yn.emit("flush"),Ee()}function je(e){var t=e.id;if(null==Vn[t]){if(Vn[t]=!0,Jn){for(var n=Ln.length-1;n>=0&&Ln[n].id>e.id;)n--;Ln.splice(Math.max(n,Bn)+1,0,e)}else Ln.push(e);Un||(Un=!0,_n(Se))}}function Ie(e){Gn.clear(),Ae(e,Gn)}function Ae(e,t){var n,r,o=Array.isArray(e);if((o||d(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)Ae(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)Ae(e[r[n]],t)}}function Te(e){e._watchers=[];var t=e.$options;t.props&&Ne(e,t.props),t.methods&&Pe(e,t.methods),t.data?Re(e):S(e._data={},!0),t.computed&&De(e,t.computed),t.watch&&Me(e,t.watch)}function Ne(e,t){var n=e.$options.propsData||{},r=e.$options._propKeys=Object.keys(t),o=!e.$parent;Sn.shouldConvert=o;for(var i=function(o){var i=r[o];j(e,i,q(i,t,n,e))},a=0;a<r.length;a++)i(a);Sn.shouldConvert=!0}function Re(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||Le(e,n[o]);S(t,!0)}function De(e,t){for(var n in t){var r=t[n];"function"==typeof r?(Xn.get=$e(r,e),Xn.set=v):(Xn.get=r.get?r.cache!==!1?$e(r.get,e):c(r.get,e):v,Xn.set=r.set?c(r.set,e):v),Object.defineProperty(e,n,Xn)}}function $e(e,t){var n=new Hn(t,e,v,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Cn.target&&n.depend(),n.value}}function Pe(e,t){for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function Me(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)Fe(e,n,r[o]);else Fe(e,n,r)}}function Fe(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function qe(e){var t={};t.get=function(){return this._data},Object.defineProperty(e.prototype,"$data",t),e.prototype.$set=I,e.prototype.$delete=A,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Hn(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}function Le(e,t){g(t)||Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Ve(e){e.prototype._init=function(e){var t=this;t._uid=Kn++,t._isVue=!0,e&&e._isComponent?Ue(t,e):t.$options=M(Je(t.constructor),e||{},t),t._renderProxy=t,t._self=t,ke(t),_e(t),xe(t,"beforeCreate"),Te(t),xe(t,"created"),ve(t)}}function Ue(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function Je(e){var t=e.options;if(e.super){var n=e.super.options,r=e.superOptions,o=e.extendOptions;n!==r&&(e.superOptions=n,o.render=t.render,o.staticRenderFns=t.staticRenderFns,o._scopeId=t._scopeId,t=e.options=M(n,o),t.name&&(t.components[t.name]=e))}return t}function Be(e){this._init(e)}function We(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):e.apply(null,t),e.installed=!0,this}}}function ze(e){e.mixin=function(e){this.options=M(this.options,e)}}function He(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=M(n.options,e),a.super=n,a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,an._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,o[r]=a,a}}function Ge(e){an._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function Xe(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e.test(t)}function Ke(e){var t={};t.get=function(){return an},Object.defineProperty(e,"config",t),e.util=Nn,e.set=I,e.delete=A,e.nextTick=_n,e.options=Object.create(null),an._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,Yn),We(e),ze(e),He(e),Ge(e)}function Qe(e){this.instanceId="",this.nodeId=er++,this.parentNode=null,this.nodeType=3,this.text=e}function Ze(e){return new tr.Element(e)}function Ye(e,t){return new tr.Element(e+":"+t)}function et(e){return new tr.TextNode(e)}function tt(e){return new tr.Comment(e)}function nt(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=Ze("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function rt(e,t){return 3===t.nodeType?void e.setAttr("value",""):void e.removeChild(t)}function ot(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=Ze("text");n.setAttr("value",t.text),e.appendChild(n)}}function it(e){return e.parentNode}function at(e){return e.nextSibling}function st(e){return e.type}function ut(e,t){e.parentNode.setAttr("value",t)}function ct(e,t,n){e.setAttr(t,n)}function lt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.child||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function ft(e){return null==e}function dt(e){return null!=e}function pt(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function ht(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,dt(o)&&(i[o]=r);return i}function vt(e){function t(e){return new Rn(S.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0===--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=S.parentNode(e);t&&S.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(dt(u)){e.elm=e.ns?S.createElementNS(e.ns,u):S.createElement(u,e),h(e);var f=i&&i.appendAsTree;f||(dt(i)&&d(e,t),c(n,e.elm,r)),l(e,s,t),f&&(dt(i)&&d(e,t),c(n,e.elm,r))}else e.isComment?(e.elm=S.createComment(e.text),c(n,e.elm,r)):(e.elm=S.createTextNode(e.text),c(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(dt(o)){var i=dt(e.child)&&o.keepAlive;if(dt(o=o.hook)&&dt(o=o.init)&&o(e,!1,n,r),dt(e.child))return p(e,t),i&&u(e,t,n,r),!0}}function u(e,t,n,r){for(var o,i=e;i.child;)if(i=i.child._vnode,dt(o=i.data)&&dt(o=o.transition)){for(o=0;o<x.activate.length;++o)x.activate[o](ir,i);t.push(i);break}c(n,e.elm,r)}function c(e,t,n){e&&(n?S.insertBefore(e,t,n):S.appendChild(e,t))}function l(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&S.appendChild(e.elm,S.createTextNode(e.text))}function f(e){for(;e.child;)e=e.child._vnode;return dt(e.tag)}function d(e,t){for(var n=0;n<x.create.length;++n)x.create[n](ir,e);k=e.data.hook,dt(k)&&(k.create&&k.create(ir,e),k.insert&&t.push(e))}function p(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.child.$el,f(e)?(d(e,t),h(e)):(lt(e),t.push(e))}function h(e){var t;dt(t=e.context)&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,""),dt(t=qn)&&t!==e.context&&dt(t=t.$options._scopeId)&&S.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(dt(r))for(dt(t=r.hook)&&dt(t=t.destroy)&&t(e),t=0;t<x.destroy.length;++t)x.destroy[t](e);if(dt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];dt(i)&&(dt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||dt(e.data)){var o=x.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),dt(k=e.child)&&dt(k=k._vnode)&&dt(k.data)&&_(k,t),k=0;k<x.remove.length;++k)x.remove[k](e,t);dt(k=e.data.hook)&&dt(k=k.remove)?k(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(var a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)ft(p)?p=t[++l]:ft(h)?h=t[--d]:pt(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):pt(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):pt(p,g)?(b(p,g,r),w&&S.insertBefore(e,p.elm,S.nextSibling(h.elm)),p=t[++l],g=n[--m]):pt(h,_)?(b(h,_,r),w&&S.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(ft(a)&&(a=ht(t,l,d)),s=dt(_.key)?a[_.key]:null,ft(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],pt(u,_)?(b(u,_,r),t[s]=void 0,w&&S.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=ft(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.child=e.child);var o,i=t.data,a=dt(i);a&&dt(o=i.hook)&&dt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&f(t)){for(o=0;o<x.update.length;++o)x.update[o](e,t);dt(o=i.hook)&&dt(o=o.update)&&o(e,t)}ft(t.text)?dt(u)&&dt(c)?u!==c&&g(s,u,c,n,r):dt(c)?(dt(e.text)&&S.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):dt(u)?y(s,u,0,u.length-1):dt(e.text)&&S.setTextContent(s,""):e.text!==t.text&&S.setTextContent(s,t.text),a&&dt(o=i.hook)&&dt(o=o.postpatch)&&o(e,t)}}function w(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function C(e,t,n){t.elm=e;var r=t.tag,o=t.data,i=t.children;if(dt(o)&&(dt(k=o.hook)&&dt(k=k.init)&&k(t,!0),dt(k=t.child)))return p(t,n),!0;if(dt(r)){if(dt(i))if(e.hasChildNodes()){for(var a=!0,s=e.firstChild,u=0;u<i.length;u++){if(!s||!C(s,i[u],n)){a=!1;break}s=s.nextSibling}if(!a||s)return!1}else l(t,i,n);if(dt(o))for(var c in o)if(!j(c)){d(t,n);break}}else e.data!==t.text&&(e.data=t.text);return!0}var k,O,x={},E=e.modules,S=e.nodeOps;for(k=0;k<ar.length;++k)for(x[ar[k]]=[],O=0;O<E.length;++O)void 0!==E[O][ar[k]]&&x[ar[k]].push(E[O][ar[k]]);var j=o("attrs,style,class,staticClass,staticStyle,key");return function(e,n,r,o,a,s){if(!n)return void(e&&m(e));var u,c,l=!1,d=[];if(e){var p=dt(e.nodeType);if(!p&&pt(e,n))b(e,n,d,o);else{if(p){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&C(e,n,d))return w(n,d,!0),e;e=t(e)}if(u=e.elm,c=S.parentNode(u),i(n,d,c,S.nextSibling(u)),n.parent){for(var h=n.parent;h;)h.elm=n.elm,h=h.parent;if(f(n))for(var v=0;v<x.create.length;++v)x.create[v](ir,n.parent)}null!==c?y(c,[e],0,0):dt(e.tag)&&m(e)}}else l=!0,i(n,d,a,s);return w(n,d,l),n.elm}}function mt(e,t){(e.data.directives||t.data.directives)&&yt(e,t)}function yt(e,t){var n,r,o,i=e===ir,a=t===ir,s=_t(e.data.directives,e.context),u=_t(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,bt(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):(bt(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)bt(c[n],"inserted",t,e)};i?oe(t.data.hook||(t.data.hook={}),"insert",f,"dir-insert"):f()}if(l.length&&oe(t.data.hook||(t.data.hook={}),"postpatch",function(){for(var n=0;n<l.length;n++)bt(l[n],"componentUpdated",t,e)},"dir-postpatch"),!i)for(n in s)u[n]||bt(s[n],"unbind",e,e,a)}function _t(e,t){var n=Object.create(null);if(!e)return n;var r,o;for(r=0;r<e.length;r++)o=e[r],o.modifiers||(o.modifiers=ur),n[gt(o)]=o,o.def=F(t.$options,"directives",o.name,!0);return n}function gt(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function bt(e,t,n,r,o){var i=e.def&&e.def[t];i&&i(n.elm,e,n,r,o)}function wt(e,t){if(e.data.attrs||t.data.attrs){var n,r,o,i=t.elm,a=e.data.attrs||{},s=t.data.attrs||{};s.__ob__&&(s=t.data.attrs=f({},s));for(n in s)r=s[n],o=a[n],o!==r&&i.setAttr(n,r);for(n in a)null==s[n]&&i.setAttr(n)}}function Ct(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u=[],c=o.staticClass;c&&u.push.apply(u,c),o.class&&u.push.apply(u,o.class);var l=kt(a,u,r);for(var f in l)n.setStyle(f,l[f])}}function kt(e,t,n){var r=n.$options.style||{},o={};return t.forEach(function(e){var t=r[e];f(o,t)}),e.forEach(function(e){var t=r[e];for(var n in t)o.hasOwnProperty(n)||(o[n]="")}),o}function Ot(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};ie(n,r,function(e,n,r){return r?void console.log("Weex do not support event in bubble phase."):void t.elm.addEvent(e,n.bind(t.context))},function(e){t.elm.removeEvent(e)},t.context)}}function xt(e,t){if(!t.data.staticStyle)return void Et(e,t);var n=t.elm,r=t.data.staticStyle;for(var o in r)r[o]&&n.setStyle(pr(o),r[o]);Et(e,t)}function Et(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=St(a)),s&&(a=t.data.style=f({},a));for(r in i)a[r]||o.setStyle(pr(r),"");for(r in a)n=a[r],o.setStyle(pr(r),n)}}function St(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function jt(){}function It(){}function At(e,t){var n=new tr.Comment("root");return n.hasAttribute=n.removeAttribute=function(){},t.documentElement.appendChild(n),n}function Tt(e){tr.Document=e.Document,tr.Element=e.Element,tr.Comment=e.Comment,tr.sendTasks=e.sendTasks}function Nt(){Rt(wr),Rt(Cr),Rt(kr),delete tr.Document,delete tr.Element,delete tr.Comment,delete tr.sendTasks,Be.config.isReservedTag=Or}function Rt(e){for(var t in e)delete e[t]}function Dt(e,t,n,r,o){void 0===t&&(t=""),void 0===n&&(n={}),void 0===o&&(o={}),br=e;var i=new tr.Document(e,n.bundleUrl),a=[],s=1;wr[e]={instanceId:e,config:n,data:r,document:i,callbacks:a,callbackId:s};var u=Vt(e),c=Ut(e,u),l={config:n,document:i,requireModule:u};Object.freeze(l);var f=Be.extend({});f.options._base=f,["util","set","delete","nextTick","version","weexVersion","config"].forEach(function(e){f[e]=Be[e]});var d=Object.assign({Vue:f,weex:l,__weex_require_module__:l.require},c);Jt(d,t),tr.sendTasks(e+"",[{module:"dom",method:"createFinish",args:[]}],-1)}function $t(e){var t=wr[e]||{};t.app instanceof Be&&t.app.$destroy(),delete wr[e]}function Pt(e,t){var n=wr[e]||{};if(!(n.app instanceof Be))return new Error("refreshInstance: instance "+e+" not found!");
-for(var r in t)Be.set(n.app,r,t[r]);tr.sendTasks(e+"",[{module:"dom",method:"refreshFinish",args:[]}],-1)}function Mt(e){var t=wr[e]||{};return t.app instanceof Be?t.app.$el.toJSON():new Error("getRoot: instance "+e+" not found!")}function Ft(e,t){var n=wr[e]||{};if(!(n.app instanceof Be))return new Error("receiveTasks: instance "+e+" not found!");var r=n.callbacks,o=n.document;t.forEach(function(e){if("fireEvent"===e.method){var t=e.args,n=t[0],i=t[1],a=t[2],s=t[3],u=o.getRef(n);o.fireEvent(u,i,a,s)}if("callback"===e.method){var c=e.args,l=c[0],f=c[1],d=c[2],p=r[l];"function"==typeof p&&(p(f),"undefined"!=typeof d&&d!==!1||(r[l]=void 0))}}),tr.sendTasks(e+"",[{module:"dom",method:"updateFinish",args:[]}],-1)}function qt(e){var t=function(t){Cr[t]||(Cr[t]={}),e[t].forEach(function(e){"string"==typeof e?Cr[t][e]=!0:Cr[t][e.name]=e.args})};for(var n in e)t(n)}function Lt(e){var t=Be.config,n={};if(Array.isArray(e)){e.forEach(function(e){e&&("string"==typeof e?(kr[e]=!0,n[e]=!0):"object"==typeof e&&"string"==typeof e.type&&(kr[e.type]=e,n[e.type]=!0))});var r=t.isReservedTag;t.isReservedTag=function(e){return n[e]||r(e)}}}function Vt(e){var t=wr[e];return function(n){var r=Cr[n]||[],o={},i=function(r){o[r]=function(){for(var o=arguments,i=[],a=arguments.length;a--;)i[a]=o[a];var s=i.map(function(e){return Bt(e,t)});tr.sendTasks(e+"",[{module:n,method:r,args:s}],-1)}};for(var a in r)i(a);return o}}function Ut(e,t){var n=wr[e],r=t("timer"),o={setTimeout:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setTimeout(i,t[1]),n.callbackId.toString()},setInterval:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setInterval(i,t[1]),n.callbackId.toString()},clearTimeout:function(e){r.clearTimeout(e)},clearInterval:function(e){r.clearInterval(e)}};return o}function Jt(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);n.push(t);var i=new(Function.prototype.bind.apply(Function,[null].concat(n)));return i.apply(void 0,r)}function Bt(e,t){var n=Wt(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof tr.Element?e.ref:e;case"function":return t.callbacks[++t.callbackId]=e,t.callbackId.toString();default:return JSON.stringify(e)}}function Wt(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}Object.defineProperty(t,"__esModule",{value:!0});var zt,Ht,Gt=o("slot,component",!0),Xt=Object.prototype.hasOwnProperty,Kt=/-(\w)/g,Qt=u(function(e){return e.replace(Kt,function(e,t){return t?t.toUpperCase():""})}),Zt=u(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),Yt=/([^-])([A-Z])/g,en=u(function(e){return e.replace(Yt,"$1-$2").replace(Yt,"$1-$2").toLowerCase()}),tn=Object.prototype.toString,nn="[object Object]",rn=function(){return!1},on=function(e){return e},an={optionMergeStrategies:Object.create(null),silent:!1,devtools:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:rn,isUnknownElement:rn,getTagNamespace:v,parsePlatformTagName:on,mustUseProp:rn,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100},sn=/[^\w.$]/,un="__proto__"in{},cn="undefined"!=typeof window,ln=cn&&window.navigator.userAgent.toLowerCase(),fn=ln&&/msie|trident/.test(ln),dn=ln&&ln.indexOf("msie 9.0")>0,pn=ln&&ln.indexOf("edge/")>0,hn=ln&&ln.indexOf("android")>0,vn=ln&&/iphone|ipad|ipod|ios/.test(ln),mn=function(){return void 0===zt&&(zt=!cn&&"undefined"!=typeof Wn&&"server"===Wn.process.env.VUE_ENV),zt},yn=cn&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,_n=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&C(Promise)){var o=Promise.resolve(),i=function(e){console.error(e)};t=function(){o.then(e).catch(i),vn&&setTimeout(v)}}else if("undefined"==typeof MutationObserver||!C(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var a=1,s=new MutationObserver(e),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),t=function(){a=(a+1)%2,u.data=String(a)}}return function(e,o){var i;if(n.push(function(){e&&e.call(o),i&&i(o)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){i=e})}}();Ht="undefined"!=typeof Set&&C(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return this.set[e]===!0},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var gn,bn=v,wn=0,Cn=function(){this.id=wn++,this.subs=[]};Cn.prototype.addSub=function(e){this.subs.push(e)},Cn.prototype.removeSub=function(e){i(this.subs,e)},Cn.prototype.depend=function(){Cn.target&&Cn.target.addDep(this)},Cn.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},Cn.target=null;var kn=[],On=Array.prototype,xn=Object.create(On);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=On[e];b(xn,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":i=o;break;case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var En=Object.getOwnPropertyNames(xn),Sn={shouldConvert:!0,isSettingProps:!1},jn=function(e){if(this.value=e,this.dep=new Cn,this.vmCount=0,b(e,"__ob__",this),Array.isArray(e)){var t=un?x:E;t(e,xn,En),this.observeArray(e)}else this.walk(e)};jn.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)j(e,t[n],e[t[n]])},jn.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)S(e[t])};var In=an.optionMergeStrategies;In.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,o="function"==typeof e?e.call(n):void 0;return r?N(r,o):o}:void 0:t?"function"!=typeof t?e:e?function(){return N(t.call(this),e.call(this))}:t:e},an._lifecycleHooks.forEach(function(e){In[e]=R}),an._assetTypes.forEach(function(e){In[e+"s"]=D}),In.watch=function(e,t){if(!t)return e;if(!e)return t;var n={};f(n,e);for(var r in t){var o=n[r],i=t[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):[i]}return n},In.props=In.methods=In.computed=function(e,t){if(!t)return e;if(!e)return t;var n=Object.create(null);return f(n,e),f(n,t),n};var An,Tn=function(e,t){return void 0===t?e:t},Nn=Object.freeze({defineReactive:j,_toString:n,toNumber:r,makeMap:o,isBuiltInTag:Gt,remove:i,hasOwn:a,isPrimitive:s,cached:u,camelize:Qt,capitalize:Zt,hyphenate:en,bind:c,toArray:l,extend:f,isObject:d,isPlainObject:p,toObject:h,noop:v,no:rn,identity:on,genStaticKeys:m,looseEqual:y,looseIndexOf:_,isReserved:g,def:b,parsePath:w,hasProto:un,inBrowser:cn,UA:ln,isIE:fn,isIE9:dn,isEdge:pn,isAndroid:hn,isIOS:vn,isServerRendering:mn,devtools:yn,nextTick:_n,get _Set(){return Ht},mergeOptions:M,resolveAsset:F,get warn(){return bn},get formatComponentName(){return gn},validateProp:q}),Rn=function(e,t,n,r,o,i,a){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=a,this.child=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},Dn=function(){var e=new Rn;return e.text="",e.isComment=!0,e},$n={init:X,prepatch:K,insert:Q,destroy:Z},Pn=Object.keys($n),Mn=1,Fn=2,qn=null,Ln=[],Vn={},Un=!1,Jn=!1,Bn=0,zn=0,Hn=function(e,t,n,r){this.vm=e,e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++zn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new Ht,this.newDepIds=new Ht,this.expression="","function"==typeof t?this.getter=t:(this.getter=w(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Hn.prototype.get=function(){k(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&Ie(e),O(),this.cleanupDeps(),e},Hn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Hn.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Hn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():je(this)},Hn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||d(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){if(!an.errorHandler)throw e;an.errorHandler.call(null,e,this.vm)}else this.cb.call(this.vm,e,t)}}},Hn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Hn.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Hn.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||i(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Gn=new Ht,Xn={enumerable:!0,configurable:!0,get:v,set:v},Kn=0;Ve(Be),qe(Be),Ce(Be),Oe(Be),me(Be);var Qn=[String,RegExp],Zn={name:"keep-alive",abstract:!0,props:{include:Qn,exclude:Qn},created:function(){this.cache=Object.create(null)},render:function(){var e=fe(this.$slots.default);if(e&&e.componentOptions){var t=e.componentOptions,n=t.Ctor.options.name||t.tag;if(n&&(this.include&&!Xe(this.include,n)||this.exclude&&Xe(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.child=this.cache[r].child:this.cache[r]=e,e.data.keepAlive=!0}return e},destroyed:function(){var e=this;for(var t in this.cache){var n=e.cache[t];xe(n.child,"deactivated"),n.child.$destroy()}}},Yn={KeepAlive:Zn};Ke(Be),Object.defineProperty(Be.prototype,"$isServer",{get:mn}),Be.version="2.1.8";var er=1,tr={TextNode:Qe,instances:{},modules:{},components:{}},nr={},rr=Object.freeze({namespaceMap:nr,createElement:Ze,createElementNS:Ye,createTextNode:et,createComment:tt,insertBefore:nt,removeChild:rt,appendChild:ot,parentNode:it,nextSibling:at,tagName:st,setTextContent:ut,setAttribute:ct}),or={create:function(e,t){lt(t)},update:function(e,t){e.data.ref!==t.data.ref&&(lt(e,!0),lt(t))},destroy:function(e){lt(e,!0)}},ir=new Rn("",{},[]),ar=["create","activate","update","remove","destroy"],sr={create:mt,update:mt,destroy:function(e){mt(e,ir)}},ur=Object.create(null),cr=[or,sr],lr={create:wt,update:wt},fr={create:Ct,update:Ct},dr={create:Ot,update:Ot},pr=u(Qt),hr={create:xt,update:Et},vr=[lr,fr,dr,hr],mr=vr.concat(cr),yr=vt({nodeOps:rr,modules:mr,LONG_LIST_THRESHOLD:10}),_r={},gr=o("div,img,image,input,switch,indicator,list,scroller,cell,template,text,slider,image");Be.config.isUnknownElement=It,Be.config.isReservedTag=gr,Be.config.mustUseProp=jt,Be.options.directives=_r,Be.prototype.__patch__=yr,Be.prototype.$mount=function(e,t){return this._mount(e&&At(e,this.$document),t)},Be.weexVersion="2.1.8-weex.1";var br,wr=tr.instances,Cr=tr.modules,kr=tr.components,Or=Be&&Be.config&&"function"==typeof Be.config.isReservedTag?Be.config.isReservedTag:function(){};Be.mixin({beforeCreate:function(){var e=this.$options,t=e.parent&&e.parent.$options||{};if(e.el){var n=wr[br]||{};this.$instanceId=br,e.instanceId=br,this.$document=n.document;var r=e.data,o=("function"==typeof r?r():r)||{};e.data=Object.assign(o,n.data),n.app=this,br=void 0}else this.$instanceId=e.instanceId=t.instanceId}}),Be.prototype.$getConfig=function(){var e=wr[this.$instanceId]||{};if(e.app instanceof Be)return e.config},t.Vue=Be,t.init=Tt,t.reset=Nt,t.createInstance=Dt,t.destroyInstance=$t,t.refreshInstance=Pt,t.getRoot=Mt,t.receiveTasks=Ft,t.registerModules=qt,t.registerComponents=Lt}),ku=e(Cu),Ou=Cu.registerComponents,xu=Cu.registerModules,Eu=Cu.receiveTasks,Su=Cu.getRoot,ju=Cu.refreshInstance,Iu=Cu.destroyInstance,Au=Cu.createInstance,Tu=Cu.reset,Nu=Cu.init,Ru=Cu.Vue,Du=Object.freeze({default:ku,__moduleExports:Cu,registerComponents:Ou,registerModules:xu,receiveTasks:Eu,getRoot:Su,refreshInstance:ju,destroyInstance:Iu,createInstance:Au,reset:Tu,init:Nu,Vue:Ru}),$u=Object.freeze({$:se,$el:ue,$vm:ce,$renderThen:le,$scrollTo:fe,$transition:de,$getConfig:pe,$sendHttp:he,$openURL:ve,$setTitle:me,$call:ye}),Pu=Object.prototype.hasOwnProperty,Mu=Object.prototype.toString,Fu="[object Object]",qu="__proto__"in{};"undefined"!=typeof Set&&Set.toString().match(/native code/)?au=Set:(au=function(){this.set=Object.create(null)},au.prototype.has=function(e){return void 0!==this.set[e]},au.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},au.prototype.clear=function(){this.set=Object.create(null)});var Lu=/^@weex-component\//,Vu=/^@weex-module\//,Uu=/^\.{1,2}\//,Ju=/\.js$/,Bu=function(e){return!!e.match(Lu)},Wu=function(e){return!!e.match(Vu)},zu=function(e){return!!e.match(Uu)},Hu=function(e){return!Bu(e)&&!Wu(e)&&!zu(e)},Gu=0;Ae.target=null;var Xu=[];Ae.prototype.addSub=function(e){this.subs.push(e)},Ae.prototype.removeSub=function(e){be(this.subs,e)},Ae.prototype.depend=function(){Ae.target&&Ae.target.addDep(this)},Ae.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var Ku=0;De.prototype.get=function(){Te(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&$e(e),Ne(),this.cleanupDeps(),e},De.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},De.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},De.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},De.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(ke(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},De.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},De.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},De.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||be(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1,this.vm=this.cb=this.value=null}};var Qu=Ee(),Zu=Array.prototype,Yu=Object.create(Zu);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=Zu[e];ge(Yu,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":i=o;break;case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})}),ge(Zu,"$set",function(e,t){return e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),ge(Zu,"$remove",function(e){this.length&&("number"!=typeof e&&(e=this.indexOf(e)),e>-1&&this.splice(e,1))});var ec=Object.getOwnPropertyNames(Yu);Pe.prototype.walk=function(e){var t=this;for(var n in e)t.convert(n,e[n])},Pe.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)qe(e[t])},Pe.prototype.convert=function(e,t){Le(this.value,e,t)},Pe.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},Pe.prototype.removeVm=function(e){be(this.vms,e)};var tc=["$index","$value","$event"],nc={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},rc=nc.nativeComponentMap,oc={attr:"setAttr",style:"setStyle",event:"addEvent"},ic=1,ac=["init","created","ready","destroyed"];Zt(Yt.prototype),Yt.prototype.$watch=function(e,t){pt(this,e,t)},Yt.set=Ve,Yt.delete=Ue;var sc={},uc=t(function(e,t){function n(e,t){if(e instanceof i)return e;if("string"!=typeof e)return null;if(e.length>G)return null;var n=t?K[pe]:K[le];if(!n.test(e))return null;try{return new i(e,t)}catch(e){return null}}function r(e,t){var r=n(e,t);return r?r.version:null}function o(e,t){var r=n(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null}function i(e,t){if(e instanceof i){if(e.loose===t)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>G)throw new TypeError("version is longer than "+G+" characters");if(!(this instanceof i))return new i(e,t);H("SemVer",e,t),this.loose=t;var n=e.trim().match(t?K[pe]:K[le]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>X||this.major<0)throw new TypeError("Invalid major version");if(this.minor>X||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>X||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<X)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}function a(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new i(e,n).inc(t,r).version}catch(e){return null}}function s(e,t){if(b(e,t))return null;var r=n(e),o=n(t);if(r.prerelease.length||o.prerelease.length){for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return"pre"+i;return"prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return i}function u(e,t){var n=qe.test(e),r=qe.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function c(e,t){return u(t,e)}function l(e,t){return new i(e,t).major}function f(e,t){return new i(e,t).minor}function d(e,t){return new i(e,t).patch}function p(e,t,n){return new i(e,n).compare(t)}function h(e,t){return p(e,t,!0)}function v(e,t,n){return p(t,e,n)}function m(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})}function y(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})}function _(e,t,n){return p(e,t,n)>0}function g(e,t,n){return p(e,t,n)<0}function b(e,t,n){return 0===p(e,t,n)}function w(e,t,n){return 0!==p(e,t,n)}function C(e,t,n){return p(e,t,n)>=0}function k(e,t,n){return p(e,t,n)<=0}function O(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=b(e,n,r);break;case"!=":o=w(e,n,r);break;case">":o=_(e,n,r);break;case">=":o=C(e,n,r);break;case"<":o=g(e,n,r);break;case"<=":o=k(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function x(e,t){if(e instanceof x){if(e.loose===t)return e;e=e.value}return this instanceof x?(H("comparator",e,t),this.loose=t,this.parse(e),this.semver===Le?this.value="":this.value=this.operator+this.semver.version,void H("comp",this)):new x(e,t)}function E(e,t){if(e instanceof E&&e.loose===t)return e;if(!(this instanceof E))return new E(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function S(e,t){return new E(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function j(e,t){return H("comp",e),e=N(e,t),H("caret",e),e=A(e,t),H("tildes",e),e=D(e,t),H("xrange",e),e=P(e,t),H("stars",e),e}function I(e){return!e||"x"===e.toLowerCase()||"*"===e}function A(e,t){return e.trim().split(/\s+/).map(function(e){return T(e,t)}).join(" ")}function T(e,t){var n=t?K[xe]:K[Oe];return e.replace(n,function(t,n,r,o,i){H("tilde",e,t,n,r,o,i);var a;return I(n)?a="":I(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":I(o)?a=">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":i?(H("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),a=">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0"):a=">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0",H("tilde return",a),a})}function N(e,t){return e.trim().split(/\s+/).map(function(e){return R(e,t)}).join(" ")}function R(e,t){H("caret",e,t);var n=t?K[Ae]:K[Ie];return e.replace(n,function(t,n,r,o,i){H("caret",e,t,n,r,o,i);var a;return I(n)?a="":I(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":I(o)?a="0"===n?">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":">="+n+"."+r+".0 <"+(+n+1)+".0.0":i?(H("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),a="0"===n?"0"===r?">="+n+"."+r+"."+o+i+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+i+" <"+(+n+1)+".0.0"):(H("no pr"),a="0"===n?"0"===r?">="+n+"."+r+"."+o+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+" <"+(+n+1)+".0.0"),H("caret return",a),a})}function D(e,t){return H("replaceXRanges",e,t),e.split(/\s+/).map(function(e){return $(e,t)}).join(" ")}function $(e,t){e=e.trim();var n=t?K[be]:K[ge];return e.replace(n,function(t,n,r,o,i,a){H("xRange",e,t,n,r,o,i,a);var s=I(r),u=s||I(o),c=u||I(i),l=c;return"="===n&&l&&(n=""),s?t=">"===n||"<"===n?"<0.0.0":"*":n&&l?(u&&(o=0),c&&(i=0),">"===n?(n=">=",u?(r=+r+1,o=0,i=0):c&&(o=+o+1,i=0)):"<="===n&&(n="<",u?r=+r+1:o=+o+1),t=n+r+"."+o+"."+i):u?t=">="+r+".0.0 <"+(+r+1)+".0.0":c&&(t=">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0"),H("xRange return",t),t})}function P(e,t){return H("replaceStars",e,t),e.trim().replace(K[Me],"")}function M(e,t,n,r,o,i,a,s,u,c,l,f,d){return t=I(n)?"":I(r)?">="+n+".0.0":I(o)?">="+n+"."+r+".0":">="+t,s=I(u)?"":I(c)?"<"+(+u+1)+".0.0":I(l)?"<"+u+"."+(+c+1)+".0":f?"<="+u+"."+c+"."+l+"-"+f:"<="+s,(t+" "+s).trim()}function F(e,t){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length){for(var n=0;n<e.length;n++)if(H(e[n].semver),e[n].semver!==Le&&e[n].semver.prerelease.length>0){var r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}function q(e,t,n){try{t=new E(t,n)}catch(e){return!1}return t.test(e)}function L(e,t,n){return e.filter(function(e){return q(e,t,n)}).sort(function(e,t){return v(e,t,n)})[0]||null}function V(e,t,n){return e.filter(function(e){return q(e,t,n)}).sort(function(e,t){return p(e,t,n)})[0]||null}function U(e,t){try{return new E(e,t).range||"*"}catch(e){return null}}function J(e,t,n){return W(e,t,"<",n)}function B(e,t,n){return W(e,t,">",n)}function W(e,t,n,r){e=new i(e,r),t=new E(t,r);var o,a,s,u,c;switch(n){case">":o=_,a=k,s=g,u=">",c=">=";break;case"<":o=g,a=C,s=_,u="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(q(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var f=t.set[l],d=null,p=null;if(f.forEach(function(e){e.semver===Le&&(e=new x(">=0.0.0")),d=d||e,p=p||e,o(e.semver,d.semver,r)?d=e:s(e.semver,p.semver,r)&&(p=e)}),d.operator===u||d.operator===c)return!1;if((!p.operator||p.operator===u)&&a(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}function z(e,t){var r=n(e,t);return r&&r.prerelease.length?r.prerelease:null}t=e.exports=i;var H;"object"==typeof process&&process.env,H=function(){},t.SEMVER_SPEC_VERSION="2.0.0";var G=256,X=Number.MAX_SAFE_INTEGER||9007199254740991,K=t.re=[],Q=t.src=[],Z=0,Y=Z++;Q[Y]="0|[1-9]\\d*";var ee=Z++;Q[ee]="[0-9]+";var te=Z++;Q[te]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var ne=Z++;Q[ne]="("+Q[Y]+")\\.("+Q[Y]+")\\.("+Q[Y]+")";var re=Z++;Q[re]="("+Q[ee]+")\\.("+Q[ee]+")\\.("+Q[ee]+")";var oe=Z++;Q[oe]="(?:"+Q[Y]+"|"+Q[te]+")";var ie=Z++;Q[ie]="(?:"+Q[ee]+"|"+Q[te]+")";var ae=Z++;Q[ae]="(?:-("+Q[oe]+"(?:\\."+Q[oe]+")*))";var se=Z++;Q[se]="(?:-?("+Q[ie]+"(?:\\."+Q[ie]+")*))";var ue=Z++;Q[ue]="[0-9A-Za-z-]+";var ce=Z++;Q[ce]="(?:\\+("+Q[ue]+"(?:\\."+Q[ue]+")*))";var le=Z++,fe="v?"+Q[ne]+Q[ae]+"?"+Q[ce]+"?";Q[le]="^"+fe+"$";var de="[v=\\s]*"+Q[re]+Q[se]+"?"+Q[ce]+"?",pe=Z++;Q[pe]="^"+de+"$";var he=Z++;Q[he]="((?:<|>)?=?)";var ve=Z++;Q[ve]=Q[ee]+"|x|X|\\*";var me=Z++;Q[me]=Q[Y]+"|x|X|\\*";var ye=Z++;Q[ye]="[v=\\s]*("+Q[me]+")(?:\\.("+Q[me]+")(?:\\.("+Q[me]+")(?:"+Q[ae]+")?"+Q[ce]+"?)?)?";var _e=Z++;Q[_e]="[v=\\s]*("+Q[ve]+")(?:\\.("+Q[ve]+")(?:\\.("+Q[ve]+")(?:"+Q[se]+")?"+Q[ce]+"?)?)?";var ge=Z++;Q[ge]="^"+Q[he]+"\\s*"+Q[ye]+"$";var be=Z++;Q[be]="^"+Q[he]+"\\s*"+Q[_e]+"$";var we=Z++;Q[we]="(?:~>?)";var Ce=Z++;Q[Ce]="(\\s*)"+Q[we]+"\\s+",K[Ce]=new RegExp(Q[Ce],"g");var ke="$1~",Oe=Z++;Q[Oe]="^"+Q[we]+Q[ye]+"$";var xe=Z++;Q[xe]="^"+Q[we]+Q[_e]+"$";var Ee=Z++;Q[Ee]="(?:\\^)";var Se=Z++;Q[Se]="(\\s*)"+Q[Ee]+"\\s+",K[Se]=new RegExp(Q[Se],"g");var je="$1^",Ie=Z++;Q[Ie]="^"+Q[Ee]+Q[ye]+"$";var Ae=Z++;Q[Ae]="^"+Q[Ee]+Q[_e]+"$";var Te=Z++;Q[Te]="^"+Q[he]+"\\s*("+de+")$|^$";var Ne=Z++;Q[Ne]="^"+Q[he]+"\\s*("+fe+")$|^$";var Re=Z++;Q[Re]="(\\s*)"+Q[he]+"\\s*("+de+"|"+Q[ye]+")",K[Re]=new RegExp(Q[Re],"g");var De="$1$2$3",$e=Z++;Q[$e]="^\\s*("+Q[ye]+")\\s+-\\s+("+Q[ye]+")\\s*$";var Pe=Z++;Q[Pe]="^\\s*("+Q[_e]+")\\s+-\\s+("+Q[_e]+")\\s*$";var Me=Z++;Q[Me]="(<|>)?=?\\s*\\*";for(var Fe=0;Fe<Z;Fe++)H(Fe,Q[Fe]),K[Fe]||(K[Fe]=new RegExp(Q[Fe]));t.parse=n,t.valid=r,t.clean=o,t.SemVer=i,i.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},i.prototype.toString=function(){return this.version},i.prototype.compare=function(e){return H("SemVer.compare",this.version,this.loose,e),e instanceof i||(e=new i(e,this.loose)),this.compareMain(e)||this.comparePre(e)},i.prototype.compareMain=function(e){return e instanceof i||(e=new i(e,this.loose)),u(this.major,e.major)||u(this.minor,e.minor)||u(this.patch,e.patch)},i.prototype.comparePre=function(e){var t=this;if(e instanceof i||(e=new i(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var n=0;do{var r=t.prerelease[n],o=e.prerelease[n];if(H("prerelease compare",n,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return u(r,o)}while(++n)},i.prototype.inc=function(e,t){var n=this;switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof n.prerelease[r]&&(n.prerelease[r]++,r=-2);r===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=a,t.diff=s,t.compareIdentifiers=u;var qe=/^[0-9]+$/;t.rcompareIdentifiers=c,t.major=l,t.minor=f,t.patch=d,t.compare=p,t.compareLoose=h,t.rcompare=v,t.sort=m,t.rsort=y,t.gt=_,t.lt=g,t.eq=b,t.neq=w,t.gte=C,t.lte=k,t.cmp=O,t.Comparator=x;var Le={};x.prototype.parse=function(e){var t=this.loose?K[Te]:K[Ne],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new i(n[2],this.loose):this.semver=Le},x.prototype.toString=function(){return this.value},x.prototype.test=function(e){return H("Comparator.test",e,this.loose),this.semver===Le||("string"==typeof e&&(e=new i(e,this.loose)),O(e,this.operator,this.semver,this.loose))},t.Range=E,E.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},E.prototype.toString=function(){return this.range},E.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),H("range",e,t);var n=t?K[Pe]:K[$e];e=e.replace(n,M),H("hyphen replace",e),e=e.replace(K[Re],De),H("comparator trim",e,K[Re]),e=e.replace(K[Ce],ke),e=e.replace(K[Se],je),e=e.split(/\s+/).join(" ");var r=t?K[Te]:K[Ne],o=e.split(" ").map(function(e){return j(e,t)}).join(" ").split(/\s+/);return this.loose&&(o=o.filter(function(e){return!!e.match(r)})),o=o.map(function(e){return new x(e,t)})},t.toComparators=S,E.prototype.test=function(e){var t=this;if(!e)return!1;"string"==typeof e&&(e=new i(e,this.loose));for(var n=0;n<this.set.length;n++)if(F(t.set[n],e))return!0;return!1},t.satisfies=q,t.maxSatisfying=L,t.minSatisfying=V,t.validRange=U,t.ltr=J,t.gtr=B,t.outside=W,t.prerelease=z}),cc=function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.debug("[JS Framework] define a component "+t);var o,i;if(i=n.length>1?n[1]:n[0],"function"==typeof i&&(o=i,i=null),o){var a=function(t){if(Bu(t)){var n=je(t);return rn(e,n)}if(Wu(t)){var r=je(t);return e.requireModule(r)}if(zu(t)||Hu(t)){var o=Ie(t);return e.commonModules[o]}},s={exports:{}};o(a,s.exports,s),i=s.exports}if(Bu(t)){var u=je(t);on(e,u,i)}else if(Wu(t)){var c,l=je(t);en((c={},c[l]=i,c))}else if(zu(t)){var f=Ie(t);e.commonModules[f]=i}else if(Hu(t)){var d=Ie(t);i.template||i.style||i.methods?on(e,d,i):e.commonModules[d]=i}},lc=function(e){this.id=e,this.map=[],this.hooks=[]};lc.prototype.isEmpty=function(){return 0===this.map.length},lc.prototype.append=function(e,t,n,r){var o=this;this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},lc.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){kn(e,"repeat"),kn(e,"shown"),On(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},lc.prototype.then=function(e){this.hooks.push(e)},xn.prototype.requireModule=function(e){return nn(this,e)},xn.prototype.updateActions=function(){return _n(this)},xn.prototype.callTasks=function(e){return gn(this,e)},Object.freeze(xn),Object.freeze(xn.prototype);var fc={},dc=nc.nativeComponentMap;global.registerMethods=Nn;var pc={fireEvent:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return mn.apply(void 0,[fc[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return yn.apply(void 0,[fc[e]].concat(t))}};Nn($u),Object.freeze(Yt);var hc=Object.freeze({registerComponents:An,registerModules:Tn,registerMethods:Nn,createInstance:En,init:Sn,refreshInstance:jn,destroyInstance:In,receiveTasks:Rn,getRoot:Dn}),vc=t(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n;for(var r in L)L.hasOwnProperty(r)&&(n=L[r],"*"!==t&&t!==n.origin||(e.target=n.window,n.window.dispatchEvent(e)))}function i(e){var t=L[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}function a(e){I=e.Document,A=e.Element,T=e.Comment,N=e.Listener,R=e.TaskCenter,D=e.CallbackManager,$=e.sendTasks}function s(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?S[e]=!0:"object"===("undefined"==typeof e?"undefined":k(e))&&"string"==typeof e.type&&(S[e.type]=e));
-})}function u(e){}function c(e){if("object"===("undefined"==typeof e?"undefined":k(e)))for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(j[t]=e[t])}function l(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1};return e}function f(e,t){if("object"===("undefined"==typeof j?"undefined":k(j))){var n=function(n){var r=P+n;e[r]={module:{exports:{}},isInitialized:!0},j[n].forEach(function(o){"string"==typeof o&&(o={name:o});var a=o.name;e[r].module.exports[a]=function(){for(var e=arguments,r=arguments.length,o=Array(r),s=0;s<r;s++)o[s]=e[s];var u=[];o.forEach(function(e,n){var r=o[n];u[n]=g(r,i(t))}),$(String(t),[{module:n,method:a,args:u}],"-1")}})};for(var r in j)n(r)}return e}function d(e,t,r,i,a){var s=L[e];if(void 0!=s)throw new Error('Instance id "'+e+'" existed when create instance');!function(){var u="object"===("undefined"==typeof WXEnvironment?"undefined":k(WXEnvironment))&&WXEnvironment||{},c=n(4)(),d=n(5)(),p=n(6)(),h=n(7)(),v=new I(e,r.bundleUrl,null,N),m=new d(v.URL),y={};s=L[e]={document:v,instanceId:e,modules:y,origin:m.origin,callbacks:[],uid:0},f(y,e);var _=n(8)(y),g=n(9)(y),b=n(10)(g);v.fonts={add:function(e){var t=g(F);t.addRule("fontFace",{fontFamily:e.family,src:e.source})}};var w=n(12)(g,c),x=w.fetch,S=w.Headers,j=w.Request,A=w.Response,T=n(13)(g,s),R=T.setTimeout,D=T.clearTimeout,$=T.setInterval,P=T.clearInterval,V=T.requestAnimationFrame,U=T.cancelAnimationFrame,J=new E.default,B={Promise:c,document:v,location:m,navigator:{product:"Weex",platform:u.platform,appName:u.appName,appVersion:u.appVersion},screen:{width:u.deviceWidth,height:u.deviceHeight,availWidth:u.deviceWidth,availHeight:u.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:u.scale,fetch:x,Headers:S,Response:A,Request:j,URL:d,URLSearchParams:p,FontFace:h,setTimeout:R,clearTimeout:D,setInterval:$,clearInterval:P,requestAnimationFrame:V,cancelAnimationFrame:U,alert:function(e){var t=g(M);t.alert({message:e},function(){})},open:function(e){var t=g(q);t.push({url:e,animated:"true"},function(e){})},postMessage:function(e,t){var n={origin:m.origin,data:JSON.parse(JSON.stringify(e)),type:"message",source:B};o(n,t)},addEventListener:function(e,t){J.on(e,t)},removeEventListener:function(e,t){J.off(e,t)},dispatchEvent:function(e){J.emit(e.type,e)},define:_,require:g,__weex_document__:v,__weex_define__:_,__weex_require__:g,__weex_downgrade__:b,__weex_env__:u,__weex_code__:t,__weex_options__:r,__weex_data__:i};s.window=B.self=B.window=B;var W={},z={};try{W=a.services.builtinGlobals,z=a.services.builtinModules}catch(e){}Object.assign(B,W);var H=C({},O.ModuleFactories,z);if(l(y,H,B),"Web"!==u.platform){var G=new Function('with (this) { (function(){ "use strict";'+t+"}).call(this); }");G.call(B)}else{var X=new Function('"use strict";'+t);X.call(B)}}()}function p(e,t){var n=i(e),r=n.document;r.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),r.listener.refreshFinish()}function h(e){var t=i(e),n=t.document;n.documentElement.fireEvent("destory",{timestamp:Date.now()}),n.destroy&&n.destroy(),delete L[e]}function v(e){var t=i(e),n=t.document;return n.toJSON?n.toJSON():{}}function m(e,t,n,r,o){if(Array.isArray(t))return void t.some(function(t){return m(e,t,n,r)!==!1});var i=e.getRef(t);if(i){var a=e.fireEvent(i,n,r,o);return e.listener.updateFinish(),a}return new Error('Invalid element reference "'+t+'"')}function y(e,t,n,r,o){var i=t[n];return"function"==typeof i?(i(r),"undefined"!=typeof o&&o!==!1||(t[n]=null),void e.listener.updateFinish()):new Error('Invalid callback id "'+n+'"')}function _(e,t){var n=i(e);if(Array.isArray(t)){var r=function(){var e=n.callbacks,r=n.document,o=[];return t.forEach(function(t){var n=void 0;if("fireEvent"===t.method){var i=w(t.args,4),a=i[0],s=i[1],u=i[2],c=i[3];n=m(r,a,s,u,c)}else if("callback"===t.method){var l=w(t.args,3),f=l[0],d=l[1],p=l[2];n=y(r,e,f,d,p)}o.push(n)}),{v:o}}();if("object"===("undefined"==typeof r?"undefined":k(r)))return r.v}}function g(e,t){var n=b(e);switch(n){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof A?e.ref:e;case"function":return t.callbacks[++t.uid]=e,t.uid.toString();default:return JSON.stringify(e)}}function b(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}Object.defineProperty(t,"__esModule",{value:!0});var w=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),C=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},k="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getInstance=i,t.init=a,t.registerComponents=s,t.registerMethods=u,t.registerModules=c,t.createInstance=d,t.refreshInstance=p,t.destroyInstance=h,t.getRoot=v,t.receiveTasks=_;var O=n(1),x=n(3),E=r(x),S={},j={},I=void 0,A=void 0,T=void 0,N=void 0,R=void 0,D=void 0,$=void 0,P="@weex-module/",M=P+"modal",F=P+"dom",q=P+"navigator",L={};t.default=t},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(2)}},function(e,t){e.exports=function(e,t,n){var r=this.__weex_document__,o=this.document;n.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.getDriver=t.setDriver=t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0;var r=n(1);Object.defineProperty(t,"createElement",{enumerable:!0,get:function(){return r.createElement}}),Object.defineProperty(t,"cloneElement",{enumerable:!0,get:function(){return r.cloneElement}}),Object.defineProperty(t,"isValidElement",{enumerable:!0,get:function(){return r.isValidElement}}),Object.defineProperty(t,"createFactory",{enumerable:!0,get:function(){return r.createFactory}});var o=n(5);Object.defineProperty(t,"setDriver",{enumerable:!0,get:function(){return o.setDriver}}),Object.defineProperty(t,"getDriver",{enumerable:!0,get:function(){return o.getDriver}}),n(12);var i=n(19),a=n(3).interopRequireDefault(i),s=n(20),u=n(3).interopRequireDefault(s),c=n(21),l=n(3).interopRequireDefault(c),f=n(22),d=n(3).interopRequireDefault(f),p=n(8),h=n(3).interopRequireDefault(p),v=n(15),m=n(3).interopRequireDefault(v),y=n(34),_=n(3).interopRequireDefault(y),g=n(7),b=n(3).interopRequireDefault(g),w=n(35),C=n(3).interopRequireDefault(w);t.Component=a.default,t.PureComponent=u.default,t.PropTypes=l.default,t.render=d.default,t.findDOMNode=h.default,t.unmountComponentAtNode=m.default,t.findComponentInstance=_.default,t.setNativeProps=b.default,t.version=C.default},function(e,t,n){function r(){if(p.default.component){var e=p.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)o(e[n],t);else t.push(e)}function i(e){if(null==e)return e;var t=[];return o(e,t),1===t.length&&(t=t[0]),t}function a(e){if(e){if(Array.isArray(e)){for(var t={},n=0;n<e.length;++n){var r=a(e[n]);if(r)for(var o in r)t[o]=r[o]}return t}return e}}function s(e,t){if(h.isWeex&&"text"===e){var n=t.children;n&&(Array.isArray(n)&&(n=n.join("")),t.children=null,t.value=n)}return t}function u(e,t){var o=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+r());var s={},u=void 0,c=null,l=null;if(null!=t){l=void 0===t.ref?null:t.ref,c=void 0===t.key?null:String(t.key);for(u in t)t.hasOwnProperty(u)&&!v.hasOwnProperty(u)&&(s[u]=t[u])}for(var f=arguments.length,d=Array(f>2?f-2:0),h=2;h<f;h++)d[h-2]=o[h];if(d.length&&(s.children=i(d)),e&&e.defaultProps){var y=e.defaultProps;for(u in y)void 0===s[u]&&(s[u]=y[u])}return s.style&&(Array.isArray(s.style)||"object"===n(3).typeof(s.style))&&(s.style=a(s.style)),new m(e,c,l,s,p.default.component)}function c(e){var t=u.bind(null,e);return t.type=e,t}function l(e,t){var n=arguments,r=Object.assign({},e.props),o=e.key,a=e.ref,s=e._owner;if(t){void 0!==t.ref&&(a=t.ref,s=p.default.component),void 0!==t.key&&(o=String(t.key));var u=void 0;e.type&&e.type.defaultProps&&(u=e.type.defaultProps);var c=void 0;for(c in t)t.hasOwnProperty(c)&&!v.hasOwnProperty(c)&&(void 0===t[c]&&void 0!==u?r[c]=u[c]:r[c]=t[c])}for(var l=arguments.length,f=Array(l>2?l-2:0),d=2;d<l;d++)f[d-2]=n[d];return f.length&&(r.children=i(f)),new m(e.type,o,a,r,s)}function f(e){return"object"===("undefined"==typeof e?"undefined":n(3).typeof(e))&&null!==e&&e.type&&e.props}Object.defineProperty(t,"__esModule",{value:!0}),t.createElement=u,t.createFactory=c,t.cloneElement=l,t.isValidElement=f;var d=n(2),p=n(3).interopRequireDefault(d),h=n(4),v={key:!0,ref:!0},m=function(e,t,n,r,o){return r=s(e,r),{type:e,key:t,ref:n,props:r,_owner:o}};t.default=m},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,driver:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{}}},function(e,t){t.interopRequireDefault=function(e){return e&&e.__esModule?e:{default:e}},t.typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t.createClass=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),t.classCallCheck=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},t.inherits=function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},t.possibleConstructorReturn=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"===n(3).typeof(Symbol.iterator)?function(e){return"undefined"==typeof e?"undefined":n(3).typeof(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":"undefined"==typeof e?"undefined":n(3).typeof(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":r(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode="undefined"!=typeof process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.injectDriver=t.getDriver=t.setDriver=void 0;var r=n(2),o=n(3).interopRequireDefault(r),i=n(6),a=n(3).interopRequireDefault(i),s=n(10),u=n(3).interopRequireDefault(s),c=n(4),l=t.setDriver=function(e){o.default.driver=e},f=t.getDriver=function(){return o.default.driver};t.injectDriver=function(){var e=f();if(!e){if(c.isWeex)e=a.default;else{if(!c.isWeb)throw Error("No builtin driver matched");e=u.default}l(e)}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=(n(3).interopRequireDefault(o),n(7)),a=n(3).interopRequireDefault(i),s=n(9),u="style",c="id",l="text",f=750,d=11,p={},h="object"===("undefined"==typeof r?"undefined":n(3).typeof(r))?r:"object"===("undefined"==typeof h?"undefined":n(3).typeof(h))?h:null,v={getElementById:function(e){return p[e]},getChildNodes:function(e){return e.children},createBody:function(){if(h.open(),h.body)return h.body;var e=h.documentElement,t=h.createBody();return e.appendChild(t),t},createFragment:function(){return{nodeType:d,childNodes:[]}},createComment:function(e){return h.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return v.createElement({type:l,props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=e.props,n={},r=t[u];for(var o in r)n[o]=(0,s.convertUnit)(r[o],o);var i=h.createElement(e.type,{style:n});return(0,a.default)(i,t,!0),i},appendChild:function(e,t){var n=this;return t.nodeType===d?t.childNodes.push(e):e.nodeType===d?e.childNodes.map(function(e){return n.appendChild(e,t)}):t.appendChild(e)},removeChild:function(e,t){var n=e.attr&&e.attr[c];return null!=n&&(p[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){var r=this;return e.nodeType===d?e.childNodes.map(function(o,i){return r.insertAfter(o,e.childNodes[i-1]||t,n)}):n.insertAfter(e,t)},insertBefore:function(e,t,n){var r=this;return e.nodeType===d?e.childNodes.map(function(e,o){return r.insertBefore(e,t,n)}):n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEvent(t,n)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return t==c&&(p[n]=null),e.setAttr(t,void 0)},setAttribute:function(e,t,n){return t==c&&(p[n]=e),e.setAttr(t,n)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,s.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){(0,s.setRem)(this.getWindowWidth()/f)},afterRender:function(){h&&h.listener&&h.listener.createFinish&&h.listener.createFinish(function(){h.close()})},getWindowWidth:function(){return f}};t.default=v},function(e,t,n){function r(e,t,n){e=(0,s.default)(e);for(var r in t){var o=t[r];if(r!==c&&null!=o)if(r===u){if(n)continue;i.default.driver.setStyles(e,o)}else if("on"===r.substring(0,2)){var a=r.slice(2).toLowerCase();i.default.driver.addEventListener(e,a,o)}else i.default.driver.setAttribute(e,r,o)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(2),i=n(3).interopRequireDefault(o),a=n(8),s=n(3).interopRequireDefault(a),u="style",c="children"},function(e,t,n){function r(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("Appears to be neither Component nor DOMNode.");var t=e._internal;if(t){for(;!t._nativeNode;)if(t=t._renderedComponent,null==t)return null;return t._nativeNode}throw new Error("findDOMNode was called on an unmounted component.")}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=n(3).interopRequireDefault(o);t.default=r},function(e,t){function n(e){return"string"==typeof e&&e.indexOf(c)!==-1}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:f;return e.replace(l,function(e){return parseFloat(e)*t+"px"})}function o(){return f}function i(e){f=e}function a(e,t){return"number"==typeof e&&!u[t]}function s(e,t){return t&&a(e,t)?e*f+"px":n(e)?r(e):e}Object.defineProperty(t,"__esModule",{value:!0}),t.isRem=n,t.calcRem=r,t.getRem=o,t.setRem=i,t.isUnitNumber=a,t.convertUnit=s;var u={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},c="rem",l=/[-+]?\d*\.?\d+rem/g,f=void 0},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(7),i=n(3).interopRequireDefault(r),a=n(9),s=n(11),u=n(3).interopRequireDefault(s),c=750,l="dangerouslySetInnerHTML",f={getElementById:function(e){return o.getElementById(e)},getChildNodes:function(e){return e.childNodes},createBody:function(){return o.body},createFragment:function(){return o.createDocumentFragment()},createComment:function(e){return o.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return o.createTextNode(e)},updateText:function(e,t){var n="textContent"in o?"textContent":"nodeValue";e[n]=t},createElement:function(e){var t=o.createElement(e.type),n=e.props;return(0,i.default)(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){e.parentNode===t&&t.removeChild(e)},replaceChild:function(e,t,n){n.replaceChild(e,t)},insertAfter:function(e,t,n){var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEventListener(t,n)},removeEventListener:function(e,t,n){return e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){"className"===t&&(t="class"),"input"!=e.nodeName.toLowerCase()||("checked"!=t||"checkbox"!==e.type&&"radio"!==e.type)&&"value"!=t?t===l?e.innerHTML=null:e.removeAttribute(t):e[t]=null},setAttribute:function(e,t,n){"className"===t&&(t="class"),"input"!=e.nodeName.toLowerCase()||("checked"!=t||"checkbox"!==e.type&&"radio"!==e.type)&&"value"!=t?t===l?e.innerHTML=n.__html:null!=n&&e.setAttribute(t,n):e[t]=n},setStyles:function(e,t){for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];u.default.isFlexProp(n)?u.default[n](r,e.style):e.style[n]=(0,a.convertUnit)(r,n)}},beforeRender:function(){(0,a.setRem)(this.getWindowWidth()/c)},getWindowWidth:function(){return o.documentElement.clientWidth}};t.default=f},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},r={row:"horizontal",column:"vertical"},o={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},i={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},a={isFlexProp:function(e){return i[e]},display:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return"flex"===e?(t.display="-webkit-box",t.display="-webkit-flex",t.display="flex"):t.display=e,t},flex:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.flexWrap=e,t},alignItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=n[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=r[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=o[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=a},function(e,t,n){var r=n(13),o=n(3).interopRequireDefault(r);"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(o.default)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(14),o=n(3).interopRequireDefault(r),i=n(2),a=n(3).interopRequireDefault(i);t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return o.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:a.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}}}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(1),a=n(15),s=n(3).interopRequireDefault(a),u=n(16),c=n(3).interopRequireDefault(u),l=n(17),f=n(3).interopRequireDefault(l),d=n(18),p=n(3).interopRequireDefault(d),h=n(13),v=n(3).interopRequireDefault(h),m="$$instance";t.default={set:function(e,t){e[m]||(e[m]=t,t.rootID&&(o.default.rootInstances[t.rootID]=t,o.default.rootComponents[t.rootID]=t._internal))},get:function(e){return e[m]},remove:function(e){var t=this.get(e);t&&(e[m]=null,t.rootID&&(delete o.default.rootComponents[t.rootID],delete o.default.rootInstances[t.rootID]))},render:function(e,t){var n=this.get(t),r=n&&n.isRootComponent;if(r){var o=n.getRenderedComponent(),a=o._currentElement;if((0,f.default)(a,e)){var u=o._context;return o.updateComponent(a,e,u,u),n}v.default.Reconciler.unmountComponent(n),(0,s.default)(t)}var l=(0,i.createElement)(p.default,null,e),d=(0,c.default)(l),h={},m=d.mountComponent(t,h);return this.set(t,m),v.default.Mount._renderNewRootComponent(m._internal),m}}},function(e,t,n){function r(e){var t=i.default.get(e);return!!t&&(i.default.remove(e),t._internal.unmountComponent(),!0)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(14),i=n(3).interopRequireDefault(o)},function(e,t,n){function r(e){var t=void 0;if(void 0===e||null===e||e===!1||e===!0)t=new i.default.EmptyComponent;else if(Array.isArray(e))t=new i.default.FragmentComponent(e);else if("object"===("undefined"==typeof e?"undefined":n(3).typeof(e))&&e.type)t="string"==typeof e.type?new i.default.NativeComponent(e):new i.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw Error("Invalid element type "+JSON.stringify(e));t=new i.default.TextComponent(e)}return t._mountIndex=0,t}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),i=n(3).interopRequireDefault(o);t.default=r},function(e,t,n){function r(e,t){var r=null===e,o=null===t;if(r||o)return r===o;var i="undefined"==typeof e?"undefined":n(3).typeof(e),a="undefined"==typeof t?"undefined":n(3).typeof(t);return"string"===i||"number"===i?"string"===a||"number"===a:"object"===i&&"object"===a&&e.type===t.type&&e.key===t.key}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),o=n(3).interopRequireDefault(r),i=1,a=function(e){function t(){var e,r,o,a,s=arguments;n(3).classCallCheck(this,t);for(var u=arguments.length,c=Array(u),l=0;l<u;l++)c[l]=s[l];return r=o=n(3).possibleConstructorReturn(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(c))),o.rootID=i++,a=r,n(3).possibleConstructorReturn(o,a)}return n(3).inherits(t,e),n(3).createClass(t,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),t}(o.default);t.default=a},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(t,r,o){n(3).classCallCheck(this,e),this.props=t,this.context=r,this.refs={},this.updater=o}return n(3).createClass(e,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),e}();t.default=r},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(19),o=n(3).interopRequireDefault(r),i=function(e){function t(e,r){return n(3).classCallCheck(this,t),n(3).possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,r))}return n(3).inherits(t,e),n(3).createClass(t,[{key:"isPureComponentClass",value:function(){}}]),t}(o.default);t.default=i},function(e,t){function n(e){function t(e,t,n,r,o,i){}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}function r(e){function t(e,t,n,r,o){}return n(t)}Object.defineProperty(t,"__esModule",{value:!0});var o=r();t.default={array:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,element:o,node:o,any:o,arrayOf:o,instanceOf:o,objectOf:o,oneOf:o,oneOfType:o,shape:o}},function(e,t,n){function r(e,t,n){(0,i.default)(),(0,u.injectDriver)();var r=(0,u.getDriver)();r.beforeRender&&r.beforeRender(e,t),null==t&&(t=r.createBody());var o=s.default.render(e,t),a=o.getPublicInstance();return n&&n.call(a),r.afterRender&&r.afterRender(a),a}Object.defineProperty(t,"__esModule",{value:!0});var o=n(23),i=n(3).interopRequireDefault(o),a=n(14),s=n(3).interopRequireDefault(a),u=(n(9),n(5));t.default=r},function(e,t,n){function r(){i.default.EmptyComponent=s.default,i.default.NativeComponent=c.default,i.default.TextComponent=f.default,i.default.FragmentComponent=v.default,i.default.CompositeComponent=p.default}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(2),i=n(3).interopRequireDefault(o),a=n(24),s=n(3).interopRequireDefault(a),u=n(25),c=n(3).interopRequireDefault(u),l=n(28),f=n(3).interopRequireDefault(l),d=n(29),p=n(3).interopRequireDefault(d),h=n(33),v=n(3).interopRequireDefault(h)},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=function(){function e(){n(3).classCallCheck(this,e),this._currentElement=null}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t;var r={_internal:this},i=this.getNativeNode();return n?n(i,e):o.default.driver.appendChild(i,e),r}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&o.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=i},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(26),a=n(3).interopRequireDefault(i),s=n(16),u=n(3).interopRequireDefault(s),c=n(17),l=n(3).interopRequireDefault(c),f=n(27),d=n(3).interopRequireDefault(f),p=n(14),h=n(3).interopRequireDefault(p),v=n(13),m=n(3).interopRequireDefault(v),y="style",_="children",g="tree",b=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r=this._currentElement.props,i=this._currentElement.type,s={_internal:this,type:i,props:r},u=r.append;this._instance=s,this._prevStyleCopy=Object.assign({},r.style);var c=this.getNativeNode();u!==g&&(n?n(c,e):o.default.driver.appendChild(c,e)),this._currentElement&&this._currentElement.ref&&a.default.attach(this._currentElement._owner,this._currentElement.ref,this);var l=r.children;return null!=l&&this.mountChildren(l,t),u===g&&(n?n(c,e):o.default.driver.appendChild(c,e)),m.default.Reconciler.mountComponent(this),s}},{key:"mountChildren",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r={},o=e.map(function(e,o){var i=(0,u.default)(e),a=(0,d.default)(r,e,o);r[a]=i,i._mountIndex=o;var s=i.mountComponent(n.getNativeNode(),t);return s});return this._renderedChildren=r,o}},{key:"unmountChildren",value:function(){var e=this._renderedChildren;if(e){for(var t in e){var n=e[t];n.unmountComponent()}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&a.default.detach(this._currentElement._owner,t,this),h.default.remove(this._nativeNode),e||o.default.driver.removeChild(this._nativeNode,this._parent),o.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(),m.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,a.default.update(e,t,this);var o=e.props,i=t.props;this.updateProperties(o,i),this.updateChildren(i.children,r),m.default.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,i=void 0,a=void 0;for(r in e)if(r!==_&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if(r===y){var s=n._prevStyleCopy;for(i in s)s.hasOwnProperty(i)&&(a=a||{},a[i]="");n._prevStyleCopy=null}else"on"===r.substring(0,2)?e[r]&&o.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],c=r===y?n._prevStyleCopy:null!=e?e[r]:void 0;if(r!==_&&t.hasOwnProperty(r)&&u!==c&&(null!=u||null!=c))if(r===y)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=c){for(i in c)!c.hasOwnProperty(i)||u&&u.hasOwnProperty(i)||(a=a||{},a[i]="");for(i in u)u.hasOwnProperty(i)&&c[i]!==u[i]&&(a=a||{},a[i]=u[i])}else a=u;else"on"===r.substring(0,2)?(null!=c&&o.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),c),null!=u&&o.default.driver.addEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),u)):null!=u?o.default.driver.setAttribute(n.getNativeNode(),r,u):o.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}a&&o.default.driver.setStyles(this.getNativeNode(),a)}},{key:"updateChildren",value:function(e,t){var n=this,r=this._renderedChildren;if(null!=e||null!=r){var i={},a={};if(null!=e){Array.isArray(e)||(e=[e]);for(var s=0,c=e.length;s<c;s++){var f=e[s],p=(0,d.default)(i,f,s),h=r&&r[p],v=h&&h._currentElement;if(null!=h&&(0,l.default)(v,f))h.updateComponent(v,f,t,t),i[p]=h;else{if(h){var m=h.getNativeNode();h.unmountComponent(!0),a[p]=m}i[p]=(0,u.default)(f)}}}if(null!=r)for(var y in r)if(r.hasOwnProperty(y)){var _=r[y];i[y]||_.unmountComponent()}null!=i&&!function(){var e=0,s=0,u=null,c=function(c){if(!i.hasOwnProperty(c))return"continue";var l=i[c],f=r&&r[c];f===l?(f._mountIndex<e&&o.default.driver.insertAfter(f.getNativeNode(),u,n.getNativeNode()),e=Math.max(f._mountIndex,e),f._mountIndex=s):(null!=f&&(e=Math.max(f._mountIndex,e)),l.mountComponent(n.getNativeNode(),t,function(e,t){var n=a[c];if(n)o.default.driver.replaceChild(e,n,t);else{var r=o.default.driver.getChildNodes(t),i=r[s];i?o.default.driver.insertBefore(e,i,t):o.default.driver.appendChild(e,t)}}),l._mountIndex=s),s++,u=l.getNativeNode()};for(var l in i){c(l)}}(),this._renderedChildren=i}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createElement(this._instance),h.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),e}();t.default=b},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){
-if("function"==typeof t)t(null);else{var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,s=void 0===e[a];return s||console.warn('Encountered two children with the same key "'+r+'".'),s?a:i}return i}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(13),a=n(3).interopRequireDefault(i),s=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t,this._stringText=String(t)}return n(3).createClass(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r=this.getNativeNode();n?n(r,e):o.default.driver.appendChild(r,e);var i={_internal:this};return a.default.Reconciler.mountComponent(this),i}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&o.default.driver.removeChild(this._nativeNode,this._parent),a.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),o.default.driver.updateText(this.getNativeNode(),t),a.default.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createText(this._stringText)),this._nativeNode}}]),e}();t.default=s},function(e,t,n){function r(e,t){try{return e()}catch(e){if(t)t(e);else{if(!c.default.sandbox)throw e;setTimeout(function(){throw e},0)}}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(30),i=n(3).interopRequireDefault(o),a=n(31),s=n(3).interopRequireDefault(a),u=n(2),c=n(3).interopRequireDefault(u),l=n(26),f=n(3).interopRequireDefault(l),d=n(16),p=n(3).interopRequireDefault(d),h=n(17),v=n(3).interopRequireDefault(h),m=n(32),y=n(3).interopRequireDefault(m),_=n(13),g=n(3).interopRequireDefault(_),b=function(){function e(t){n(3).classCallCheck(this,e),this._currentElement=t}return n(3).createClass(e,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=c.default.mountID++,this._updateCount=0;var o=this._currentElement.type,a=this._currentElement.props,u=o.prototype&&o.prototype.isComponentClass,l=o.prototype.render,d=this._processContext(t),h=void 0,v=void 0;if(u||l)h=new o(a,d,s.default);else{if("function"!=typeof o)throw Error("Invalid component type "+JSON.stringify(o));h=new i.default(o)}h.props=a,h.context=d,h.refs={},h.updater=s.default,h._internal=this,this._instance=h;var m=h.state;if(void 0===m&&(h.state=m=null),r(function(){h.componentWillMount&&h.componentWillMount()}),null==v){c.default.component=this,h.state=this._processPendingState(a,d);var y=void 0;"function"==typeof h.handleError&&(y=function(e){h.handleError(e)}),r(function(){v=h.render()},y),c.default.component=null}return this._renderedComponent=(0,p.default)(v),this._renderedComponent.mountComponent(this._parent,this._processChildContext(t),n),this._currentElement&&this._currentElement.ref&&f.default.attach(this._currentElement._owner,this._currentElement.ref,this),r(function(){h.componentDidMount&&h.componentDidMount()}),g.default.Reconciler.mountComponent(this),h}},{key:"unmountComponent",value:function(e){var t=this._instance;if(r(function(){t.componentWillUnmount&&t.componentWillUnmount()}),g.default.Reconciler.unmountComponent(this),t._internal=null,null!=this._renderedComponent){var n=this._currentElement.ref;n&&f.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return{};var r={};for(var o in n)r[o]=e[o];return r}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,o){var i=this,a=this._instance;a||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var s=!1,u=void 0,c=void 0;this._context===o?u=a.context:(u=this._processContext(o),s=!0),e===t?c=t.props:(c=t.props,s=!0),s&&a.componentWillReceiveProps&&(this._pendingState=!0,r(function(){a.componentWillReceiveProps(c,u)}),this._pendingState=!1),f.default.update(e,t,this);var l=!0,d=a.props,p=a.state,h=this._processPendingState(c,u);this._pendingForceUpdate||(a.shouldComponentUpdate?l=r(function(){return a.shouldComponentUpdate(c,h,u)}):a.isPureComponentClass&&(l=!(0,y.default)(d,c)||!(0,y.default)(p,h))),l?!function(){i._pendingForceUpdate=!1;var e=a.context;r(function(){a.componentWillUpdate&&a.componentWillUpdate(c,h,u)}),i._currentElement=t,i._context=o,a.props=c,a.state=h,a.context=u,i._updateRenderedComponent(o),r(function(){a.componentDidUpdate&&a.componentDidUpdate(d,p,e)}),i._updateCount++}():(this._currentElement=t,this._context=o,a.props=c,a.state=h,a.context=u),g.default.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this,n=this._renderedComponent,o=n._currentElement,i=this._instance,a=void 0;c.default.component=this,r(function(){a=i.render()}),c.default.component=null,(0,v.default)(o,a)?n.updateComponent(o,a,n._context,this._processChildContext(e)):!function(){var r=n.getNativeNode();n.unmountComponent(!0),t._renderedComponent=(0,p.default)(a),t._renderedComponent.mountComponent(t._parent,t._processChildContext(e),function(e,t){c.default.driver.replaceChild(e,r,t)})}()}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof i.default?null:e}}]),e}();t.default=b},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(t){n(3).classCallCheck(this,e),this.pureRender=t}return n(3).createClass(e,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),e}();t.default=r},function(e,t){function n(e,t){if(t){var n=e._pendingCallbacks||(e._pendingCallbacks=[]);n.push(t)}}function r(e,t){if(t){var n=e._pendingStateQueue||(e._pendingStateQueue=[]);n.push(t)}}Object.defineProperty(t,"__esModule",{value:!0});var o={setState:function(e,t,o){var i=e._internal;i&&(r(i,t),n(i,o),i._pendingState||this.runUpdate(e))},forceUpdate:function(e,t){var r=e._internal;r&&(r._pendingForceUpdate=!0,n(r,t),this.runUpdate(e))},runUpdate:function(e){var t=e._internal;if(t&&t._renderedComponent){var n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),n&&n.forEach(function(e){return e()})}}};t.default=o},function(e,t,n){function r(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==("undefined"==typeof e?"undefined":n(3).typeof(e))||null===e||"object"!==("undefined"==typeof t?"undefined":n(3).typeof(t))||null===t)return!1;var o=Object.keys(e),a=Object.keys(t);if(o.length!==a.length)return!1;for(var s=0;s<o.length;s++)if(!i.call(t,o[s])||!r(e[o[s]],t[o[s]]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0});var i=Object.prototype.hasOwnProperty;t.default=o},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(2),o=n(3).interopRequireDefault(r),i=n(25),a=n(3).interopRequireDefault(i),s=n(14),u=n(3).interopRequireDefault(s),c=n(16),l=n(3).interopRequireDefault(c),f=n(27),d=n(3).interopRequireDefault(f),p=n(13),h=n(3).interopRequireDefault(p),v=function(e){function t(e){return n(3).classCallCheck(this,t),n(3).possibleConstructorReturn(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return n(3).inherits(t,e),n(3).createClass(t,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=o.default.mountID++;var r={_internal:this};this._instance=r;var i=this.getNativeNode(),a=this._currentElement;return this.mountChildren(a,t),n?n(i,e):o.default.driver.appendChild(i,e),this._nativeNode=e,h.default.Reconciler.mountComponent(this),r}},{key:"mountChildren",value:function(e,t){var n=this,r={},i=this.getNativeNode(),a=e.map(function(e,a){var s=(0,l.default)(e),u=(0,d.default)(r,e,a);r[u]=s,s._mountIndex=a;var c=s.mountComponent(n._parent,t,function(e){o.default.driver.appendChild(e,i)});return c});return this._renderedChildren=r,a}},{key:"unmountComponent",value:function(e){this._nativeNode&&(u.default.remove(this._nativeNode),e||o.default.driver.removeChild(this._nativeNode,this._parent)),this.unmountChildren(),h.default.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r),h.default.Reconciler.receiveComponent(this)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=o.default.driver.createFragment(this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return null}},{key:"getName",value:function(){return"fragment"}}]),t}(a.default);t.default=v},function(e,t,n){function r(e){return null==e?null:i.default.get(e)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(14),i=n(3).interopRequireDefault(o);t.default=r},function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.1.0"}])}},function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),o=function(){function e(){n(this,e),this._listeners={}}return r(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length?t?(this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}),this):(delete this._listeners[e],this):this}},{key:"emit",value:function(e,t){var n=this;return this._listeners[e]?(this._listeners[e].forEach(function(r){r.listener.apply(n,[t]),r.once&&n.removeListener(e,r.listener)}),this):this}}]),e}();t.default=o},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(){}function r(e,t){return function(){e.apply(t,arguments)}}function o(e){if("object"!==f(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],l(e,this)}function i(e,t){for(;3===e._state;)e=e._value;return 0===e._state?void e._deferreds.push(t):(e._handled=!0,void d(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?a:s)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void s(t.promise,e)}a(t.promise,r)}))}function a(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===("undefined"==typeof t?"undefined":f(t))||"function"==typeof t)){var n=t.then;if(t instanceof o)return e._state=3,e._value=t,void u(e);if("function"==typeof n)return void l(r(n,t),e)}e._state=1,e._value=t,u(e)}catch(t){s(e,t)}}function s(e,t){e._state=2,e._value=t,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&d(function(){e._handled||p(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)i(e,e._deferreds[t]);e._deferreds=null}function c(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function l(e,t){var n=!1;try{e(function(e){n||(n=!0,a(t,e))},function(e){n||(n=!0,s(t,e))})}catch(e){if(n)return;n=!0,s(t,e)}}var f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},p=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};o.prototype.catch=function(e){return this.then(null,e)},o.prototype.then=function(e,t){var r=new this.constructor(n);return i(this,new c(e,t,r)),r},o.all=function(e){var t=Array.prototype.slice.call(e);return new o(function(e,n){function r(i,a){try{if(a&&("object"===("undefined"==typeof a?"undefined":f(a))||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(i,e)},n)}t[i]=a,0===--o&&e(t)}catch(e){n(e)}}if(0===t.length)return e([]);for(var o=t.length,i=0;i<t.length;i++)r(i,t[i])})},o.resolve=function(e){return e&&"object"===("undefined"==typeof e?"undefined":f(e))&&e.constructor===o?e:new o(function(t){t(e)})},o.reject=function(e){return new o(function(t,n){n(e)})},o.race=function(e){return new o(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},o._setImmediateFn=function(e){d=e},o._setUnhandledRejectionFn=function(e){p=e},e.exports=o}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e){return void 0!==l[e]}function r(){u.call(this),this._isInvalid=!0}function o(e){return""==e&&r.call(this),e.toLowerCase()}function i(e){var t=e.charCodeAt(0);return t>32&&t<127&&[34,35,60,62,63,96].indexOf(t)==-1?e:encodeURIComponent(e)}function a(e){var t=e.charCodeAt(0);return t>32&&t<127&&[34,35,60,62,96].indexOf(t)==-1?e:encodeURIComponent(e)}function s(e,t,s){function u(e){b.push(e)}var c=this,v=t||"scheme start",m=0,y="",_=!1,g=!1,b=[];e:for(;(e[m-1]!=d||0==m)&&!this._isInvalid;){var w=e[m];switch(v){case"scheme start":if(!w||!p.test(w)){if(t){u("Invalid scheme.");break e}y="",v="no scheme";continue}y+=w.toLowerCase(),v="scheme";break;case"scheme":if(w&&h.test(w))y+=w.toLowerCase();else{if(":"!=w){if(t){if(d==w)break e;u("Code point not allowed in scheme: "+w);break e}y="",m=0,v="no scheme";continue}if(c._scheme=y,y="",t)break e;n(c._scheme)&&(c._isRelative=!0),v="file"==c._scheme?"relative":c._isRelative&&s&&s._scheme==c._scheme?"relative or authority":c._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==w?v="query":"#"==w?(c._fragment="#",v="fragment"):d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._schemeData+=i(w));break;case"no scheme":if(s&&n(s._scheme)){v="relative";continue}u("Missing scheme."),r.call(c);break;case"relative or authority":if("/"!=w||"/"!=e[m+1]){u("Expected /, got: "+w),v="relative";continue}v="authority ignore slashes";break;case"relative":if(c._isRelative=!0,"file"!=c._scheme&&(c._scheme=s._scheme),d==w){c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query=s._query,c._username=s._username,c._password=s._password;break e}if("/"==w||"\\"==w)"\\"==w&&u("\\ is an invalid code point."),v="relative slash";else if("?"==w)c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query="?",c._username=s._username,c._password=s._password,v="query";else{if("#"!=w){var C=e[m+1],k=e[m+2];("file"!=c._scheme||!p.test(w)||":"!=C&&"|"!=C||d!=k&&"/"!=k&&"\\"!=k&&"?"!=k&&"#"!=k)&&(c._host=s._host,c._port=s._port,c._username=s._username,c._password=s._password,c._path=s._path.slice(),c._path.pop()),v="relative path";continue}c._host=s._host,c._port=s._port,c._path=s._path.slice(),c._query=s._query,c._fragment="#",c._username=s._username,c._password=s._password,v="fragment"}break;case"relative slash":if("/"!=w&&"\\"!=w){"file"!=c._scheme&&(c._host=s._host,c._port=s._port,c._username=s._username,c._password=s._password),v="relative path";continue}"\\"==w&&u("\\ is an invalid code point."),v="file"==c._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=w){u("Expected '/', got: "+w),v="authority ignore slashes";continue}v="authority second slash";break;case"authority second slash":if(v="authority ignore slashes","/"!=w){u("Expected '/', got: "+w);continue}break;case"authority ignore slashes":if("/"!=w&&"\\"!=w){v="authority";continue}u("Expected authority, got: "+w);break;case"authority":if("@"==w){_&&(u("@ already seen."),y+="%40"),_=!0;for(var O=0;O<y.length;O++){var x=y[O];if("\t"!=x&&"\n"!=x&&"\r"!=x)if(":"!=x||null!==c._password){var E=i(x);null!==c._password?c._password+=E:c._username+=E}else c._password="";else u("Invalid whitespace in authority.")}y=""}else{if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){m-=y.length,y="",v="host";continue}y+=w}break;case"file host":if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){2!=y.length||!p.test(y[0])||":"!=y[1]&&"|"!=y[1]?0==y.length?v="relative path start":(c._host=o.call(c,y),y="",v="relative path start"):v="relative path";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid whitespace in file host."):y+=w;break;case"host":case"hostname":if(":"!=w||g){if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w){if(c._host=o.call(c,y),y="",v="relative path start",t)break e;continue}"\t"!=w&&"\n"!=w&&"\r"!=w?("["==w?g=!0:"]"==w&&(g=!1),y+=w):u("Invalid code point in host/hostname: "+w)}else if(c._host=o.call(c,y),y="",v="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(w))y+=w;else{if(d==w||"/"==w||"\\"==w||"?"==w||"#"==w||t){if(""!=y){var S=parseInt(y,10);S!=l[c._scheme]&&(c._port=S+""),y=""}if(t)break e;v="relative path start";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid code point in port: "+w):r.call(c)}break;case"relative path start":if("\\"==w&&u("'\\' not allowed in path."),v="relative path","/"!=w&&"\\"!=w)continue;break;case"relative path":if(d!=w&&"/"!=w&&"\\"!=w&&(t||"?"!=w&&"#"!=w))"\t"!=w&&"\n"!=w&&"\r"!=w&&(y+=i(w));else{"\\"==w&&u("\\ not allowed in relative path.");var j;(j=f[y.toLowerCase()])&&(y=j),".."==y?(c._path.pop(),"/"!=w&&"\\"!=w&&c._path.push("")):"."==y&&"/"!=w&&"\\"!=w?c._path.push(""):"."!=y&&("file"==c._scheme&&0==c._path.length&&2==y.length&&p.test(y[0])&&"|"==y[1]&&(y=y[0]+":"),c._path.push(y)),y="","?"==w?(c._query="?",v="query"):"#"==w&&(c._fragment="#",v="fragment")}break;case"query":t||"#"!=w?d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._query+=a(w)):(c._fragment="#",v="fragment");break;case"fragment":d!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._fragment+=w)}m++}}function u(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function c(e,t){void 0===t||t instanceof c||(t=new c(String(t))),this._url=e,u.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");s.call(this,n,null,t)}var l=Object.create(null);l.ftp=21,l.file=0,l.gopher=70,l.http=80,l.https=443,l.ws=80,l.wss=443;var f=Object.create(null);f["%2e"]=".",f[".%2e"]="..",f["%2e."]="..",f["%2e%2e"]="..";var d=void 0,p=/[a-zA-Z]/,h=/[a-zA-Z0-9\+\-\.]/;c.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){u.call(this),s.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||s.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&s.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],s.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&(this._query="?","?"==e[0]&&(e=e.slice(1)),s.call(this,e,"query"))},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||(this._fragment="#","#"==e[0]&&(e=e.slice(1)),s.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return e=this.host,e?this._scheme+"://"+e:""}},e.exports=c}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e){return encodeURIComponent(e).replace(s,l)}function o(e){return decodeURIComponent(e.replace(u," "))}function i(){try{return!!Symbol.iterator}catch(e){return!1}}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=/[!'\(\)~]|%20|%00/g,u=/\+/g,c={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},l=function(e){return c[e]},f=i(),d="__URLSearchParams__",p=function(){function e(t){var r=this;if(n(this,e),this[d]=Object.create(null),t){"?"===t.charAt(0)&&(t=t.slice(1));for(var i,a,s=(t||"").split("&"),u=0,c=s.length;u<c;u++)a=s[u],i=a.indexOf("="),-1<i?r.append(o(a.slice(0,i)),o(a.slice(i+1))):a.length&&r.append(o(a),"")}}return a(e,[{key:"append",value:function(e,t){var n=this[d];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[d][e]}},{key:"get",value:function(e){var t=this[d];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[d];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[d]}},{key:"set",value:function(e,t){this[d][e]=[""+t]}},{key:"forEach",value:function(e,t){var n=this[d];Object.getOwnPropertyNames(n).forEach(function(r){n[r].forEach(function(n){e.call(t,n,r,this)},this)},this)}},{key:"keys",value:function(){var e=[];this.forEach(function(t,n){e.push(n)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"values",value:function(){var e=[];this.forEach(function(t){e.push(t)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"entries",value:function(){var e=[];this.forEach(function(t,n){e.push([n,t])});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"toString",value:function(){var e,t,n,o,i=this[d],a=[];for(t in i)for(n=r(t),e=0,o=i[t];e<o.length;e++)a.push(n+"="+r(o[e]));return a.join("&")}}]),e}();f&&(p.prototype[Symbol.iterator]=p.prototype.entries),e.exports=p}])}},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={exports:{},id:r,loaded:!1};return e[r].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="",t(0)}([function(e,t){function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var r=function e(t,r){n(this,e),this.family=t,this.source=r};e.exports=r}])}},function(e,t){e.exports=function(e){function t(t,n,r){n instanceof Function&&(r=n,n=[]),e[t]={factory:r,deps:n,module:{exports:{}},isInitialized:!1,hasError:!1}}return t}},function(e,t){e.exports=function(e){function t(n){var r=e[n];if(r&&r.isInitialized)return r.module.exports;if(!r)throw new Error('Requiring unknown module "'+n+'"');if(r.hasError)throw new Error('Requiring module "'+n+'" which threw an exception');try{r.isInitialized=!0,r.factory(t,r.module.exports,r.module)}catch(e){throw r.hasError=!0,r.isInitialized=!1,e}return r.module.exports}return t}},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if("*"==e)return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function i(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n},i=e.toLowerCase();return i.indexOf("osversion")>=0?r.code=1001:i.indexOf("appversion")>=0?r.code=1002:i.indexOf("weexversion")>=0?r.code=1003:i.indexOf("devicemodel")>=0&&(r.code=1004),r.errorMessage=o(e,t,n),r}function a(e){var t={isDowngrade:!1},n=WXEnvironment,r=n.platform||"unknow",a=r.toLowerCase(),s=e[a]||{};for(var c in n){var l=c,f=l.toLowerCase(),d=n[c],p=f.indexOf("version")>=0,h=f.indexOf("devicemodel")>=0,v=s[c];if(v&&p){var m=o(v),y=o(n[c]);if(u.default.satisfies(y,m)){t=i(l,d,v);break}}else if(h){var _=Array.isArray(v)?v:[v];if(_.indexOf(d)>=0){t=i(l,d,v);break}}}return t}var s=n(11),u=r(s);e.exports=function(e){return function(t){var n=e("@weex-module/instanceWrap"),r=a(t);return!!r.isDowngrade&&(n.error(r.errorType,r.code,r.errorMessage),!0)}}},function(e,t){Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){var r=/(\W+)?([\d|.]+)/;if(("undefined"==typeof e?"undefined":n(e))+("undefined"==typeof t?"undefined":n(t))!="stringstring")return!1;if("*"==t)return!0;for(var o=t.match(r),i=e.split("."),a=o[2].split("."),s=Math.max(i.length,a.length),u=0,c=0;c<s;c++){if(i[c]&&!a[c]&&parseInt(i[c])>0||parseInt(i[c])>parseInt(a[c])){u=1;break}if(a[c]&&!i[c]&&parseInt(a[c])>0||parseInt(i[c])<parseInt(a[c])){u=-1;break}}switch(o[1]){case"<":if(u===-1)return!0;break;case"<=":if(1!==u)return!0;break;case">":if(1===u)return!0;break;case">=":if(u!==-1)return!0;break;default:if(0===u)return!0}return!1}}},function(e,t){var n="@weex-module/stream";e.exports=function(e,t){function r(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function o(e){return"string"!=typeof e&&(e=String(e)),e}function i(e){this.originHeaders=e,this.map={},e instanceof i?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function a(e){return e.bodyUsed?t.reject(new TypeError("Already read")):void(e.bodyUsed=!0)}function s(){return this.bodyUsed=!1,this._initBody=function(e,t){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=a(this);return e?e:t.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}function u(e){var t=e.toUpperCase();return f.indexOf(t)>-1?t:e}function c(e,t){t=t||{};var n=t.body;if(c.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new i(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new i(t.headers)),this.method=u(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n,t)}function l(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new i(t.headers),this.url=t.url||"",this._initBody(e,t)}i.prototype.append=function(e,t){e=r(e),t=o(t);var n=this.map[e];this.map[e]=n?n+","+t:t},i.prototype.delete=function(e){delete this.map[r(e)]},i.prototype.get=function(e){return e=r(e),this.has(e)?this.map[e]:null},i.prototype.has=function(e){return this.map.hasOwnProperty(r(e))},i.prototype.set=function(e,t){this.map[r(e)]=[o(t)]},i.prototype.forEach=function(e,t){var n=this;for(var r in this.map)n.map.hasOwnProperty(r)&&e.call(t,n.map[r],r,n)};var f=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];c.prototype.clone=function(){return new c(this)},s.call(c.prototype),s.call(l.prototype),l.prototype.clone=function(){return new l(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new i(this.headers),url:this.url})},l.error=function(){var e=new l(null,{status:0,statusText:""});return e.type="error",e};var d=[301,302,303,307,308];l.redirect=function(e,t){if(d.indexOf(t)===-1)throw new RangeError("Invalid status code");return new l(null,{status:t,headers:{location:e}})};var p=function(r,o){return new t(function(t,i){var a;a=c.prototype.isPrototypeOf(r)&&!o?r:new c(r,o);var s={url:a.url,method:a.method,headers:a.headers&&a.headers.originHeaders};"undefined"!=typeof a._bodyInit&&(s.body=a._bodyInit),s.type=o&&o.dataType?o.dataType:"json";var u=e(n).fetch;u(s,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var n="string"==typeof e.data?e.data:JSON.stringify(e.data),r=new l(n,{status:e.status,statusText:e.statusText,headers:e.headers,url:a.url});t(r)}catch(e){i(e)}},function(e){})})};return{fetch:p,Headers:i,Request:c,Response:l}}},function(e,t){function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}var r="@weex-module/timer";e.exports=function(e,t){var o=function(){for(var o=arguments,i=arguments.length,a=Array(i),s=0;s<i;s++)a[s]=o[s];var u=e(r),c=function(){a[0].apply(a,n(a.slice(2)))};return u.setTimeout(c,a[1]),t.uid.toString()},i=function(){for(var o=arguments,i=arguments.length,a=Array(i),s=0;s<i;s++)a[s]=o[s];var u=e(r),c=function(){a[0].apply(a,n(a.slice(2)))};return u.setInterval(c,a[1]),t.uid.toString()},a=function(t){var n=e(r);n.clearTimeout(t)},s=function(t){var n=e(r);n.clearInterval(t)},u=function(n){var o=e(r);return o.setTimeout(n,16),t.uid.toString()},c=function(t){var n=e(r);n.clearTimeout(t)};return{setTimeout:o,clearTimeout:a,setInterval:i,clearInterval:s,requestAnimationFrame:u,cancelAnimationFrame:c}}}])}),mc=e(vc),yc={Vanilla:wu,Vue:Du,Rax:mc,Weex:hc},_c={},gc={};Pn.prototype.postMessage=function(e){var t=this;if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var n=_c[this.name];if(n&&n.length)for(var r=0;r<n.length;++r){
-var o=n[r];o._closed||o===t||"function"==typeof o.onmessage&&o.onmessage(new $n("message",{data:e}))}},Pn.prototype.close=function(){var e=this;if(!this._closed&&(this._closed=!0,_c[this.name])){var t=_c[this.name].filter(function(t){return t!==e});t.length?_c[this.name]=t:delete _c[this.name]}};var bc={create:function(e,t,n){if(gc[e]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(t){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(t)}),this._closed=!1,this.onmessage=null,_c[this.name]||(_c[this.name]=[]),_c[this.name].push(this),gc[e].push(this)}};return r.BroadcastChannel.prototype=Pn.prototype,{instance:r}},destroy:function(e,t){gc[e].forEach(function(e){return e.close()}),delete gc[e]}},wc={BroadcastChannel:bc},Cc=su.init,kc=su.config;kc.frameworks=yc;var Oc=Bn.native,xc=Bn.transformer;for(var Ec in wc)su.service.register(Ec,wc[Ec]);su.freezePrototype(),su.setNativeConsole(),global.frameworkVersion=Oc,global.transformerVersion=xc;var Sc=Cc(kc),jc=function(e){global[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=Sc[e].apply(Sc,t);return r instanceof Error&&console.error(r.toString()),r}};for(var Ic in Sc)jc(Ic);var Ac=Object.freeze({$userTrack:Mn,$sendMtop:Fn,$callWindvane:qn,$setSpm:Ln,$getUserInfo:Vn,$login:Un,$logout:Jn});global.registerMethods(Ac)});
+(this.nativeLog||function(e){console.log(e)})("START JS FRAMEWORK 0.20.6, Build 2017-04-24 21:17."),this.getJSFMVersion=function(){return"0.20.6"};var global=this,process={env:{}},setTimeout=global.setTimeout;!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t():"function"==typeof define&&define.amd?define(t):t()}(0,function(){"use strict";function e(e){return e&&e.__esModule?e.default:e}function t(e,t){return t={exports:{}},e(t,t.exports),t.exports}function n(){if(o(),void 0===global.console||global.WXEnvironment&&"iOS"===global.WXEnvironment.platform)global.console={debug:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&global.nativeLog.apply(global,a(e).concat(["__DEBUG"]))},log:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&global.nativeLog.apply(global,a(e).concat(["__LOG"]))},info:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&global.nativeLog.apply(global,a(e).concat(["__INFO"]))},warn:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&global.nativeLog.apply(global,a(e).concat(["__WARN"]))},error:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&global.nativeLog.apply(global,a(e).concat(["__ERROR"]))}};else{var e=console.debug,t=console.log,n=console.info,r=console.warn,s=console.error;console.__ori__={debug:e,log:t,info:n,warn:r,error:s},console.debug=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("debug")&&console.__ori__.debug.apply(console,e)},console.log=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("log")&&console.__ori__.log.apply(console,e)},console.info=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("info")&&console.__ori__.info.apply(console,e)},console.warn=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("warn")&&console.__ori__.warn.apply(console,e)},console.error=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];i("error")&&console.__ori__.error.apply(console,e)}}}function r(){xs={},global.console=Es}function o(){Ss.forEach(function(e){var t=Ss.indexOf(e);xs[e]={},Ss.forEach(function(n){Ss.indexOf(n)<=t&&(xs[e][n]=!0)})})}function i(e){var t=global.WXEnvironment&&global.WXEnvironment.logLevel||"log";return xs[t]&&xs[t][e]}function a(e){return e.map(function(e){return e="[object object]"===Object.prototype.toString.call(e).toLowerCase()?JSON.stringify(e):String(e)})}function s(){if(void 0===setTimeout&&"function"==typeof Cs){var e={},t=0;global.setTimeout=function(n,r){e[++t]=n,Cs(t.toString(),r)},global.setTimeoutCallback=function(t){"function"==typeof e[t]&&(e[t](),delete e[t])}}}function u(){global.setTimeout=ks,global.setTimeoutCallback=null}function c(){Object.freeze(Object),Object.freeze(Array),l(),Object.freeze(Array.prototype),Object.freeze(String.prototype),Object.freeze(Number.prototype),Object.freeze(Boolean.prototype),f(),Object.freeze(Date.prototype),Object.freeze(RegExp.prototype)}function l(){var e=Object.prototype,t="Object.prototype";d(e,"__defineGetter__",t),d(e,"__defineSetter__",t),d(e,"__lookupGetter__",t),d(e,"__lookupSetter__",t),d(e,"constructor",t),d(e,"hasOwnProperty",t),d(e,"isPrototypeOf",t),d(e,"propertyIsEnumerable",t),d(e,"toLocaleString",t),d(e,"toString",t),d(e,"valueOf",t),Object.seal(e)}function f(){var e=Error.prototype,t="Error.prototype";d(e,"name",t),d(e,"message",t),d(e,"toString",t),d(e,"constructor",t),Object.seal(e)}function d(e,t,n){if(e.hasOwnProperty(t)){var r=e[t];Object.defineProperty(e,t,{get:function(){return r},set:function(r){if(this===e)throw Error("Cannot assign to read only property "+t+" of "+n);return Object.defineProperty(this,t,{value:r,writable:!0}),r}})}}function p(e,t){e&&(As[e]=t)}function h(e){return As[e]}function v(e){delete As[e]}function m(e){var t=As[e];return t&&t.taskCenter?t.taskCenter:null}function y(){return(Is++).toString()}function _(e,t,n){var r=e.documentElement;if(!(r.pureChildren.length>0||t.parentNode)){var o=r.children,i=o.indexOf(n);i<0?o.push(t):o.splice(i,0,t),1===t.nodeType?("body"===t.role?(t.docId=e.id,t.ownerDocument=e,t.parentNode=r,w(t,r)):(t.children.forEach(function(e){e.parentNode=t}),b(e,t),t.docId=e.id,t.ownerDocument=e,w(t,r),delete e.nodeMap[t.nodeId]),r.pureChildren.push(t),g(e,t)):(t.parentNode=r,e.nodeMap[t.ref]=t)}}function g(e,t){var n=t.toJSON(),r=n.children;delete n.children;var o=e.taskCenter.send("dom",{action:"createBody"},[n]);return r&&r.forEach(function(t){o=e.taskCenter.send("dom",{action:"addElement"},[n.ref,t,-1])}),o}function b(e,t){t.role="body",t.depth=1,delete e.nodeMap[t.nodeId],t.ref="_root",e.nodeMap._root=t,e.body=t}function w(e,t){e.parentNode=t,t.docId&&(e.docId=t.docId,e.ownerDocument=t.ownerDocument,e.ownerDocument.nodeMap[e.nodeId]=e,e.depth=t.depth+1),e.children.forEach(function(t){w(t,e)})}function O(e){for(;e;){if(1===e.nodeType)return e;e=e.nextSibling}}function S(e){for(;e;){if(1===e.nodeType)return e;e=e.previousSibling}}function x(e,t,n,r){n<0&&(n=0);var o=t[n-1],i=t[n];return t.splice(n,0,e),r&&(o&&(o.nextSibling=e),e.previousSibling=o,e.nextSibling=i,i&&(i.previousSibling=e)),n}function E(e,t,n,r){var o=t.indexOf(e);if(o<0)return-1;if(r){var i=t[o-1],a=t[o+1];i&&(i.nextSibling=a),a&&(a.previousSibling=i)}t.splice(o,1);var s=n;o<=n&&(s=n-1);var u=t[s-1],c=t[s];return t.splice(s,0,e),r&&(u&&(u.nextSibling=e),e.previousSibling=u,e.nextSibling=c,c&&(c.previousSibling=e)),o===s?-1:n}function k(e,t,n){var r=t.indexOf(e);if(!(r<0)){if(n){var o=t[r-1],i=t[r+1];o&&(o.nextSibling=i),i&&(i.previousSibling=o)}t.splice(r,1)}}function C(){this.nodeId=y(),this.ref=this.nodeId,this.children=[],this.pureChildren=[],this.parentNode=null,this.nextSibling=null,this.previousSibling=null}function j(e,t){if(t&&t.length){var n=function(t){Ts.call(this,e,t,!0)};n.prototype=Object.create(Ts.prototype),Object.defineProperty(n.prototype,"constructor",{configurable:!1,enumerable:!1,writable:!1,value:Ts}),t.forEach(function(t){n.prototype[t]=function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];var o=m(this.docId);if(o)return o.send("component",{ref:this.ref,component:e,method:t},n)}}),Ps[e]=n}}function A(e,t,n){void 0===e&&(e=Ns);var r=Ps[e];if(r&&!n)return new r(t);t=t||{},this.nodeType=1,this.nodeId=y(),this.ref=this.nodeId,this.type=e,this.attr=t.attr||{},this.style=t.style||{},this.classStyle=t.classStyle||{},this.event={},this.children=[],this.pureChildren=[]}function I(e,t){h(e).nodeMap[t.nodeId]=t}function T(){var e={createFinish:global.callCreateFinish,updateFinish:global.callUpdateFinish,refreshFinish:global.callRefreshFinish,createBody:global.callCreateBody,addElement:global.callAddElement,removeElement:global.callRemoveElement,moveElement:global.callMoveElement,updateAttrs:global.callUpdateAttrs,updateStyle:global.callUpdateStyle,addEvent:global.callAddEvent,removeEvent:global.callRemoveEvent},t=$s.prototype;for(var n in e)!function(n){var r=e[n];t[n]=r?function(e,t){return r.apply(void 0,[e].concat(t))}:function(e,t){return Ms(e,[{module:"dom",method:n,args:t}],"-1")}}(n);t.componentHandler=global.callNativeComponent||function(e,t,n,r,o){return Ms(e,[{component:o.component,ref:t,method:n,args:r}])},t.moduleHandler=global.callNativeModule||function(e,t,n,r){return Ms(e,[{module:t,method:n,args:r}])}}function P(e,t){M(e)?console.warn('Service "'+e+'" has been registered already!'):(t=Object.assign({},t),Fs.push({name:e,options:t}))}function N(e){Fs.some(function(t,n){if(t.name===e)return Fs.splice(n,1),!0})}function M(e){return $(e)>=0}function $(e){return Fs.map(function(e){return e.name}).indexOf(e)}function R(e){var t,n=Ls.exec(e);if(n)try{t=JSON.parse(n[1])}catch(e){}return t}function D(e,t,n){var r=Object.create(null);return r.service=Object.create(null),Fs.forEach(function(o){var i=(o.name,o.options),a=i.create;if(a){var s=a(e,t,n);Object.assign(r.service,s),Object.assign(r,s.instance)}}),delete r.service.instance,Object.freeze(r.service),r}function F(e,t,n,r){var o=Bs[e];if(!o){o=R(t)||{},Rs[o.framework]||(o.framework="Weex"),n=JSON.parse(JSON.stringify(n||{})),n.bundleVersion=o.version,n.env=JSON.parse(JSON.stringify(global.WXEnvironment||{})),console.debug("[JS Framework] create an "+o.framework+"@"+n.bundleVersion+" instance from "+n.bundleVersion);var i={info:o,config:n,created:Date.now(),framework:o.framework};return i.services=D(e,i,Ds),Bs[e]=i,Rs[o.framework].createInstance(e,t,n,r,i)}return new Error('invalid instance id "'+e+'"')}function L(e){Us[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];"registerComponents"===e&&B(t[0]);for(var r in Rs){var o=Rs[r];o&&o[e]&&o[e].apply(o,t)}}}function B(e){Array.isArray(e)&&e.forEach(function(e){e&&e.type&&e.methods&&j(e.type,e.methods)})}function U(e){Us[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Bs[r];if(o&&Rs[o.framework]){var i=(a=Rs[o.framework])[e].apply(a,t);return"refreshInstance"===e?Fs.forEach(function(e){var t=e.options.refresh;t&&t(r,{info:o,runtime:Ds})}):"destroyInstance"===e&&(Fs.forEach(function(e){var t=e.options.destroy;t&&t(r,{info:o,runtime:Ds})}),delete Bs[r]),i}return new Error('invalid instance id "'+r+'"');var a}}function V(e,t){Us[t]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=t[0],o=Bs[r];return o&&Rs[o.framework]?(i=Rs[o.framework])[e].apply(i,t):new Error('invalid instance id "'+r+'"');var i}}function z(e){Ds=e||{},Rs=Ds.frameworks||{},T();for(var t in Rs){Rs[t].init(e)}return["registerComponents","registerModules","registerMethods"].forEach(L),["destroyInstance","refreshInstance","receiveTasks","getRoot"].forEach(U),V("receiveTasks","callJS"),Us}function W(e){this.nodeType=8,this.nodeId=y(),this.ref=this.nodeId,this.type="comment",this.value=e,this.children=[],this.pureChildren=[]}function q(e,t){this.id=e,this.batched=!1,this.updates=[],"function"==typeof t?Object.defineProperty(this,"handler",{configurable:!0,enumerable:!0,writable:!0,value:t}):console.error("[JS Runtime] invalid parameter, handler must be a function")}function J(e,t){return void 0===t&&(t=[]),{module:"dom",method:e,args:t}}function H(e,t){var n=t||global.callNative;return"function"!=typeof n&&console.error("[JS Runtime] no default handler"),function(t){Array.isArray(t)||(t=[t]);for(var r=0;r<t.length;r++){var o=X(e,t[r],n);if(-1===o)return o}}}function G(e,t){return"dom"===e&&Vs[t]&&"function"==typeof global[Vs[t]]}function X(e,t,n){var r=t.module,o=t.method,i=t.args;return G(r,o)?global[Vs[o]].apply(global,[e].concat(i,["-1"])):n(e,[t],"-1")}function K(e,t,n){e=e?e.toString():"",this.id=e,this.URL=t,p(e,this),this.nodeMap={};var r=K.Listener||q;this.listener=new r(e,n||H(e,K.handler)),this.taskCenter=new $s(e,n?function(e){for(var t=[],r=arguments.length-1;r-- >0;)t[r]=arguments[r+1];return n.apply(void 0,t)}:K.handler),this.createDocumentElement()}function Z(e,t){var n=t.attrs||{};for(var r in n)e.setAttr(r,n[r],!0);var o=t.style||{};for(var i in o)e.setStyle(i,o[i],!0)}function Q(){c(),Object.freeze(zs.Element),Object.freeze(zs.Comment),Object.freeze(zs.Listener),Object.freeze(zs.Document.prototype),Object.freeze(zs.Element.prototype),Object.freeze(zs.Comment.prototype),Object.freeze(zs.Listener.prototype)}function Y(e){Js.Document=e.Document,Js.Element=e.Element,Js.Comment=e.Comment,Js.sendTasks=e.sendTasks}function ee(e){}function te(e){}function ne(e){}function re(e,t,n){}function oe(e,t,n,r,o){var i=new Js.Document(e,n.bundleUrl),a={},s=0;i.addCallback=function(e){return s++,a[s]=e,s},i.handleCallback=function(e,t,n){var r=a[e];return n&&delete a[e],r(t)},Hs[e]=i;var u=Object.assign({Document:Js.Document,Element:Js.Element,Comment:Js.Comment,sendTasks:Js.sendTasks,id:e,options:n,data:r,document:i},o),c=[],l=[];for(var f in u)c.push(f),l.push(u[f]);return c.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(c)))).apply(void 0,l)}function ie(e,t){}function ae(e){delete Hs[e]}function se(e){return Hs[e].body.toJSON()}function ue(e,t){var n={fireEvent:function(e,t,n,r,o){var i=Hs[e],a=i.getRef(t);return i.fireEvent(a,n,r,o)},callback:function(e,t,n,r){return Hs[e].handleCallback(t,n,r)}};if(Hs[e]&&Array.isArray(t)){var r=[];return t.forEach(function(t){var o=n[t.method],i=[].concat(t.args);"function"==typeof o&&(i.unshift(e),r.push(o.apply(void 0,i)))}),r}}function ce(e){console.warn("[JS Framework] Vm#$ is deprecated, please use Vm#$vm instead");var t=this._ids[e];if(t)return t.vm}function le(e){var t=this._ids[e];if(t)return t.el}function fe(e){var t=this._ids[e];if(t)return t.vm}function de(e){return this._app.differ.then(function(){e()})}function pe(e,t){console.warn("[JS Framework] Vm#$scrollTo is deprecated, please use \"require('@weex-module/dom').scrollTo(el, options)\" instead");var n=this.$el(e);if(n){this._app.requireModule("dom").scrollToElement(n.ref,{offset:t})}}function he(e,t,n){var r=this,o=this.$el(e);if(o&&t&&t.styles){this._app.requireModule("animation").transition(o.ref,t,function(){for(var e=[],i=arguments.length;i--;)e[i]=arguments[i];r._setStyle(o,t.styles),n&&n.apply(void 0,e)})}}function ve(e){var t=this._app.options;return"function"==typeof e&&(console.warn("[JS Framework] the callback of Vm#$getConfig(callback) is deprecated, this api now can directly RETURN config info."),e(t)),t}function me(e,t){console.warn("[JS Framework] Vm#$sendHttp is deprecated, please use \"require('@weex-module/stream').sendHttp(params, callback)\" instead"),this._app.requireModule("stream").sendHttp(e,t)}function ye(e){console.warn("[JS Framework] Vm#$openURL is deprecated, please use \"require('@weex-module/event').openURL(url)\" instead"),this._app.requireModule("event").openURL(e)}function _e(e){console.warn("[JS Framework] Vm#$setTitle is deprecated, please use \"require('@weex-module/pageInfo').setTitle(title)\" instead"),this._app.requireModule("pageInfo").setTitle(e)}function ge(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.warn("[JS Framework] Vm#$call is deprecated, please use \"require('@weex-module/moduleName')\" instead");var o=this._app.requireModule(e);o&&o[t]&&o[t].apply(o,n)}function be(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];if("function"==typeof Object.assign)Object.assign.apply(Object,[e].concat(t));else{var r=t.shift();for(var o in r)e[o]=r[o];t.length&&be.apply(void 0,[e].concat(t))}return e}function we(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function Oe(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function Se(e,t){return bu.call(e,t)}function xe(e,t){return function(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}}function Ee(e){return null!==e&&"object"==typeof e}function ke(e){return wu.call(e)===Ou}function Ce(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function je(){return"object"==typeof nativeSet?nativeSet.create():new Ws}function Ae(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()}function Ie(e){return e.replace(xu,"").replace(Eu,"")}function Te(e){return e.replace(ku,"")}function Pe(){this.id=Tu++,this.subs=[]}function Ne(e){Pe.target&&Pu.push(Pe.target),Pe.target=e}function Me(){Pe.target=Pu.pop()}function $e(){Pe.target=null,Pu=[]}function Re(e,t,n,r){r&&be(this,r);var o="function"==typeof t;this.vm=e,e._watchers.push(this),this.expression=t,this.cb=n,this.id=++Nu,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=je(),this.newDepIds=je(),o&&(this.getter=t),this.value=this.lazy?void 0:this.get(),this.queued=this.shallow=!1}function De(e,t){var n,r,o,i;if(t||(t=Mu,t.clear()),o=Array.isArray(e),i=Ee(e),o||i){if(e.__ob__){var a=e.__ob__.dep.id;if(t.has(a))return;t.add(a)}if(o)for(n=e.length;n--;)De(e[n],t);else if(i)for(r=Object.keys(e),n=r.length;n--;)De(e[r[n]],t)}}function Fe(e){if(this.value=e,this.dep=new Pe,we(e,"__ob__",this),Array.isArray(e)){(Su?Le:Be)(e,Ru,Du),this.observeArray(e)}else this.walk(e)}function Le(e,t){e.__proto__=t}function Be(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];we(e,i,t[i])}}function Ue(e,t){if(Ee(e)){var n;return Se(e,"__ob__")&&e.__ob__ instanceof Fe?n=e.__ob__:(Array.isArray(e)||ke(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Fe(e)),n&&t&&n.addVm(t),n}}function Ve(e,t,n){var r=new Pe,o=Object.getOwnPropertyDescriptor(e,t);if(!o||!1!==o.configurable){var i=o&&o.get,a=o&&o.set,s=Ue(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=i?i.call(e):n;if(Pe.target&&(r.depend(),s&&s.dep.depend(),Array.isArray(t)))for(var o=void 0,a=0,u=t.length;a<u;a++)(o=t[a])&&o.__ob__&&o.__ob__.dep.depend();return t},set:function(t){t!==(i?i.call(e):n)&&(a?a.call(e,t):n=t,s=Ue(t),r.notify())}})}}function ze(e,t,n){if(Array.isArray(e))return e.splice(t,1,n);if(Se(e,t))return void(e[t]=n);if(e._isVue)return void ze(e._data,t,n);var r=e.__ob__;if(!r)return void(e[t]=n);if(r.convert(t,n),r.dep.notify(),r.vms)for(var o=r.vms.length;o--;){var i=r.vms[o];qe(i,t)}return n}function We(e,t){if(Se(e,t)){delete e[t];var n=e.__ob__;if(!n)return void(e._isVue&&delete e._data[t]);if(n.dep.notify(),n.vms)for(var r=n.vms.length;r--;){var o=n.vms[r];Je(o,t)}}}function qe(e,t){(Fu.indexOf(t)>-1||!Ce(t))&&Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get:function(){return e._data[t]},set:function(n){e._data[t]=n}})}function Je(e,t){Ce(t)||delete e[t]}function He(e){e._watchers=[],Ge(e),Ke(e),Qe(e)}function Ge(e){var t=e._data;ke(t)||(t={});for(var n=Object.keys(t),r=n.length;r--;)qe(e,n[r]);Ue(t,e)}function Xe(){}function Ke(e){var t=e._computed;if(t)for(var n in t){var r=t[n],o={enumerable:!0,configurable:!0};"function"==typeof r?(o.get=Ze(r,e),o.set=Xe):(o.get=r.get?!1!==r.cache?Ze(r.get,e):xe(r.get,e):Xe,o.set=r.set?xe(r.set,e):Xe),Object.defineProperty(e,n,o)}}function Ze(e,t){var n=new Re(t,e,null,{lazy:!0});return function(){return n.dirty&&n.evaluate(),Pe.target&&n.depend(),n.value}}function Qe(e){var t=e._methods;if(t)for(var n in t)e[n]=t[n]}function Ye(e){var t=e.type,n=Bu[t];if("object"==typeof n)for(var r in n)if(null==e[r])e[r]=n[r];else if("object"===Ae(e[r])&&"object"===Ae(n[r]))for(var o in n[r])null==e[r][o]&&(e[r][o]=n[r][o])}function et(e,t,n){at(e,t,n.id,e),st(e,t,n.attr),ct(e,t,n.classList),lt(e,t,n.style),dt(e,t,n.events)}function tt(e,t,n,r){t=t||{},n=n||{};var o=t._options||{},i=o.props;Array.isArray(i)&&(i=i.reduce(function(e,t){return e[t]=!0,e},{})),rt(r,i,e,t),rt(n.attr,i,e,t)}function nt(e,t,n,r){void 0===r&&(r={}),it(n.classList,e,t),ot(n.style,e,t),r.children?r.children[r.children.length-1]._vm=t:r._vm=t}function rt(e,t,n,r){if(e){for(var o in e)!function(o){if(!t||t[o]){var i=e[o];if("function"==typeof i){var a=vt(n,i,function(e){r[o]=e});r[o]=a}else r[o]=i}}(o)}}function ot(e,t,n){for(var r in e)!function(r){var o=e[r];if("function"==typeof o){var i=vt(t,o,function(e){n._rootEl&&n._rootEl.setStyle(r,e)});n._rootEl.setStyle(r,i)}else n._rootEl&&n._rootEl.setStyle(r,o)}(r)}function it(e,t,n){function r(e,t){"array"===Ae(e)&&e.unshift(t)}var o=t._options&&t._options.style||{};if(n._rootEl){var i="@originalRootEl";if(o[i]=n._rootEl.classStyle,"function"==typeof e){var a=vt(t,e,function(e){r(e,i),ut(n._rootEl,o,e)});r(a,i),ut(n._rootEl,o,a)}else null!=e&&(r(e,i),ut(n._rootEl,o,e))}}function at(e,t,n,r){var o=Object.create(null);if(Object.defineProperties(o,{vm:{value:r,writable:!1,configurable:!1},el:{get:function(){return t||r._rootEl},configurable:!1}}),"function"==typeof n){var i=n;n=i.call(e),(n||0===n)&&(e._ids[n]=o),vt(e,i,function(t){t&&(e._ids[t]=o)})}else n&&"string"==typeof n&&(e._ids[n]=o)}function st(e,t,n){pt(e,t,"attr",n)}function ut(e,t,n){for(var r={},o=n.length,i=0;i<o;i++)!function(e){var o=t[n[e]];o&&Object.keys(o).forEach(function(e){r[e]=o[e]})}(i);e.setClassStyle(r)}function ct(e,t,n){if("function"==typeof n||Array.isArray(n)){if(Array.isArray(n)&&!n.length)return void t.setClassStyle({});var r=e._options&&e._options.style||{};if("function"==typeof n){var o=vt(e,n,function(e){ut(t,r,e)});ut(t,r,o)}else ut(t,r,n)}}function lt(e,t,n){pt(e,t,"style",n)}function ft(e,t,n,r){t.addEvent(n,xe(r,e))}function dt(e,t,n){if(n)for(var r=Object.keys(n),o=r.length;o--;){var i=r[o],a=n[i];"string"==typeof a&&((a=e[a])||console.warn('[JS Framework] The event handler "'+a+'" is not defined.')),ft(e,t,i,a)}}function pt(e,t,n,r){if(r)for(var o=Object.keys(r),i=o.length;i--;){var a=o[i],s=r[a];"function"==typeof s?ht(e,t,n,a,s):t[Uu[n]](a,s)}}function ht(e,t,n,r,o){var i=Uu[n],a=vt(e,o,function(n){function o(){t[i](r,n)}var a=e&&e._app&&e._app.differ;a?a.append("element",t.depth,t.ref,o):o()});t[i](r,a)}function vt(e,t,n){return e._static?t.call(e,e):new Re(e,t,function(e,t){"object"!=typeof e&&e===t||n(e)}).value}function mt(e,t){return e._app.doc.createBody(t)}function yt(e,t){return e._app.doc.createElement(t)}function _t(e,t){var n=gt(e),r=bt(e),o=Vu++;if(t.element){var i=t.updateMark;i?(i.element&&(i=i.end),t.element.insertAfter(r,i),t.element.insertAfter(n,i),t.updateMark=r):(t.element.insertBefore(n,t.end),t.element.insertBefore(r,t.end)),t=t.element}else t.appendChild(n),t.appendChild(r);return{start:n,end:r,element:t,blockId:o}}function gt(e){return e._app.doc.createComment("start")}function bt(e){return e._app.doc.createComment("end")}function wt(e,t,n){if(n.element){var r=n.end,o=n.updateMark;if(n.children&&n.children.push(t),o){var i=Ot(e,t,o);return n.updateMark=t.element?t.end:t,i}if(!t.element)return n.element.insertBefore(t,r);n.element.insertBefore(t.start,r),n.element.insertBefore(t.end,r)}else{if(!t.element)return n.appendChild(t);n.appendChild(t.start),n.appendChild(t.end)}}function Ot(e,t,n){return t.element?xt(t,n):St(t,n)}function St(e,t){var n=t.parentNode;if(n)return n.insertAfter(e,t)}function xt(e,t){var n=t.parentNode;if(n){for(var r,o=e.start,i=[o];o&&o!==e.end;)o=o.nextSibling,i.push(o);var a=t;return i.every(function(e){return r=n.insertAfter(e,a),a=e,-1!==r}),r}}function Et(e,t,n){void 0===n&&(n=!1),t.element?Ct(t,n):kt(t),t._vm&&t._vm.$emit("hook:destroyed")}function kt(e){var t=e.parentNode;t&&t.removeChild(e)}function Ct(e,t){void 0===t&&(t=!1);for(var n=[],r=e.start.nextSibling;r&&r!==e.end;)n.push(r),r=r.nextSibling;t||kt(e.start),n.forEach(function(e){kt(e)}),t||kt(e.end)}function jt(e){var t=e._options||{},n=t.template||{};t.replace?n.children&&1===n.children.length?At(e,n.children[0],e._parentEl):At(e,n.children,e._parentEl):At(e,n,e._parentEl),console.debug('[JS Framework] "ready" lifecycle in Vm('+e._type+")"),e.$emit("hook:ready"),e._ready=!0}function At(e,t,n,r){if(-1!==(e._app||{}).lastSignal){if(t.attr&&t.attr.hasOwnProperty("static")&&(e._static=!0),It(t))return void Rt(e,t,n,r);if(r=r||{},Tt(t))return console.debug('[JS Framework] compile "content" block by',t),void(e._content=_t(e,n));if(Pt(t,r))return console.debug('[JS Framework] compile "repeat" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `repeat` directive!"):Dt(e,t,n));if(Nt(t,r))return console.debug('[JS Framework] compile "if" logic by',t),void("document"===n.type?console.warn("[JS Framework] The root element does't support `if` directive!"):Ft(e,t,n,r));var o=r.type||t.type;if(Mt(o,r))return void Lt(e,t,n,o,r);var i=o,a=$t(e,t,i);if(a)return console.debug("[JS Framework] compile composed component by",t),void Bt(e,a,t,n,i,r);console.debug("[JS Framework] compile native component by",t),Ut(e,t,n,i)}}function It(e){return Array.isArray(e)}function Tt(e){return"content"===e.type||"slot"===e.type}function Pt(e,t){return!t.hasOwnProperty("repeat")&&e.repeat}function Nt(e,t){return!t.hasOwnProperty("shown")&&e.shown}function Mt(e,t){return"function"==typeof e&&!t.hasOwnProperty("type")}function $t(e,t,n){var r;return e._app&&e._app.customComponentMap&&(r=e._app.customComponentMap[n]),e._options&&e._options.components&&(r=e._options.components[n]),t.component&&(r=r||{}),r}function Rt(e,t,n,r){var o=_t(e,n);t.forEach(function(t){At(e,t,o,r)})}function Dt(e,t,n){var r=t.repeat,o="function"==typeof r,i=r.getter||r.expression||r;"function"!=typeof i&&(i=function(){return[]});var a=r.key||"$index",s=r.value||"$value",u=r.trackBy||t.trackBy||t.attr&&t.attr.trackBy,c=_t(e,n);c.children=[],c.data=[],c.vms=[],zt(e,t,c,{getter:i,key:a,value:s,trackBy:u,oldStyle:o})}function Ft(e,t,n,r){var o={shown:!0},i=_t(e,n);n.element&&n.children&&n.children.push(i),r.repeat&&(o.repeat=r.repeat),Wt(e,t,i,o)}function Lt(e,t,n,r,o){var i=r.call(e),a=be({type:i},o),s=_t(e,n);n.element&&n.children&&n.children.push(s),vt(e,r,function(n){var r=be({type:n},o);Et(e,s,!0),At(e,t,s,r)}),At(e,t,s,a)}function Bt(e,t,n,r,o,i){var a=e.constructor,s=new a(o,t,e,r,void 0,{"hook:init":function(){e._static&&(this._static=e._static),at(e,null,n.id,this),this._externalBinding={parent:e,template:n}},"hook:created":function(){tt(e,this,n,i.repeat)},"hook:ready":function(){this._content&&Vt(e,n,this._content)}});nt(e,s,n,r)}function Ut(e,t,n,r){Ye(t);var o;if("_documentElement"===n.ref?(console.debug("[JS Framework] compile to create body for "+r),o=mt(e,r)):(console.debug("[JS Framework] compile to create element for "+r),o=yt(e,r)),!e._rootEl){e._rootEl=o;var i=e._externalBinding||{},a=i.template,s=i.parent;if(a&&a.events&&s&&o)for(var u in a.events){var c=s[a.events[u]];c&&o.addEvent(u,xe(c,s))}}et(e,o,t),t.attr&&t.attr.append&&(t.append=t.attr.append),t.append&&(o.attr=o.attr||{},o.attr.append=t.append);var l="tree"===t.append,f=e._app||{};-1===f.lastSignal||l||(console.debug("[JS Framework] compile to append single node for",o),f.lastSignal=wt(e,o,n)),-1!==f.lastSignal&&Vt(e,t,o),-1!==f.lastSignal&&l&&(console.debug("[JS Framework] compile to append whole tree for",o),f.lastSignal=wt(e,o,n))}function Vt(e,t,n){var r=e._app||{},o=t.children;o&&o.length&&o.every(function(t){return At(e,t,n),-1!==r.lastSignal})}function zt(e,t,n,r){function o(e,r,o){var a;c?(a=e,Ee(e)?(a[l]=r,a.hasOwnProperty("INDEX")||Object.defineProperty(a,"INDEX",{value:function(){console.warn('[JS Framework] "INDEX" in repeat is deprecated, please use "$index" instead')}})):(console.warn("[JS Framework] Each list item must be an object in old-style repeat, please use `repeat={{v in list}}` instead."),a={},a[l]=r,a[f]=e)):(a={},a[l]=r,a[f]=e);var s=Jt(o,a);i.push(s),At(s,t,n,{repeat:e})}var i=n.vms,a=n.children,s=r.getter,u=r.trackBy,c=r.oldStyle,l=r.key,f=r.value,d=qt(e,n,s,"repeat",function(t){if(console.debug('[JS Framework] the "repeat" item has changed',t),n&&t){var r=a.slice(),s=i.slice(),d=n.data.slice(),p={},h={};t.forEach(function(e,t){var n=u?e[u]:c?e[l]:t;null!=n&&""!==n&&(p[n]=e)});var v=[];d.forEach(function(t,n){var o=u?t[u]:c?t[l]:n;p.hasOwnProperty(o)?(h[o]={item:t,index:n,key:o,target:r[n],vm:s[n]},v.push(t)):Et(e,r[n])}),a.length=0,i.length=0,n.data=t.slice(),n.updateMark=n.start,t.forEach(function(t,r){var s=u?t[u]:c?t[l]:r,d=h[s];d?(d.item===v[0]?v.shift():(v.$remove(d.item),Ot(e,d.target,n.updateMark,!0)),a.push(d.target),i.push(d.vm),c?d.vm=t:d.vm[f]=t,d.vm[l]=r,n.updateMark=d.target):o(t,r,e)}),delete n.updateMark}});n.data=d.slice(0),d.forEach(function(t,n){o(t,n,e)})}function Wt(e,t,n,r){var o=qt(e,n,t.shown,"shown",function(o){console.debug('[JS Framework] the "if" item was changed',o),n&&!!n.display!=!!o&&(n.display=!!o,o?At(e,t,n,r):Et(e,n,!0))});n.display=!!o,o&&At(e,t,n,r)}function qt(e,t,n,r,o){var i=e&&e._app&&e._app.differ,a={},s=(t.element.depth||0)+1;return vt(e,n,function(e){a.latestValue=e,i&&!a.recorded&&i.append(r,s,t.blockId,function(){var e=a.latestValue;o(e),a.recorded=!1,a.latestValue=void 0}),a.recorded=!0})}function Jt(e,t){var n=Object.create(e);return n._data=t,Ge(n),Ke(n),n._realParent=e,e._static&&(n._static=e._static),n}function Ht(e,t){if(t instanceof Ht)return t;this.timestamp=Date.now(),this.detail=t,this.type=e;var n=!1;this.stop=function(){n=!0},this.hasStopped=function(){return n}}function Gt(e,t){var n=this,r=this._vmEvents,o=r[e];if(o){var i=new Ht(e,t);o.forEach(function(e){e.call(n,i)})}}function Xt(e,t){var n=new Ht(e,t);this.$emit(e,n),!n.hasStopped()&&this._parent&&this._parent.$dispatch&&this._parent.$dispatch(e,n)}function Kt(e,t){var n=new Ht(e,t);this.$emit(e,n),!n.hasStopped()&&this._childrenVms&&this._childrenVms.forEach(function(t){t.$broadcast(e,n)})}function Zt(e,t){if(e&&"function"==typeof t){var n=this._vmEvents,r=n[e]||[];r.push(t),n[e]=r,"hook:ready"===e&&this._ready&&this.$emit("hook:ready")}}function Qt(e,t){if(e){var n=this._vmEvents;if(!t)return void delete n[e];var r=n[e];r&&r.$remove(t)}}function Yt(e,t){var n=e._options||{},r=n.events||{};for(var o in r)e.$on(o,r[o]);for(var i in t)e.$on(i,t[i]);zu.forEach(function(t){e.$on("hook:"+t,n[t])})}function en(e,t,n,r,o,i){n=n||{},this._parent=n._realParent?n._realParent:n,this._app=n._app||{},n._childrenVms&&n._childrenVms.push(this),!t&&this._app.customComponentMap&&(t=this._app.customComponentMap[e]),t=t||{};var a=t.data||{};this._options=t,this._methods=t.methods||{},this._computed=t.computed||{},this._css=t.style||{},this._ids={},this._vmEvents={},this._childrenVms=[],this._type=e,Yt(this,i),console.debug('[JS Framework] "init" lifecycle in Vm('+this._type+")"),this.$emit("hook:init"),this._inited=!0,this._data="function"==typeof a?a():a,o&&be(this._data,o),He(this),console.debug('[JS Framework] "created" lifecycle in Vm('+this._type+")"),this.$emit("hook:created"),this._created=!0,t.methods&&t.methods.ready&&(console.warn('"exports.methods.ready" is deprecated, please use "exports.created" instead'),t.methods.ready.call(this)),this._app.doc&&(this._parentEl=r||this._app.doc.documentElement,jt(this))}function tn(e,t){for(var n in e)!function(n){var r=Wu[n];r||(r={},Wu[n]=r),e[n].forEach(function(e){"string"==typeof e&&(e={name:e}),r[e.name]&&!t||(r[e.name]=e)})}(n)}function nn(e,t){var n=e.prototype;for(var r in t)n.hasOwnProperty(r)||(n[r]=t[r])}function rn(e,t){var n=Wu[t],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{configurable:!0,enumerable:!0,get:function(){return function(){for(var r=[],o=arguments.length;o--;)r[o]=arguments[o];return e.callTasks({module:t,method:n,args:r})}},set:function(r){if("function"==typeof r)return e.callTasks({module:t,method:n,args:[r]})}})}(o);return r}function on(e,t){return e.customComponentMap[t]}function an(e,t,n){var r=e.customComponentMap;if(r[t])return void console.error("[JS Framework] define a component("+t+") that already exists");r[t]=n}function sn(e){if(qu.valid(e))return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function un(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n}(e,t,n),o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r}function cn(e,t){t=t||global.WXEnvironment,t=ke(t)?t:{};var n={isDowngrade:!1};if("function"===Ae(e)){var r=e.call(this,t,{semver:qu,normalizeVersion:sn});r=!!r,n=r?un("custom","","custom params"):n}else{e=ke(e)?e:{};var o=t.platform||"unknow",i=o.toLowerCase(),a=e[i]||{};for(var s in t){var u=s,c=u.toLowerCase(),l=t[s],f=c.indexOf("version")>=0,d=c.indexOf("devicemodel")>=0,p=a[s];if(p&&f){var h=sn(p),v=sn(t[s]);if(qu.satisfies(v,h)){n=un(u,l,p);break}}else if(d){var m="array"===Ae(p)?p:[p];if(m.indexOf(l)>=0){n=un(u,l,p);break}}}}return n}function ln(e,t){if(void 0===t&&(t={}),e&&e.callTasks)return e.callTasks([{module:"meta",method:"setViewport",args:[t]}])}function fn(e,t,n,r){console.debug("[JS Framework] bootstrap for "+t);var o;if(Cu(t))o=Ie(t);else{if(!Iu(t))return new Error("Wrong component name: "+t);if(o=Te(t),!on(e,o))return new Error("It's not a component: "+t)}if(n=ke(n)?n:{},
+"string"==typeof n.transformerVersion&&"string"==typeof global.transformerVersion&&!qu.satisfies(n.transformerVersion,global.transformerVersion))return new Error("JS Bundle version: "+n.transformerVersion+" not compatible with "+global.transformerVersion);var i=cn(n.downgrade);if(i.isDowngrade)return e.callTasks([{module:"instanceWrap",method:"error",args:[i.errorType,i.code,i.errorMessage]}]),new Error("Downgrade["+i.code+"]: "+i.errorMessage);n.viewport&&ln(e,n.viewport),e.vm=new en(o,null,{_app:e},null,r)}function dn(e,t,n){console.warn("[JS Framework] Register is deprecated, please install lastest transformer."),an(e,t,n)}function pn(e,t){console.debug("[JS Framework] Refresh with",t,"in instance["+e.id+"]");var n=e.vm;return n&&t?("function"==typeof n.refreshData?n.refreshData(t):be(n,t),e.differ.flush(),void e.doc.taskCenter.send("dom",{action:"refreshFinish"},[])):new Error('invalid data "'+t+'"')}function hn(e){console.debug("[JS Framework] Destory an instance("+e.id+")"),e.vm&&vn(e.vm),e.id="",e.options=null,e.blocks=null,e.vm=null,e.doc.taskCenter.destroyCallback(),e.doc.destroy(),e.doc=null,e.customComponentMap=null,e.commonModules=null}function vn(e){if(delete e._app,delete e._computed,delete e._css,delete e._data,delete e._ids,delete e._methods,delete e._options,delete e._parent,delete e._parentEl,delete e._rootEl,e._watchers){for(var t=e._watchers.length;t--;)e._watchers[t].teardown();delete e._watchers}if(e._childrenVms){for(var n=e._childrenVms.length;n--;)vn(e._childrenVms[n]);delete e._childrenVms}console.debug('[JS Framework] "destroyed" lifecycle in Vm('+e._type+")"),e.$emit("hook:destroyed"),delete e._type,delete e._vmEvents}function mn(e){var t=e.doc||{},n=t.body||{};return n.toJSON?n.toJSON():{}}function yn(e,t,n,r,o){if(console.debug('[JS Framework] Fire a "'+n+'" event on an element('+t+") in instance("+e.id+")"),Array.isArray(t))return void t.some(function(t){return!1!==yn(e,t,n,r)});var i=e.doc.getRef(t);if(i){var a=e.doc.fireEvent(i,n,r,o);return e.differ.flush(),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),a}return new Error('invalid element reference "'+t+'"')}function _n(e,t,n,r){console.debug("[JS Framework] Invoke a callback("+t+") with",n,"in instance("+e.id+")");var o=e.doc.taskCenter.callback(t,n,r);return gn(e),e.doc.taskCenter.send("dom",{action:"updateFinish"},[]),o}function gn(e){e.differ.flush()}function bn(e,t){var n;return"array"!==Ae(t)&&(t=[t]),t.forEach(function(t){n=e.doc.taskCenter.send("module",{module:t.module,method:t.method},t.args)}),n}function wn(e,t,n,r){console.debug("[JS Framework] Intialize an instance with:\n",n);var o,i=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return Ju.apply(void 0,[e].concat(t))},a=function(t,r,i){o=fn(e,t,r,i||n),gn(e),e.doc.listener.createFinish(),console.debug("[JS Framework] After intialized an instance("+e.id+")")},s=en,u=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return dn.apply(void 0,[e].concat(t))},c=function(t,n){o=fn(e,t,{},n)},l=function(t){return function(n){o=fn(e,t,{},n)}},f=e.doc,d=function(t){return e.requireModule(Ie(t))},p={config:e.options,define:i,bootstrap:a,requireModule:d,document:f,Vm:s};Object.freeze(p);var h;"function"==typeof t?h=t.toString().substr(12):t&&(h=t.toString()),h='(function(global){\n\n"use strict";\n\n '+h+" \n\n})(Object.create(this))";var v=global.WXEnvironment,m={};if(v&&"Web"!==v.platform){var y=e.requireModule("timer");Object.assign(m,{setTimeout:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setTimeout(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=function(){t[0].apply(t,t.slice(2))};return y.setInterval(r,t[1]),e.doc.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){y.clearTimeout(e)},clearInterval:function(e){y.clearInterval(e)}})}var _=Object.assign({define:i,require:l,bootstrap:a,register:u,render:c,__weex_define__:i,__weex_bootstrap__:a,__weex_document__:f,__weex_require__:d,__weex_viewmodel__:s,weex:p},m,r);return Sn(_,h)||On(_,h),o}function On(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function Sn(e,t){if("function"!=typeof compileAndRunBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=compileAndRunBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}function xn(e,t){var n=e[t];for(var r in n)n[r]()}function En(e,t){var n=e[t];for(var r in n){n[r].forEach(function(e){e()})}}function kn(e,t){this.id=e,this.options=t||{},this.vm=null,this.customComponentMap={},this.commonModules={},this.doc=new Lu.Document(e,this.options.bundleUrl,null,Lu.Listener),this.differ=new Hu(e)}function Cn(e,t,n,r,o){var i=o||{},a=i.services;$e();var s=Gu[e];n=n||{};var u;return s?u=new Error('invalid instance id "'+e+'"'):(s=new kn(e,n),Gu[e]=s,u=wn(s,t,r,a)),u}function jn(e){Lu.Document=e.Document,Lu.Element=e.Element,Lu.Comment=e.Comment,Lu.sendTasks=e.sendTasks,Lu.Listener=e.Listener}function An(e,t){var n=Gu[e];return n?pn(n,t):new Error('invalid instance id "'+e+'"')}function In(e){"function"==typeof markupState&&markupState(),$e();var t=Gu[e];if(!t)return new Error('invalid instance id "'+e+'"');hn(t),delete Gu[e];var n=Math.round(e);if(n>0){n%18||"function"!=typeof notifyTrimMemory||notifyTrimMemory()}return Gu}function Tn(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?Xu[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(Xu[e.type]=e))})}function Pn(e){"object"==typeof e&&tn(e)}function Nn(e){"object"==typeof e&&nn(en,e)}function Mn(e,t){if(Gu[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=Ku[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function $n(e){var t=Gu[e];return t?mn(t):new Error('invalid instance id "'+e+'"')}function Rn(e,t){void 0===t&&(t={}),this.type=e||"message",this.data=t.data||null,this.origin=t.origin||"",this.source=t.source||null,this.ports=t.ports||[],this.target=null,this.timeStamp=Date.now()}function Dn(){}function Fn(e,t,n,r){console.warn("[Upgrade Warning] $userTrack will be removed in the next version!"),console.warn("[JS Framework] Vm#$userTrack is deprecated, please use \"require('@weex-module/userTrack').commit(type, name, comName, param)\" instead"),this._app.requireModule("userTrack").commit(e,t,n,r)}function Ln(e,t){if(console.warn("[Upgrade Warning] $sendMtop will be removed in the next version!"),console.warn("[JS Framework] Vm#$sendMtop is deprecated, please use \"require('@weex-module/stream').sendMtop(params, callback)\" instead"),"undefined"==typeof window){this._app.requireModule("windvane").call({class:"MtopWVPlugin",method:"send",data:e},t)}else{this._app.requireModule("stream").sendMtop(e,t)}}function Bn(e,t){console.warn("[Upgrade Warning] $callWindvane will be removed in the next version!"),console.warn("[JS Framework] Vm#$callWindvane is deprecated, please use \"require('@weex-module/windvane').call(params, callback)\" instead"),this._app.requireModule("windvane").call(e,t)}function Un(e,t){console.warn("[Upgrade Warning] $setSpm will be removed in the next version!"),console.warn("[JS Framework] Vm#$setSpm is deprecated, please use \"require('@weex-module/pageInfo').setSpm(a, b)\" instead"),this._app.requireModule("pageInfo").setSpm(e,t)}function Vn(e){console.warn("[Upgrade Warning] $getUserInfo will be removed in the next version!"),console.warn("[JS Framework] Vm#$getUserInfo is deprecated, please use \"require('@weex-module/user').getUserInfo(callback)\" instead"),this._app.requireModule("user").getUserInfo(e)}function zn(e){console.warn("[Upgrade Warning] $login will be removed in the next version!"),console.warn("[JS Framework] Vm#$login is deprecated, please use \"require('@weex-module/user').login(callback)\" instead"),this._app.requireModule("user").login(e)}function Wn(e){console.warn("[Upgrade Warning] $logout will be removed in the next version!"),console.warn("[JS Framework] Vm#$logout is deprecated, please use \"require('@weex-module/user').logout(callback)\" instead"),this._app.requireModule("user").logout(e)}var qn={browser:"0.5.0",framework:"0.20.6","vue-render":"0.11.5",transformer:">=0.1.5 <0.5"};Array.from||(Array.from=function(){var e=Object.prototype.toString,t=function(t){return"function"==typeof t||"[object Function]"===e.call(t)},n=function(e){var t=Number(e);return isNaN(t)?0:0!==t&&isFinite(t)?(t>0?1:-1)*Math.floor(Math.abs(t)):t},r=Math.pow(2,53)-1,o=function(e){var t=n(e);return Math.min(Math.max(t,0),r)};return function(e){var n=this,r=Object(e);if(null==e)throw new TypeError("Array.from requires an array-like object - not null or undefined");var i,a=arguments.length>1?arguments[1]:void 0;if(void 0!==a){if(!t(a))throw new TypeError("Array.from: when provided, the second argument must be a function");arguments.length>2&&(i=arguments[2])}for(var s,u=o(r.length),c=t(n)?Object(new n(u)):new Array(u),l=0;l<u;)s=r[l],c[l]=a?void 0===i?a(s,l):a.call(i,s,l):s,l+=1;return c.length=u,c}}());var Jn="undefined"!=typeof window?window:void 0!==global?global:"undefined"!=typeof self?self:{},Hn=t(function(e){var t=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=t)}),Gn=t(function(e){var t=e.exports={version:"2.4.0"};"number"==typeof __e&&(__e=t)}),Xn=function(e){return"object"==typeof e?null!==e:"function"==typeof e},Kn=Xn,Zn=function(e){if(!Kn(e))throw TypeError(e+" is not an object!");return e},Qn=function(e){try{return!!e()}catch(e){return!0}},Yn=!Qn(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a}),er=Xn,tr=Hn.document,nr=er(tr)&&er(tr.createElement),rr=function(e){return nr?tr.createElement(e):{}},or=!Yn&&!Qn(function(){return 7!=Object.defineProperty(rr("div"),"a",{get:function(){return 7}}).a}),ir=Xn,ar=function(e,t){if(!ir(e))return e;var n,r;if(t&&"function"==typeof(n=e.toString)&&!ir(r=n.call(e)))return r;if("function"==typeof(n=e.valueOf)&&!ir(r=n.call(e)))return r;if(!t&&"function"==typeof(n=e.toString)&&!ir(r=n.call(e)))return r;throw TypeError("Can't convert object to primitive value")},sr=Zn,ur=or,cr=ar,lr=Object.defineProperty,fr=Yn?Object.defineProperty:function(e,t,n){if(sr(e),t=cr(t,!0),sr(n),ur)try{return lr(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e},dr={f:fr},pr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}},hr=dr,vr=pr,mr=Yn?function(e,t,n){return hr.f(e,t,vr(1,n))}:function(e,t,n){return e[t]=n,e},yr={}.hasOwnProperty,_r=function(e,t){return yr.call(e,t)},gr=0,br=Math.random(),wr=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++gr+br).toString(36))},Or=t(function(e){var t=Hn,n=mr,r=_r,o=wr("src"),i=Function.toString,a=(""+i).split("toString");Gn.inspectSource=function(e){return i.call(e)},(e.exports=function(e,i,s,u){var c="function"==typeof s;c&&(r(s,"name")||n(s,"name",i)),e[i]!==s&&(c&&(r(s,o)||n(s,o,e[i]?""+e[i]:a.join(String(i)))),e===t?e[i]=s:u?e[i]?e[i]=s:n(e,i,s):(delete e[i],n(e,i,s)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||i.call(this)})}),Sr=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e},xr=Sr,Er=function(e,t,n){if(xr(e),void 0===t)return e;switch(n){case 1:return function(n){return e.call(t,n)};case 2:return function(n,r){return e.call(t,n,r)};case 3:return function(n,r,o){return e.call(t,n,r,o)}}return function(){return e.apply(t,arguments)}},kr=Hn,Cr=Gn,jr=mr,Ar=Or,Ir=Er,Tr=function(e,t,n){var r,o,i,a,s=e&Tr.F,u=e&Tr.G,c=e&Tr.S,l=e&Tr.P,f=e&Tr.B,d=u?kr:c?kr[t]||(kr[t]={}):(kr[t]||{}).prototype,p=u?Cr:Cr[t]||(Cr[t]={}),h=p.prototype||(p.prototype={});u&&(n=t);for(r in n)o=!s&&d&&void 0!==d[r],i=(o?d:n)[r],a=f&&o?Ir(i,kr):l&&"function"==typeof i?Ir(Function.call,i):i,d&&Ar(d,r,i,e&Tr.U),p[r]!=i&&jr(p,r,a),l&&h[r]!=i&&(h[r]=i)};kr.core=Cr,Tr.F=1,Tr.G=2,Tr.S=4,Tr.P=8,Tr.B=16,Tr.W=32,Tr.U=64,Tr.R=128;var Pr=Tr,Nr={}.toString,Mr=function(e){return Nr.call(e).slice(8,-1)},$r=Mr,Rr=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==$r(e)?e.split(""):Object(e)},Dr=function(e){if(void 0==e)throw TypeError("Can't call method on  "+e);return e},Fr=Rr,Lr=Dr,Br=function(e){return Fr(Lr(e))},Ur=Math.ceil,Vr=Math.floor,zr=function(e){return isNaN(e=+e)?0:(e>0?Vr:Ur)(e)},Wr=zr,qr=Math.min,Jr=function(e){return e>0?qr(Wr(e),9007199254740991):0},Hr=zr,Gr=Math.max,Xr=Math.min,Kr=function(e,t){return e=Hr(e),e<0?Gr(e+t,0):Xr(e,t)},Zr=Br,Qr=Jr,Yr=Kr,eo=Hn,to=eo["__core-js_shared__"]||(eo["__core-js_shared__"]={}),no=function(e){return to[e]||(to[e]={})},ro=no("keys"),oo=wr,io=function(e){return ro[e]||(ro[e]=oo(e))},ao=_r,so=Br,uo=function(e){return function(t,n,r){var o,i=Zr(t),a=Qr(i.length),s=Yr(r,a);if(e&&n!=n){for(;a>s;)if((o=i[s++])!=o)return!0}else for(;a>s;s++)if((e||s in i)&&i[s]===n)return e||s||0;return!e&&-1}}(!1),co=io("IE_PROTO"),lo=function(e,t){var n,r=so(e),o=0,i=[];for(n in r)n!=co&&ao(r,n)&&i.push(n);for(;t.length>o;)ao(r,n=t[o++])&&(~uo(i,n)||i.push(n));return i},fo="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),po=lo,ho=fo,vo=Object.keys||function(e){return po(e,ho)},mo=Object.getOwnPropertySymbols,yo={f:mo},_o={}.propertyIsEnumerable,go={f:_o},bo=Dr,wo=function(e){return Object(bo(e))},Oo=vo,So=yo,xo=go,Eo=wo,ko=Rr,Co=Object.assign,jo=!Co||Qn(function(){var e={},t={},n=Symbol(),r="abcdefghijklmnopqrst";return e[n]=7,r.split("").forEach(function(e){t[e]=e}),7!=Co({},e)[n]||Object.keys(Co({},t)).join("")!=r})?function(e,t){for(var n=arguments,r=Eo(e),o=arguments.length,i=1,a=So.f,s=xo.f;o>i;)for(var u,c=ko(n[i++]),l=a?Oo(c).concat(a(c)):Oo(c),f=l.length,d=0;f>d;)s.call(c,u=l[d++])&&(r[u]=c[u]);return r}:Co,Ao=Pr;Ao(Ao.S+Ao.F,"Object",{assign:jo}),Object.setPrototypeOf||(Object.setPrototypeOf=function(e,t){function n(e,t){return r.call(e,t),e}var r;try{r=e.getOwnPropertyDescriptor(e.prototype,"__proto__").set,r.call({},null)}catch(t){if(e.prototype!=={}.__proto__||void 0==={__proto__:null}.__proto__)return;r=function(e){this.__proto__=e},n.polyfill=n(n({},null),e.prototype)instanceof e}return n}(Object));var Io=Jn,To=Io.WXEnvironment;To&&"iOS"===To.platform&&(Jn.Promise=void 0);var Po=t(function(e){var t=no("wks"),n=wr,r=Hn.Symbol,o="function"==typeof r;(e.exports=function(e){return t[e]||(t[e]=o&&r[e]||(o?r:n)("Symbol."+e))}).store=t}),No=Mr,Mo=Po("toStringTag"),$o="Arguments"==No(function(){return arguments}()),Ro=function(e,t){try{return e[t]}catch(e){}},Do=function(e){var t,n,r;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(n=Ro(t=Object(e),Mo))?n:$o?No(t):"Object"==(r=No(t))&&"function"==typeof t.callee?"Arguments":r},Fo=Do,Lo={};Lo[Po("toStringTag")]="z",Lo+""!="[object z]"&&Or(Object.prototype,"toString",function(){return"[object "+Fo(this)+"]"},!0);var Bo=zr,Uo=Dr,Vo={},zo=dr,Wo=Zn,qo=vo,Jo=Yn?Object.defineProperties:function(e,t){Wo(e);for(var n,r=qo(t),o=r.length,i=0;o>i;)zo.f(e,n=r[i++],t[n]);return e},Ho=Hn.document&&document.documentElement,Go=Zn,Xo=Jo,Ko=fo,Zo=io("IE_PROTO"),Qo=function(){},Yo=function(){var e,t=rr("iframe"),n=Ko.length;for(t.style.display="none",Ho.appendChild(t),t.src="javascript:",e=t.contentWindow.document,e.open(),e.write("<script>document.F=Object<\/script>"),e.close(),Yo=e.F;n--;)delete Yo.prototype[Ko[n]];return Yo()},ei=Object.create||function(e,t){var n;return null!==e?(Qo.prototype=Go(e),n=new Qo,Qo.prototype=null,n[Zo]=e):n=Yo(),void 0===t?n:Xo(n,t)},ti=dr.f,ni=_r,ri=Po("toStringTag"),oi=function(e,t,n){e&&!ni(e=n?e:e.prototype,ri)&&ti(e,ri,{configurable:!0,value:t})},ii=ei,ai=pr,si=oi,ui={};mr(ui,Po("iterator"),function(){return this});var ci=function(e,t,n){e.prototype=ii(ui,{next:ai(1,n)}),si(e,t+" Iterator")},li=_r,fi=wo,di=io("IE_PROTO"),pi=Object.prototype,hi=Object.getPrototypeOf||function(e){return e=fi(e),li(e,di)?e[di]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?pi:null},vi=Pr,mi=Or,yi=mr,_i=_r,gi=Vo,bi=ci,wi=oi,Oi=hi,Si=Po("iterator"),xi=!([].keys&&"next"in[].keys()),Ei=function(){return this},ki=function(e,t,n,r,o,i,a){bi(n,t,r);var s,u,c,l=function(e){if(!xi&&e in h)return h[e];switch(e){case"keys":case"values":return function(){return new n(this,e)}}return function(){return new n(this,e)}},f=t+" Iterator",d="values"==o,p=!1,h=e.prototype,v=h[Si]||h["@@iterator"]||o&&h[o],m=v||l(o),y=o?d?l("entries"):m:void 0,_="Array"==t?h.entries||v:v;if(_&&(c=Oi(_.call(new e)))!==Object.prototype&&(wi(c,f,!0),_i(c,Si)||yi(c,Si,Ei)),d&&v&&"values"!==v.name&&(p=!0,m=function(){return v.call(this)}),(xi||p||!h[Si])&&yi(h,Si,m),gi[t]=m,gi[f]=Ei,o)if(s={values:d?m:l("values"),keys:i?m:l("keys"),entries:y},a)for(u in s)u in h||mi(h,u,s[u]);else vi(vi.P+vi.F*(xi||p),t,s);return s},Ci=function(e){return function(t,n){var r,o,i=String(Uo(t)),a=Bo(n),s=i.length;return a<0||a>=s?e?"":void 0:(r=i.charCodeAt(a),r<55296||r>56319||a+1===s||(o=i.charCodeAt(a+1))<56320||o>57343?e?i.charAt(a):r:e?i.slice(a,a+2):o-56320+(r-55296<<10)+65536)}}(!0);ki(String,"String",function(e){this._t=String(e),this._i=0},function(){var e,t=this._t,n=this._i;return n>=t.length?{value:void 0,done:!0}:(e=Ci(t,n),this._i+=e.length,{value:e,done:!1})});var ji=Po("unscopables"),Ai=Array.prototype;void 0==Ai[ji]&&mr(Ai,ji,{});var Ii=function(e){Ai[ji][e]=!0},Ti=function(e,t){return{value:t,done:!!e}},Pi=Ii,Ni=Ti,Mi=Vo,$i=Br,Ri=ki(Array,"Array",function(e,t){this._t=$i(e),this._i=0,this._k=t},function(){var e=this._t,t=this._k,n=this._i++;return!e||n>=e.length?(this._t=void 0,Ni(1)):"keys"==t?Ni(0,n):"values"==t?Ni(0,e[n]):Ni(0,[n,e[n]])},"values");Mi.Arguments=Mi.Array,Pi("keys"),Pi("values"),Pi("entries");for(var Di=Ri,Fi=Or,Li=Hn,Bi=mr,Ui=Vo,Vi=Po,zi=Vi("iterator"),Wi=Vi("toStringTag"),qi=Ui.Array,Ji=["NodeList","DOMTokenList","MediaList","StyleSheetList","CSSRuleList"],Hi=0;Hi<5;Hi++){var Gi,Xi=Ji[Hi],Ki=Li[Xi],Zi=Ki&&Ki.prototype;if(Zi){Zi[zi]||Bi(Zi,zi,qi),Zi[Wi]||Bi(Zi,Wi,Xi),Ui[Xi]=qi;for(Gi in Di)Zi[Gi]||Fi(Zi,Gi,Di[Gi],!0)}}var Qi,Yi,ea,ta=function(e,t,n,r){if(!(e instanceof t)||void 0!==r&&r in e)throw TypeError(n+": incorrect invocation!");return e},na=Zn,ra=function(e,t,n,r){try{return r?t(na(n)[0],n[1]):t(n)}catch(t){var o=e.return;throw void 0!==o&&na(o.call(e)),t}},oa=Vo,ia=Po("iterator"),aa=Array.prototype,sa=function(e){return void 0!==e&&(oa.Array===e||aa[ia]===e)},ua=Do,ca=Po("iterator"),la=Vo,fa=Gn.getIteratorMethod=function(e){if(void 0!=e)return e[ca]||e["@@iterator"]||la[ua(e)]},da=t(function(e){var t=Er,n=ra,r=sa,o=Zn,i=Jr,a=fa,s={},u={},c=e.exports=function(e,c,l,f,d){var p,h,v,m,y=d?function(){return e}:a(e),_=t(l,f,c?2:1),g=0;if("function"!=typeof y)throw TypeError(e+" is not iterable!");if(r(y)){for(p=i(e.length);p>g;g++)if((m=c?_(o(h=e[g])[0],h[1]):_(e[g]))===s||m===u)return m}else for(v=y.call(e);!(h=v.next()).done;)if((m=n(v,_,h.value,c))===s||m===u)return m};c.BREAK=s,c.RETURN=u}),pa=Zn,ha=Sr,va=Po("species"),ma=function(e,t){var n,r=pa(e).constructor;return void 0===r||void 0==(n=pa(r)[va])?t:ha(n)},ya=function(e,t,n){var r=void 0===n;switch(t.length){case 0:return r?e():e.call(n);case 1:return r?e(t[0]):e.call(n,t[0]);case 2:return r?e(t[0],t[1]):e.call(n,t[0],t[1]);case 3:return r?e(t[0],t[1],t[2]):e.call(n,t[0],t[1],t[2]);case 4:return r?e(t[0],t[1],t[2],t[3]):e.call(n,t[0],t[1],t[2],t[3])}return e.apply(n,t)},_a=Er,ga=ya,ba=Ho,wa=rr,Oa=Hn,Sa=Oa.process,xa=Oa.setImmediate,Ea=Oa.clearImmediate,ka=Oa.MessageChannel,Ca=0,ja={},Aa=function(){var e=+this;if(ja.hasOwnProperty(e)){var t=ja[e];delete ja[e],t()}},Ia=function(e){Aa.call(e.data)};xa&&Ea||(xa=function(e){for(var t=arguments,n=[],r=1;arguments.length>r;)n.push(t[r++]);return ja[++Ca]=function(){ga("function"==typeof e?e:Function(e),n)},Qi(Ca),Ca},Ea=function(e){delete ja[e]},"process"==Mr(Sa)?Qi=function(e){Sa.nextTick(_a(Aa,e,1))}:ka?(Yi=new ka,ea=Yi.port2,Yi.port1.onmessage=Ia,Qi=_a(ea.postMessage,ea,1)):Oa.addEventListener&&"function"==typeof postMessage&&!Oa.importScripts?(Qi=function(e){Oa.postMessage(e+"","*")},Oa.addEventListener("message",Ia,!1)):Qi="onreadystatechange"in wa("script")?function(e){ba.appendChild(wa("script")).onreadystatechange=function(){ba.removeChild(this),Aa.call(e)}}:function(e){setTimeout(_a(Aa,e,1),0)});var Ta={set:xa,clear:Ea},Pa=Hn,Na=Ta.set,Ma=Pa.MutationObserver||Pa.WebKitMutationObserver,$a=Pa.process,Ra=Pa.Promise,Da="process"==Mr($a),Fa=Or,La=Hn,Ba=dr,Ua=Yn,Va=Po("species"),za=Po("iterator"),Wa=!1;try{var qa=[7][za]();qa.return=function(){Wa=!0},Array.from(qa,function(){throw 2})}catch(e){}var Ja,Ha,Ga,Xa=Hn,Ka=Er,Za=Do,Qa=Pr,Ya=Xn,es=Sr,ts=ta,ns=da,rs=ma,os=Ta.set,is=function(){var e,t,n,r=function(){var r,o;for(Da&&(r=$a.domain)&&r.exit();e;){o=e.fn,e=e.next;try{o()}catch(r){throw e?n():t=void 0,r}}t=void 0,r&&r.enter()};if(Da)n=function(){$a.nextTick(r)};else if(Ma){var o=!0,i=document.createTextNode("");new Ma(r).observe(i,{characterData:!0}),n=function(){i.data=o=!o}}else if(Ra&&Ra.resolve){var a=Ra.resolve();n=function(){a.then(r)}}else n=function(){Na.call(Pa,r)};return function(r){var o={fn:r,next:void 0};t&&(t.next=o),e||(e=o,n()),t=o}}(),as=Xa.TypeError,ss=Xa.process,us=Xa.Promise,ss=Xa.process,cs="process"==Za(ss),ls=function(){},fs=!!function(){try{var e=us.resolve(1),t=(e.constructor={})[Po("species")]=function(e){e(ls,ls)};return(cs||"function"==typeof PromiseRejectionEvent)&&e.then(ls)instanceof t}catch(e){}}(),ds=function(e,t){return e===t||e===us&&t===Ga},ps=function(e){var t;return!(!Ya(e)||"function"!=typeof(t=e.then))&&t},hs=function(e){return ds(us,e)?new vs(e):new Ha(e)},vs=Ha=function(e){var t,n;this.promise=new e(function(e,r){if(void 0!==t||void 0!==n)throw as("Bad Promise constructor");t=e,n=r}),this.resolve=es(t),this.reject=es(n)},ms=function(e){try{e()}catch(e){return{error:e}}},ys=function(e,t){if(!e._n){e._n=!0;var n=e._c;is(function(){for(var r=e._v,o=1==e._s,i=0;n.length>i;)!function(t){var n,i,a=o?t.ok:t.fail,s=t.resolve,u=t.reject,c=t.domain;try{a?(o||(2==e._h&&bs(e),e._h=1),!0===a?n=r:(c&&c.enter(),n=a(r),c&&c.exit()),n===t.promise?u(as("Promise-chain cycle")):(i=ps(n))?i.call(n,s,u):s(n)):u(r)}catch(e){u(e)}}(n[i++]);e._c=[],e._n=!1,t&&!e._h&&_s(e)})}},_s=function(e){os.call(Xa,function(){var t,n,r,o=e._v;if(gs(e)&&(t=ms(function(){cs?ss.emit("unhandledRejection",o,e):(n=Xa.onunhandledrejection)?n({promise:e,reason:o}):(r=Xa.console)&&r.error&&r.error("Unhandled promise rejection",o)}),e._h=cs||gs(e)?2:1),e._a=void 0,t)throw t.error})},gs=function(e){if(1==e._h)return!1;for(var t,n=e._a||e._c,r=0;n.length>r;)if(t=n[r++],t.fail||!gs(t.promise))return!1;return!0},bs=function(e){os.call(Xa,function(){var t;cs?ss.emit("rejectionHandled",e):(t=Xa.onrejectionhandled)&&t({promise:e,reason:e._v})})},ws=function(e){var t=this;t._d||(t._d=!0,t=t._w||t,t._v=e,t._s=2,t._a||(t._a=t._c.slice()),ys(t,!0))},Os=function(e){var t,n=this;if(!n._d){n._d=!0,n=n._w||n;try{if(n===e)throw as("Promise can't be resolved itself");(t=ps(e))?is(function(){var r={_w:n,_d:!1};try{t.call(e,Ka(Os,r,1),Ka(ws,r,1))}catch(e){ws.call(r,e)}}):(n._v=e,n._s=1,ys(n,!1))}catch(e){ws.call({_w:n,_d:!1},e)}}};fs||(us=function(e){ts(this,us,"Promise","_h"),es(e),Ja.call(this);try{e(Ka(Os,this,1),Ka(ws,this,1))}catch(e){ws.call(this,e)}},Ja=function(e){this._c=[],this._a=void 0,this._s=0,this._d=!1,this._v=void 0,this._h=0,this._n=!1},Ja.prototype=function(e,t,n){for(var r in t)Fa(e,r,t[r],n);return e}(us.prototype,{then:function(e,t){var n=hs(rs(this,us));return n.ok="function"!=typeof e||e,n.fail="function"==typeof t&&t,n.domain=cs?ss.domain:void 0,this._c.push(n),this._a&&this._a.push(n),this._s&&ys(this,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),vs=function(){var e=new Ja;this.promise=e,this.resolve=Ka(Os,e,1),this.reject=Ka(ws,e,1)}),Qa(Qa.G+Qa.W+Qa.F*!fs,{Promise:us}),oi(us,"Promise"),function(e){var t=La[e];Ua&&t&&!t[Va]&&Ba.f(t,Va,{configurable:!0,get:function(){return this}})}("Promise"),Ga=Gn.Promise,Qa(Qa.S+Qa.F*!fs,"Promise",{reject:function(e){var t=hs(this);return(0,t.reject)(e),t.promise}}),Qa(Qa.S+Qa.F*!fs,"Promise",{resolve:function(e){if(e instanceof us&&ds(e.constructor,this))return e;var t=hs(this);return(0,t.resolve)(e),t.promise}}),Qa(Qa.S+Qa.F*!(fs&&function(e,t){if(!t&&!Wa)return!1;var n=!1;try{var r=[7],o=r[za]();o.next=function(){return{done:n=!0}},r[za]=function(){return o},e(r)}catch(e){}return n}(function(e){us.all(e).catch(ls)})),"Promise",{all:function(e){var t=this,n=hs(t),r=n.resolve,o=n.reject,i=ms(function(){var n=[],i=0,a=1;ns(e,!1,function(e){var s=i++,u=!1;n.push(void 0),a++,t.resolve(e).then(function(e){u||(u=!0,n[s]=e,--a||r(n))},o)}),--a||r(n)});return i&&o(i.error),n.promise},race:function(e){var t=this,n=hs(t),r=n.reject,o=ms(function(){ns(e,!1,function(e){t.resolve(e).then(n.resolve,r)})});return o&&r(o.error),n.promise}});var Ss=["off","error","warn","info","log","debug"],xs={},Es=global.console,ks=global.setTimeout,Cs=global.setTimeoutNative;s();var js=function(e){this.instanceId=e,this.lastCallbackId=0,this.callbacks=[]};js.prototype.add=function(e){return this.lastCallbackId++,this.callbacks[this.lastCallbackId]=e,this.lastCallbackId},js.prototype.remove=function(e){var t=this.callbacks[e];return this.callbacks[e]=void 0,t},js.prototype.consume=function(e,t,n){var r=this.callbacks[e];return void 0!==n&&!1!==n||(this.callbacks[e]=void 0),"function"==typeof r?r(t):new Error('invalid callback id "'+e+'"')},js.prototype.close=function(){this.callbacks=this.callbacks.map(function(e){})};var As={},Is=1;C.prototype.destroy=function(){var e=h(this.docId);e&&(delete this.docId,delete e.nodeMap[this.nodeId]),this.children.forEach(function(e){e.destroy()})};var Ts,Ps={},Ns="div";A.prototype=Object.create(C.prototype),A.prototype.constructor=A,function(e){Ts=e}(A),Object.assign(A.prototype,{appendChild:function(e){if(!e.parentNode||e.parentNode===this)if(e.parentNode){if(E(e,this.children,this.children.length,!0),1===e.nodeType){var t=E(e,this.pureChildren,this.pureChildren.length),n=m(this.docId);if(n&&t>=0)return n.send("dom",{action:"moveElement"},[e.ref,this.ref,t])}}else if(w(e,this),x(e,this.children,this.children.length,!0),this.docId&&I(this.docId,e),1===e.nodeType){x(e,this.pureChildren,this.pureChildren.length);var r=m(this.docId);if(r)return r.send("dom",{action:"addElement"},[this.ref,e.toJSON(),-1])}},insertBefore:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.nextSibling&&e.nextSibling===t))if(e.parentNode){if(E(e,this.children,this.children.indexOf(t),!0),1===e.nodeType){var n=O(t),r=E(e,this.pureChildren,n?this.pureChildren.indexOf(n):this.pureChildren.length),o=m(this.docId);if(o&&r>=0)return o.send("dom",{action:"moveElement"},[e.ref,this.ref,r])}}else if(w(e,this),x(e,this.children,this.children.indexOf(t),!0),this.docId&&I(this.docId,e),1===e.nodeType){var i=O(t),a=x(e,this.pureChildren,i?this.pureChildren.indexOf(i):this.pureChildren.length),s=m(this.docId);if(s)return s.send("dom",{action:"addElement"},[this.ref,e.toJSON(),a])}},insertAfter:function(e,t){if(!(e.parentNode&&e.parentNode!==this||e===t||e.previousSibling&&e.previousSibling===t))if(e.parentNode){if(E(e,this.children,this.children.indexOf(t)+1,!0),1===e.nodeType){var n=E(e,this.pureChildren,this.pureChildren.indexOf(S(t))+1),r=m(this.docId);if(r&&n>=0)return r.send("dom",{action:"moveElement"},[e.ref,this.ref,n])}}else if(w(e,this),x(e,this.children,this.children.indexOf(t)+1,!0),this.docId&&I(this.docId,e),1===e.nodeType){var o=x(e,this.pureChildren,this.pureChildren.indexOf(S(t))+1),i=m(this.docId);if(i)return i.send("dom",{action:"addElement"},[this.ref,e.toJSON(),o])}},removeChild:function(e,t){if(e.parentNode&&(k(e,this.children,!0),1===e.nodeType)){k(e,this.pureChildren);var n=m(this.docId);n&&n.send("dom",{action:"removeElement"},[e.ref])}t||e.destroy()},clear:function(){var e=m(this.docId);e&&this.pureChildren.forEach(function(t){e.send("dom",{action:"removeElement"},[t.ref])}),this.children.forEach(function(e){e.destroy()}),this.children.length=0,this.pureChildren.length=0},setAttr:function(e,t,n){if(this.attr[e]!==t||!1===n){this.attr[e]=t;var r=m(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateAttrs"},[this.ref,o])}}},setStyle:function(e,t,n){if(this.style[e]!==t||!1===n){this.style[e]=t;var r=m(this.docId);if(!n&&r){var o={};o[e]=t,r.send("dom",{action:"updateStyle"},[this.ref,o])}}},setClassStyle:function(e){var t=this;for(var n in this.classStyle)t.classStyle[n]="";Object.assign(this.classStyle,e);var r=m(this.docId);r&&r.send("dom",{action:"updateStyle"},[this.ref,this.toStyle()])},addEvent:function(e,t){if(!this.event[e]){this.event[e]=t;var n=m(this.docId);n&&n.send("dom",{action:"addEvent"},[this.ref,e])}},removeEvent:function(e){if(this.event[e]){delete this.event[e];var t=m(this.docId);t&&t.send("dom",{action:"removeEvent"},[this.ref,e])}},fireEvent:function(e,t){var n=this.event[e];if(n)return n.call(this,t)},toStyle:function(){return Object.assign({},this.classStyle,this.style)},toJSON:function(){var e={ref:this.ref.toString(),type:this.type,attr:this.attr,style:this.toStyle()},t=Object.keys(this.event);return t.length&&(e.event=t),this.pureChildren.length&&(e.children=this.pureChildren.map(function(e){return e.toJSON()})),e},toString:function(){return"<"+this.type+" attr="+JSON.stringify(this.attr)+" style="+JSON.stringify(this.toStyle())+">"+this.pureChildren.map(function(e){return e.toString()}).join("")+"</"+this.type+">"}});var Ms=function(){},$s=function(e,t){Object.defineProperty(this,"instanceId",{enumerable:!0,value:e}),Object.defineProperty(this,"callbackManager",{enumerable:!0,value:new js}),Ms=t||function(){}};$s.prototype.callback=function(e,t,n){return this.callbackManager.consume(e,t,n)},$s.prototype.destroyCallback=function(){return this.callbackManager.close()},$s.prototype.typof=function(e){var t=Object.prototype.toString.call(e);return t.substring(8,t.length-1).toLowerCase()},$s.prototype.normalize=function(e){switch(this.typof(e)){case"undefined":case"null":return"";case"regexp":return e.toString();case"date":return e.toISOString();case"number":case"string":case"boolean":case"array":case"object":return e instanceof A?e.ref:e;case"function":return this.callbackManager.add(e).toString();default:return JSON.stringify(e)}},$s.prototype.send=function(e,t,n){var r=this,o=t.action,i=t.component,a=t.ref,s=t.module,u=t.method;switch(n=n.map(function(e){return r.normalize(e)}),e){case"dom":return this[o](this.instanceId,n);case"component":return this.componentHandler(this.instanceId,a,u,n,{component:i});default:return this.moduleHandler(this.instanceId,s,u,n,{})}},$s.prototype.callDOM=function(e,t){return this[e](this.instanceId,t)},$s.prototype.callComponent=function(e,t,n){return this.componentHandler(this.instanceId,e,t,n,{})},$s.prototype.callModule=function(e,t,n){return this.moduleHandler(this.instanceId,e,t,n,{})};var Rs,Ds,Fs=[],Ls=/^\s*\/\/ *(\{[^}]*\}) *\r?\n/,Bs={},Us={createInstance:F,registerService:P,unregisterService:N};W.prototype=Object.create(C.prototype),W.prototype.constructor=W,W.prototype.toString=function(){return"\x3c!-- "+this.value+" --\x3e"},Object.assign(q.prototype,{createFinish:function(e){return(0,this.handler)([J("createFinish")],e)},updateFinish:function(e){return(0,this.handler)([J("updateFinish")],e)},refreshFinish:function(e){return(0,
+this.handler)([J("refreshFinish")],e)},createBody:function(e){var t=e.toJSON(),n=t.children;delete t.children;var r=[J("createBody",[t])];return n&&r.push.apply(r,n.map(function(e){return J("addElement",[t.ref,e,-1])})),this.addActions(r)},addElement:function(e,t,n){return n>=0||(n=-1),this.addActions(J("addElement",[t,e.toJSON(),n]))},removeElement:function(e){if(Array.isArray(e)){var t=e.map(function(e){return J("removeElement",[e])});return this.addActions(t)}return this.addActions(J("removeElement",[e]))},moveElement:function(e,t,n){return this.addActions(J("moveElement",[e,t,n]))},setAttr:function(e,t,n){var r={};return r[t]=n,this.addActions(J("updateAttrs",[e,r]))},setStyle:function(e,t,n){var r={};return r[t]=n,this.addActions(J("updateStyle",[e,r]))},setStyles:function(e,t){return this.addActions(J("updateStyle",[e,t]))},addEvent:function(e,t){return this.addActions(J("addEvent",[e,t]))},removeEvent:function(e,t){return this.addActions(J("removeEvent",[e,t]))},handler:function(e,t){return t&&t()},addActions:function(e){var t=this.updates,n=this.handler;if(Array.isArray(e)||(e=[e]),!this.batched)return n(e);t.push.apply(t,e)}});var Vs={createBody:"callCreateBody",addElement:"callAddElement",removeElement:"callRemoveElement",moveElement:"callMoveElement",updateAttrs:"callUpdateAttrs",updateStyle:"callUpdateStyle",addEvent:"callAddEvent",removeEvent:"callRemoveEvent"};K.handler=null,Object.assign(K.prototype,{getRef:function(e){return this.nodeMap[e]},open:function(){this.listener.batched=!1},close:function(){this.listener.batched=!0},createDocumentElement:function(){var e=this;if(!this.documentElement){var t=new A("document");t.docId=this.id,t.ownerDocument=this,t.role="documentElement",t.depth=0,t.ref="_documentElement",this.nodeMap._documentElement=t,this.documentElement=t,Object.defineProperty(t,"appendChild",{configurable:!0,enumerable:!0,writable:!0,value:function(t){_(e,t)}}),Object.defineProperty(t,"insertBefore",{configurable:!0,enumerable:!0,writable:!0,value:function(t,n){_(e,t,n)}})}return this.documentElement},createBody:function(e,t){if(!this.body){b(this,new A(e,t))}return this.body},createElement:function(e,t){return new A(e,t)},createComment:function(e){return new W(e)},fireEvent:function(e,t,n,r){if(e)return n=n||{},n.type=t,n.target=e,n.timestamp=Date.now(),r&&Z(e,r),e.fireEvent(t,n)},destroy:function(){delete this.listener,delete this.nodeMap,v(this.id)}});var zs={Document:K,Element:A,Comment:W,Listener:q,TaskCenter:$s,sendTasks:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return global.callNative.apply(global,e)}};K.handler=zs.sendTasks;var Ws,qs={setNativeConsole:n,resetNativeConsole:r,setNativeTimer:s,resetNativeTimer:u,service:{register:P,unregister:N,has:M},freezePrototype:Q,init:z,config:zs},Js={},Hs={},Gs=Y,Xs=ee,Ks=te,Zs=ne,Qs=re,Ys=oe,eu=ie,tu=ae,nu=se,ru=ue,ou={init:Gs,registerComponents:Xs,registerModules:Ks,registerMethods:Zs,prepareInstance:Qs,createInstance:Ys,refreshInstance:eu,destroyInstance:tu,getRoot:nu,receiveTasks:ru},iu=Object.freeze({default:ou,__moduleExports:ou,init:Gs,registerComponents:Xs,registerModules:Ks,registerMethods:Zs,prepareInstance:Qs,createInstance:Ys,refreshInstance:eu,destroyInstance:tu,getRoot:nu,receiveTasks:ru}),au=function(e,t){function n(e){return null==e?"":"object"==typeof e?JSON.stringify(e,null,2):String(e)}function r(e){var t=parseFloat(e);return isNaN(t)?e:t}function o(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o<r.length;o++)n[r[o]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}function i(e,t){if(e.length){var n=e.indexOf(t);if(n>-1)return e.splice(n,1)}}function a(e,t){return an.call(e,t)}function s(e){return"string"==typeof e||"number"==typeof e}function u(e){var t=Object.create(null);return function(n){return t[n]||(t[n]=e(n))}}function c(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function l(e,t){t=t||0;for(var n=e.length-t,r=new Array(n);n--;)r[n]=e[n+t];return r}function f(e,t){for(var n in t)e[n]=t[n];return e}function d(e){return null!==e&&"object"==typeof e}function p(e){return ln.call(e)===fn}function h(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function v(){}function m(e,t){var n=d(e),r=d(t);if(!n||!r)return!n&&!r&&String(e)===String(t);try{return JSON.stringify(e)===JSON.stringify(t)}catch(n){return e===t}}function y(e,t){for(var n=0;n<e.length;n++)if(m(e[n],t))return n;return-1}function _(e){var t=!1;return function(){t||(t=!0,e())}}function g(e){return/native code/.test(e.toString())}function b(e){var t=(e+"").charCodeAt(0);return 36===t||95===t}function w(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function O(e){if(!En.test(e)){var t=e.split(".");return function(e){for(var n=0;n<t.length;n++){if(!e)return;e=e[t[n]]}return e}}}function S(e){jn.target&&An.push(jn.target),jn.target=e}function x(){jn.target=An.pop()}function E(e,t){e.__proto__=t}function k(e,t,n){for(var r=0,o=n.length;r<o;r++){var i=n[r];w(e,i,t[i])}}function C(e,t){if(d(e)){var n;return a(e,"__ob__")&&e.__ob__ instanceof Mn?n=e.__ob__:Nn.shouldConvert&&!bn()&&(Array.isArray(e)||p(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Mn(e)),t&&n&&n.vmCount++,n}}function j(e,t,n,r){var o=new jn,i=Object.getOwnPropertyDescriptor(e,t);if(!i||!1!==i.configurable){var a=i&&i.get,s=i&&i.set,u=C(n);Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:function(){var t=a?a.call(e):n;return jn.target&&(o.depend(),u&&u.dep.depend(),Array.isArray(t)&&T(t)),t},set:function(t){var r=a?a.call(e):n;t===r||t!==t&&r!==r||(s?s.call(e,t):n=t,u=C(t),o.notify())}})}}function A(e,t,n){if(Array.isArray(e))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(a(e,t))return e[t]=n,n;var r=e.__ob__;return e._isVue||r&&r.vmCount?n:r?(j(r.value,t,n),r.dep.notify(),n):(e[t]=n,n)}function I(e,t){if(Array.isArray(e))return void e.splice(t,1);var n=e.__ob__;e._isVue||n&&n.vmCount||a(e,t)&&(delete e[t],n&&n.dep.notify())}function T(e){for(var t=void 0,n=0,r=e.length;n<r;n++)t=e[n],t&&t.__ob__&&t.__ob__.dep.depend(),Array.isArray(t)&&T(t)}function P(e,t){if(!t)return e;for(var n,r,o,i=Object.keys(t),s=0;s<i.length;s++)n=i[s],r=e[n],o=t[n],a(e,n)?p(r)&&p(o)&&P(r,o):A(e,n,o);return e}function N(e,t){return t?e?e.concat(t):Array.isArray(t)?t:[t]:e}function M(e,t){var n=Object.create(e||null);return t?f(n,t):n}function $(e){var t=e.props;if(t){var n,r,o,i={};if(Array.isArray(t))for(n=t.length;n--;)"string"==typeof(r=t[n])&&(o=sn(r),i[o]={type:null});else if(p(t))for(var a in t)r=t[a],o=sn(a),i[o]=p(r)?r:{type:r};e.props=i}}function R(e){var t=e.directives;if(t)for(var n in t){var r=t[n];"function"==typeof r&&(t[n]={bind:r,update:r})}}function D(e,t,n){function r(r){var o=$n[r]||Rn;l[r]=o(e[r],t[r],n,r)}$(t),R(t);var o=t.extends;if(o&&(e="function"==typeof o?D(e,o.options,n):D(e,o,n)),t.mixins)for(var i=0,s=t.mixins.length;i<s;i++){var u=t.mixins[i];u.prototype instanceof rt&&(u=u.options),e=D(e,u,n)}var c,l={};for(c in e)r(c);for(c in t)a(e,c)||r(c);return l}function F(e,t,n,r){if("string"==typeof n){var o=e[t];if(a(o,n))return o[n];var i=sn(n);if(a(o,i))return o[i];var s=un(i);if(a(o,s))return o[s];var u=o[n]||o[i]||o[s];return u}}function L(e,t,n,r){var o=t[e],i=!a(n,e),s=n[e];if(V(Boolean,o.type)&&(i&&!a(o,"default")?s=!1:V(String,o.type)||""!==s&&s!==cn(e)||(s=!0)),void 0===s){s=B(r,o,e);var u=Nn.shouldConvert;Nn.shouldConvert=!0,C(s),Nn.shouldConvert=u}return s}function B(e,t,n){if(a(t,"default")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:"function"==typeof r&&"Function"!==U(t.type)?r.call(e):r}}function U(e){var t=e&&e.toString().match(/^\s*function (\w+)/);return t&&t[1]}function V(e,t){if(!Array.isArray(t))return U(t)===U(e);for(var n=0,r=t.length;n<r;n++)if(U(t[n])===U(e))return!0;return!1}function z(e,t,n){if(hn.errorHandler)hn.errorHandler.call(null,e,t,n);else{if(!mn||"undefined"==typeof console)throw e;console.error(e)}}function W(e){return new Dn(void 0,void 0,void 0,String(e))}function q(e){var t=new Dn(e.tag,e.data,e.children,e.text,e.elm,e.context,e.componentOptions);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isCloned=!0,t}function J(e){for(var t=e.length,n=new Array(t),r=0;r<t;r++)n[r]=q(e[r]);return n}function H(e){function t(){var e=arguments,n=t.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,e)}return t.fns=e,t}function G(e,t,n,r,o){var i,a,s,u;for(i in e)a=e[i],s=t[i],u=Un(i),a&&(s?a!==s&&(s.fns=a,e[i]=s):(a.fns||(a=e[i]=H(a)),n(u.name,a,u.once,u.capture)));for(i in t)e[i]||(u=Un(i),r(u.name,t[i],u.capture))}function X(e,t,n){function r(){n.apply(this,arguments),i(o.fns,r)}var o,a=e[t];a?a.fns&&a.merged?(o=a,o.fns.push(r)):o=H([a,r]):o=H([r]),o.merged=!0,e[t]=o}function K(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}function Z(e){return s(e)?[W(e)]:Array.isArray(e)?Q(e):void 0}function Q(e,t){var n,r,o,i=[];for(n=0;n<e.length;n++)null!=(r=e[n])&&"boolean"!=typeof r&&(o=i[i.length-1],Array.isArray(r)?i.push.apply(i,Q(r,(t||"")+"_"+n)):s(r)?o&&o.text?o.text+=String(r):""!==r&&i.push(W(r)):r.text&&o&&o.text?i[i.length-1]=W(o.text+r.text):(r.tag&&null==r.key&&null!=t&&(r.key="__vlist"+t+"_"+n+"__"),i.push(r)));return i}function Y(e){return e&&e.filter(function(e){return e&&e.componentOptions})[0]}function ee(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&re(e,t)}function te(e,t,n){n?Ln.$once(e,t):Ln.$on(e,t)}function ne(e,t){Ln.$off(e,t)}function re(e,t,n){Ln=e,G(t,n||{},te,ne,e)}function oe(e,t){var n={};if(!e)return n;for(var r,o,i=[],a=0,s=e.length;a<s;a++)if(o=e[a],(o.context===t||o.functionalContext===t)&&o.data&&(r=o.data.slot)){var u=n[r]||(n[r]=[]);"template"===o.tag?u.push.apply(u,o.children):u.push(o)}else i.push(o);return i.every(ie)||(n.default=i),n}function ie(e){return e.isComment||" "===e.text}function ae(e){for(var t={},n=0;n<e.length;n++)t[e[n][0]]=e[n][1];return t}function se(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}function ue(e,t,n){e.$el=t,e.$options.render||(e.$options.render=Bn),pe(e,"beforeMount");var r;return r=function(){e._update(e._render(),n)},e._watcher=new Kn(e,r,v),n=!1,null==e.$vnode&&(e._isMounted=!0,pe(e,"mounted")),e}function ce(e,t,n,r,o){var i=!!(o||e.$options._renderChildren||r.data.scopedSlots||e.$scopedSlots!==xn);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=o,t&&e.$options.props){Nn.shouldConvert=!1;for(var a=e._props,s=e.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=L(c,e.$options.props,t,e)}Nn.shouldConvert=!0,e.$options.propsData=t}if(n){var l=e.$options._parentListeners;e.$options._parentListeners=n,re(e,n,l)}i&&(e.$slots=oe(o,r.context),e.$forceUpdate())}function le(e){for(;e&&(e=e.$parent);)if(e._inactive)return!0;return!1}function fe(e,t){if(t){if(e._directInactive=!1,le(e))return}else if(e._directInactive)return;if(e._inactive||null==e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)fe(e.$children[n]);pe(e,"activated")}}function de(e,t){if(!(t&&(e._directInactive=!0,le(e))||e._inactive)){e._inactive=!0;for(var n=0;n<e.$children.length;n++)de(e.$children[n]);pe(e,"deactivated")}}function pe(e,t){var n=e.$options[t];if(n)for(var r=0,o=n.length;r<o;r++)try{n[r].call(e)}catch(n){z(n,e,t+" hook")}e._hasHookEvent&&e.$emit("hook:"+t)}function he(){zn.length=0,Wn={},qn=Hn=!1}function ve(){Hn=!0;var e,t,n;for(zn.sort(function(e,t){return e.id-t.id}),Gn=0;Gn<zn.length;Gn++)e=zn[Gn],t=e.id,Wn[t]=null,e.run();for(Gn=zn.length;Gn--;)e=zn[Gn],n=e.vm,n._watcher===e&&n._isMounted&&pe(n,"updated");wn&&hn.devtools&&wn.emit("flush"),he()}function me(e){var t=e.id;if(null==Wn[t]){if(Wn[t]=!0,Hn){for(var n=zn.length-1;n>=0&&zn[n].id>e.id;)n--;zn.splice(Math.max(n,Gn)+1,0,e)}else zn.push(e);qn||(qn=!0,Sn(ve))}}function ye(e){Zn.clear(),_e(e,Zn)}function _e(e,t){var n,r,o=Array.isArray(e);if((o||d(e))&&Object.isExtensible(e)){if(e.__ob__){var i=e.__ob__.dep.id;if(t.has(i))return;t.add(i)}if(o)for(n=e.length;n--;)_e(e[n],t);else for(r=Object.keys(e),n=r.length;n--;)_e(e[r[n]],t)}}function ge(e,t,n){Qn.get=function(){return this[t][n]},Qn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Qn)}function be(e){e._watchers=[];var t=e.$options;t.props&&we(e,t.props),t.methods&&ke(e,t.methods),t.data?Oe(e):C(e._data={},!0),t.computed&&Se(e,t.computed),t.watch&&Ce(e,t.watch)}function we(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;Nn.shouldConvert=i;for(var a in t)!function(i){o.push(i);var a=L(i,t,n,e);j(r,i,a),i in e||ge(e,"_props",i)}(a);Nn.shouldConvert=!0}function Oe(e){var t=e.$options.data;t=e._data="function"==typeof t?t.call(e):t||{},p(t)||(t={});for(var n=Object.keys(t),r=e.$options.props,o=n.length;o--;)r&&a(r,n[o])||b(n[o])||ge(e,"_data",n[o]);C(t,!0)}function Se(e,t){var n=e._computedWatchers=Object.create(null);for(var r in t){var o=t[r],i="function"==typeof o?o:o.get;n[r]=new Kn(e,i,v,Yn),r in e||xe(e,r,o)}}function xe(e,t,n){"function"==typeof n?(Qn.get=Ee(t),Qn.set=v):(Qn.get=n.get?!1!==n.cache?Ee(t):n.get:v,Qn.set=n.set?n.set:v),Object.defineProperty(e,t,Qn)}function Ee(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),jn.target&&t.depend(),t.value}}function ke(e,t){e.$options.props;for(var n in t)e[n]=null==t[n]?v:c(t[n],e)}function Ce(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o<r.length;o++)je(e,n,r[o]);else je(e,n,r)}}function je(e,t,n){var r;p(n)&&(r=n,n=n.handler),"string"==typeof n&&(n=e[n]),e.$watch(t,n,r)}function Ae(e,t,n,r,o){if(e){var i=n.$options._base;if(d(e)&&(e=i.extend(e)),"function"==typeof e){if(!e.cid)if(e.resolved)e=e.resolved;else if(!(e=Pe(e,i,function(){n.$forceUpdate()})))return;et(e),t=t||{},t.model&&De(e.options,t);var a=Ne(t,e);if(e.options.functional)return Ie(e,a,t,n,r);var s=t.on;t.on=t.nativeOn,e.options.abstract&&(t={}),$e(t);var u=e.options.name||o;return new Dn("vue-component-"+e.cid+(u?"-"+u:""),t,void 0,void 0,void 0,n,{Ctor:e,propsData:a,listeners:s,tag:o,children:r})}}}function Ie(e,t,n,r,o){var i={},a=e.options.props;if(a)for(var s in a)i[s]=L(s,a,t);var u=Object.create(r),c=function(e,t,n,r){return Fe(u,e,t,n,r,!0)},l=e.options.render.call(null,c,{props:i,data:n,parent:r,children:o,slots:function(){return oe(o,r)}});return l instanceof Dn&&(l.functionalContext=r,n.slot&&((l.data||(l.data={})).slot=n.slot)),l}function Te(e,t,n,r){var o=e.componentOptions,i={_isComponent:!0,parent:t,propsData:o.propsData,_componentTag:o.tag,_parentVnode:e,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:r||null},a=e.data.inlineTemplate;return a&&(i.render=a.render,i.staticRenderFns=a.staticRenderFns),new o.Ctor(i)}function Pe(e,t,n){if(!e.requested){e.requested=!0;var r=e.pendingCallbacks=[n],o=!0,i=function(n){if(d(n)&&(n=t.extend(n)),e.resolved=n,!o)for(var i=0,a=r.length;i<a;i++)r[i](n)},a=function(e){},s=e(i,a);return s&&"function"==typeof s.then&&!e.resolved&&s.then(i,a),o=!1,e.resolved}e.pendingCallbacks.push(n)}function Ne(e,t){var n=t.options.props;if(n){var r={},o=e.attrs,i=e.props,a=e.domProps;if(o||i||a)for(var s in n){var u=cn(s);Me(r,i,s,u,!0)||Me(r,o,s,u)||Me(r,a,s,u)}return r}}function Me(e,t,n,r,o){if(t){if(a(t,n))return e[n]=t[n],o||delete t[n],!0;if(a(t,r))return e[n]=t[r],o||delete t[r],!0}return!1}function $e(e){e.hook||(e.hook={});for(var t=0;t<tr.length;t++){var n=tr[t],r=e.hook[n],o=er[n];e.hook[n]=r?Re(o,r):o}}function Re(e,t){return function(n,r,o,i){e(n,r,o,i),t(n,r,o,i)}}function De(e,t){var n=e.model&&e.model.prop||"value",r=e.model&&e.model.event||"input";(t.props||(t.props={}))[n]=t.model.value;var o=t.on||(t.on={});o[r]?o[r]=[t.model.callback].concat(o[r]):o[r]=t.model.callback}function Fe(e,t,n,r,o,i){return(Array.isArray(n)||s(n))&&(o=r,r=n,n=void 0),i&&(o=rr),Le(e,t,n,r,o)}function Le(e,t,n,r,o){if(n&&n.__ob__)return Bn();if(!t)return Bn();Array.isArray(r)&&"function"==typeof r[0]&&(n=n||{},n.scopedSlots={default:r[0]},r.length=0),o===rr?r=Z(r):o===nr&&(r=K(r));var i,a;if("string"==typeof t){var s;a=hn.getTagNamespace(t),i=hn.isReservedTag(t)?new Dn(hn.parsePlatformTagName(t),n,r,void 0,void 0,e):(s=F(e.$options,"components",t))?Ae(s,n,e,r,t):new Dn(t,n,r,void 0,void 0,e)}else i=Ae(t,n,e,r);return i?(a&&Be(i,a),i):Bn()}function Be(e,t){if(e.ns=t,"foreignObject"!==e.tag&&e.children)for(var n=0,r=e.children.length;n<r;n++){var o=e.children[n];o.tag&&!o.ns&&Be(o,t)}}function Ue(e,t){var n,r,o,i,a;if(Array.isArray(e)||"string"==typeof e)for(n=new Array(e.length),r=0,o=e.length;r<o;r++)n[r]=t(e[r],r);else if("number"==typeof e)for(n=new Array(e),r=0;r<e;r++)n[r]=t(r+1,r);else if(d(e))for(i=Object.keys(e),n=new Array(i.length),r=0,o=i.length;r<o;r++)a=i[r],n[r]=t(e[a],a,r);return n}function Ve(e,t,n,r){var o=this.$scopedSlots[e];if(o)return n=n||{},r&&f(n,r),o(n)||t;var i=this.$slots[e];return i||t}function ze(e){return F(this.$options,"filters",e,!0)||pn}function We(e,t,n){var r=hn.keyCodes[t]||n;return Array.isArray(r)?-1===r.indexOf(e):r!==e}function qe(e,t,n,r){if(n)if(d(n)){Array.isArray(n)&&(n=h(n));var o;for(var i in n){if("class"===i||"style"===i)o=e;else{var a=e.attrs&&e.attrs.type;o=r||hn.mustUseProp(t,a,i)?e.domProps||(e.domProps={}):e.attrs||(e.attrs={})}i in o||(o[i]=n[i])}}else;return e}function Je(e,t){var n=this._staticTrees[e];return n&&!t?Array.isArray(n)?J(n):q(n):(n=this._staticTrees[e]=this.$options.staticRenderFns[e].call(this._renderProxy),Ge(n,"__static__"+e,!1),n)}function He(e,t,n){return Ge(e,"__once__"+t+(n?"_"+n:""),!0),e}function Ge(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&"string"!=typeof e[r]&&Xe(e[r],t+"_"+r,n);else Xe(e,t,n)}function Xe(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function Ke(e){e.$vnode=null,e._vnode=null,e._staticTrees=null;var t=e.$options._parentVnode,n=t&&t.context;e.$slots=oe(e.$options._renderChildren,n),e.$scopedSlots=xn,e._c=function(t,n,r,o){return Fe(e,t,n,r,o,!1)},e.$createElement=function(t,n,r,o){return Fe(e,t,n,r,o,!0)}}function Ze(e){var t=e.$options.provide;t&&(e._provided="function"==typeof t?t.call(e):t)}function Qe(e){var t=e.$options.inject;if(t)for(var n=Array.isArray(t),r=n?t:On?Reflect.ownKeys(t):Object.keys(t),o=0;o<r.length;o++)for(var i=r[o],a=n?i:t[i],s=e;s;){if(s._provided&&a in s._provided){e[i]=s._provided[a];break}s=s.$parent}}function Ye(e,t){var n=e.$options=Object.create(e.constructor.options);n.parent=t.parent,n.propsData=t.propsData,n._parentVnode=t._parentVnode,n._parentListeners=t._parentListeners,n._renderChildren=t._renderChildren,n._componentTag=t._componentTag,n._parentElm=t._parentElm,n._refElm=t._refElm,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}function et(e){var t=e.options;if(e.super){var n=et(e.super);if(n!==e.superOptions){e.superOptions=n;var r=tt(e);r&&f(e.extendOptions,r),t=e.options=D(n,e.extendOptions),t.name&&(t.components[t.name]=e)}}return t}function tt(e){var t,n=e.options,r=e.sealedOptions;for(var o in n)n[o]!==r[o]&&(t||(t={}),t[o]=nt(n[o],r[o]));return t}function nt(e,t){if(Array.isArray(e)){var n=[];t=Array.isArray(t)?t:[t];for(var r=0;r<e.length;r++)t.indexOf(e[r])<0&&n.push(e[r]);return n}return e}function rt(e){this._init(e)}function ot(e){e.use=function(e){if(!e.installed){var t=l(arguments,1);return t.unshift(this),"function"==typeof e.install?e.install.apply(e,t):"function"==typeof e&&e.apply(null,t),e.installed=!0,this}}}function it(e){e.mixin=function(e){this.options=D(this.options,e)}}function at(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name,a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=D(n.options,e),a.super=n,a.options.props&&st(a),a.options.computed&&ut(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,hn._assetTypes.forEach(function(e){a[e]=n[e]}),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=f({},a.options),o[r]=a,a}}function st(e){var t=e.options.props;for(var n in t)ge(e.prototype,"_props",n)}function ut(e){var t=e.options.computed;for(var n in t)xe(e.prototype,n,t[n])}function ct(e){hn._assetTypes.forEach(function(t){e[t]=function(e,n){return n?("component"===t&&p(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"==typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}})}function lt(e){return e&&(e.Ctor.options.name||e.tag)}function ft(e,t){return"string"==typeof e?e.split(",").indexOf(t)>-1:e instanceof RegExp&&e.test(t)}function dt(e,t){for(var n in e){var r=e[n];if(r){var o=lt(r.componentOptions);o&&!t(o)&&(pt(r),e[n]=null)}}}function pt(e){e&&(e.componentInstance._inactive||pe(e.componentInstance,"deactivated"),e.componentInstance.$destroy())}function ht(e){return new t.Element(e)}function vt(e,n){return new t.Element(e+":"+n)}function mt(e){return new t.TextNode(e)}function yt(e){return new t.Comment(e)}function _t(e,t,n){if(3!==t.nodeType)e.insertBefore(t,n);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var r=ht("text");r.setAttr("value",t.text),e.insertBefore(r,n)}}function gt(e,t){if(3===t.nodeType)return void e.setAttr("value","");e.removeChild(t)}function bt(e,t){if(3!==t.nodeType)e.appendChild(t);else if("text"===e.type)e.setAttr("value",t.text),t.parentNode=e;else{var n=ht("text");n.setAttr("value",t.text),e.appendChild(n)}}function wt(e){return e.parentNode}function Ot(e){return e.nextSibling}function St(e){return e.type}function xt(e,t){e.parentNode.setAttr("value",t)}function Et(e,t,n){e.setAttr(t,n)}function kt(e,t){var n=e.data.ref;if(n){var r=e.context,o=e.componentInstance||e.elm,a=r.$refs;t?Array.isArray(a[n])?i(a[n],o):a[n]===o&&(a[n]=void 0):e.data.refInFor?Array.isArray(a[n])&&a[n].indexOf(o)<0?a[n].push(o):a[n]=[o]:a[n]=o}}function Ct(e){return null==e}function jt(e){return null!=e}function At(e,t){return e.key===t.key&&e.tag===t.tag&&e.isComment===t.isComment&&!e.data==!t.data}function It(e,t,n){var r,o,i={};for(r=t;r<=n;++r)o=e[r].key,jt(o)&&(i[o]=r);return i}function Tt(e,t){(e.data.directives||t.data.directives)&&Pt(e,t)}function Pt(e,t){var n,r,o,i=e===dr,a=t===dr,s=Nt(e.data.directives,e.context),u=Nt(t.data.directives,t.context),c=[],l=[];for(n in u)r=s[n],o=u[n],r?(o.oldValue=r.value,$t(o,"update",t,e),o.def&&o.def.componentUpdated&&l.push(o)):($t(o,"bind",t,e),o.def&&o.def.inserted&&c.push(o));if(c.length){var f=function(){for(var n=0;n<c.length;n++)$t(c[n],"inserted",t,e)};i?X(t.data.hook||(t.data.hook={}),"insert",f):f()}if(l.length&&X(t.data.hook||(t.data.hook={}),"postpatch",function(){for(var n=0;n<l.length;n++)$t(l[n],"componentUpdated",t,e)}),!i)for(n in s)u[n]||$t(s[n],"unbind",e,e,a)}function Nt(e,t){var n=Object.create(null);if(!e)return n;var r,o;for(r=0;r<e.length;r++)o=e[r],o.modifiers||(o.modifiers=vr),n[Mt(o)]=o,o.def=F(t.$options,"directives",o.name,!0);return n}function Mt(e){return e.rawName||e.name+"."+Object.keys(e.modifiers||{}).join(".")}function $t(e,t,n,r,o){var i=e.def&&e.def[t];i&&i(n.elm,e,n,r,o)}function Rt(e,t){if(e.data.attrs||t.data.attrs){var n,r,o=t.elm,i=e.data.attrs||{},a=t.data.attrs||{};a.__ob__&&(a=t.data.attrs=f({},a));for(n in a)r=a[n],i[n]!==r&&o.setAttr(n,r);for(n in i)null==a[n]&&o.setAttr(n)}}function Dt(e,t){var n=t.elm,r=t.context,o=t.data,i=e.data;if(o.staticClass||o.class||i&&(i.staticClass||i.class)){var a=[],s=i.staticClass;s&&a.push.apply(a,s),i.class&&a.push.apply(a,i.class);var u=[],c=o.staticClass;c&&u.push.apply(u,c),o.class&&u.push.apply(u,o.class);var l=Ft(a,u,r);for(var f in l)n.setStyle(f,l[f])}}function Ft(e,t,n){var r=n.$options.style||{},o={};return t.forEach(function(e){f(o,r[e])}),e.forEach(function(e){var t=r[e];for(var n in t)o.hasOwnProperty(n)||(o[n]="")}),o}function Lt(e,t,n,r){if(r)return void console.log("Weex do not support event in bubble phase.");if(n){var o=t,i=ur;t=function(t){null!==(1===arguments.length?o(t):o.apply(null,arguments))&&Bt(e,null,null,i)}}ur.addEvent(e,t)}function Bt(e,t,n,r){(r||ur).removeEvent(e)}function Ut(e,t){if(e.data.on||t.data.on){var n=t.data.on||{},r=e.data.on||{};ur=t.elm,G(n,r,Lt,Bt,t.context)}}function Vt(e,t){if(!t.data.staticStyle)return void zt(e,t);var n=t.elm,r=t.data.staticStyle;for(var o in r)r[o]&&n.setStyle(br(o),r[o]);zt(e,t)}function zt(e,t){if(e.data.style||t.data.style){var n,r,o=t.elm,i=e.data.style||{},a=t.data.style||{},s=a.__ob__;Array.isArray(a)&&(a=t.data.style=Wt(a)),s&&(a=t.data.style=f({},a));for(r in i)a[r]||o.setStyle(br(r),"");for(r in a)n=a[r],o.setStyle(br(r),n)}}function Wt(e){for(var t={},n=0;n<e.length;n++)e[n]&&f(t,e[n]);return t}function qt(e){if(e){if("object"==typeof e){var t={};return!1!==e.css&&f(t,Or(e.name||"v")),f(t,e),t}return"string"==typeof e?Or(e):void 0}}function Jt(e,t){var n=t.elm;n._leaveCb&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=qt(t.data.transition);if(r&&!n._enterCb){for(var o=r.enterClass,i=r.enterToClass,a=r.enterActiveClass,s=r.appearClass,u=r.appearToClass,c=r.appearActiveClass,l=r.beforeEnter,f=r.enter,d=r.afterEnter,p=r.enterCancelled,h=r.beforeAppear,m=r.appear,y=r.afterAppear,g=r.appearCancelled,b=Vn,w=Vn.$vnode;w&&w.parent;)w=w.parent,b=w.context;var O=!b._isMounted||!t.isRootInsert;if(!O||m||""===m){var S=O?s:o,x=O?u:i,E=O?c:a,k=O?h||l:l,C=O&&"function"==typeof m?m:f,j=O?y||d:d,A=O?g||p:p,I=C&&(C._length||C.length)>1,T=t.context.$options.style||{},P=T[S],N=T["@TRANSITION"]&&T["@TRANSITION"][E]||{},M=Gt(n,T,S,x,E,t.context),$=Object.keys(M).length>0,R=n._enterCb=_(function(){R.cancelled?A&&A(n):j&&j(n),n._enterCb=null});if(setTimeout(function(){var e=n.parentNode,r=e&&e._pending&&e._pending[t.key];if(r&&r.context===t.context&&r.tag===t.tag&&r.elm._leaveCb&&r.elm._leaveCb(),C&&C(n,R),$){t.context.$requireWeexModule("animation").transition(n.ref,{styles:M,duration:N.duration||0,delay:N.delay||0,timingFunction:N.timingFunction||"linear"},I?v:R)}else I||R()},16),k&&k(n),P)for(var D in P)n.setStyle(D,P[D]);$||I||R()}}}function Ht(e,t){function n(){function t(){n.transition(r.ref,{styles:y,duration:g.duration||0,delay:g.delay||0,timingFunction:g.timingFunction||"linear"},p?v:b)}var n=e.context.$requireWeexModule("animation");b.cancelled||(e.data.show||((r.parentNode._pending||(r.parentNode._pending={}))[e.key]=e),u&&u(r),m?n.transition(r.ref,{styles:m},t):t(),c&&c(r,b),y||p||b())}var r=e.elm;r._enterCb&&(r._enterCb.cancelled=!0,r._enterCb());var o=qt(e.data.transition);if(!o)return t();if(!r._leaveCb){var i=o.leaveClass,a=o.leaveToClass,s=o.leaveActiveClass,u=o.beforeLeave,c=o.leave,l=o.afterLeave,f=o.leaveCancelled,d=o.delayLeave,p=c&&(c._length||c.length)>1,h=e.context.$options.style||{},m=h[i],y=h[a]||h[s],g=h["@TRANSITION"]&&h["@TRANSITION"][s]||{},b=r._leaveCb=_(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[e.key]=null),b.cancelled?f&&f(r):(t(),l&&l(r)),r._leaveCb=null});d?d(n):n()}}function Gt(e,t,n,r,o,i){var a={},s=t[n],u=t[r],c=t[o];if(s)for(var l in s)a[l]=e.style[l];if(c)for(var d in c)0!==d.indexOf("transition")&&(a[d]=c[d]);return u&&f(a,u),a}function Xt(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Xt(Y(t.children)):e}function Kt(e){var t={},n=e.$options;for(var r in n.propsData)t[r]=e[r];var o=n._parentListeners;for(var i in o)t[sn(i)]=o[i];return t}function Zt(e,t){return/\d-keep-alive$/.test(t.tag)?e("keep-alive"):null}function Qt(e){for(;e=e.parent;)if(e.data.transition)return!0}function Yt(e,t){return t.key===e.key&&t.tag===e.tag}function en(){}function tn(){}function nn(e,n){var r=new t.Comment("root");return r.hasAttribute=r.removeAttribute=function(){},n.documentElement.appendChild(r),r}var rn,on,an=(o("slot,component",!0),Object.prototype.hasOwnProperty),sn=u(function(e){return e.replace(/-(\w)/g,function(e,t){return t?t.toUpperCase():""})}),un=u(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),cn=u(function(e){return e.replace(/([^-])([A-Z])/g,"$1-$2").replace(/([^-])([A-Z])/g,"$1-$2").toLowerCase()}),ln=Object.prototype.toString,fn="[object Object]",dn=function(){return!1},pn=function(e){return e},hn={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:dn,isUnknownElement:dn,getTagNamespace:v,parsePlatformTagName:pn,mustUseProp:dn,_assetTypes:["component","directive","filter"],_lifecycleHooks:["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated"],_maxUpdateCount:100},vn="__proto__"in{},mn="undefined"!=typeof window,yn=mn&&window.navigator.userAgent.toLowerCase(),_n=(yn&&/msie|trident/.test(yn),yn&&yn.indexOf("msie 9.0"),yn&&yn.indexOf("edge/")>0),gn=(yn&&yn.indexOf("android"),yn&&/iphone|ipad|ipod|ios/.test(yn)),bn=(yn&&/chrome\/\d+/.test(yn),function(){return void 0===rn&&(rn=!mn&&void 0!==Jn&&"server"===Jn.process.env.VUE_ENV),rn}),wn=mn&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,On="undefined"!=typeof Symbol&&g(Symbol)&&"undefined"!=typeof Reflect&&g(Reflect.ownKeys),Sn=function(){function e(){r=!1;var e=n.slice(0);n.length=0;for(var t=0;t<e.length;t++)e[t]()}var t,n=[],r=!1;if("undefined"!=typeof Promise&&g(Promise)){var o=Promise.resolve(),i=function(e){console.error(e)};t=function(){o.then(e).catch(i),gn&&setTimeout(v)}}else if("undefined"==typeof MutationObserver||!g(MutationObserver)&&"[object MutationObserverConstructor]"!==MutationObserver.toString())t=function(){setTimeout(e,0)};else{var a=1,s=new MutationObserver(e),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),t=function(){a=(a+1)%2,u.data=String(a)}}return function(e,o){var i;if(n.push(function(){e&&e.call(o),i&&i(o)}),r||(r=!0,t()),!e&&"undefined"!=typeof Promise)return new Promise(function(e){i=e})}}();on="undefined"!=typeof Set&&g(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var xn=Object.freeze({}),En=/[^\w.$]/,kn=v,Cn=0,jn=function(){this.id=Cn++,this.subs=[]};jn.prototype.addSub=function(e){this.subs.push(e)},jn.prototype.removeSub=function(e){i(this.subs,e)},jn.prototype.depend=function(){jn.target&&jn.target.addDep(this)},jn.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},jn.target=null;var An=[],In=Array.prototype,Tn=Object.create(In);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=In[e];w(Tn,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})});var Pn=Object.getOwnPropertyNames(Tn),Nn={shouldConvert:!0,isSettingProps:!1},Mn=function(e){if(this.value=e,this.dep=new jn,this.vmCount=0,w(e,"__ob__",this),Array.isArray(e)){(vn?E:k)(e,Tn,Pn),this.observeArray(e)}else this.walk(e)};Mn.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)j(e,t[n],e[t[n]])},Mn.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)C(e[t])};var $n=hn.optionMergeStrategies;$n.data=function(e,t,n){return n?e||t?function(){var r="function"==typeof t?t.call(n):t,o="function"==typeof e?e.call(n):void 0;return r?P(r,o):o}:void 0:t?"function"!=typeof t?e:e?function(){
+return P(t.call(this),e.call(this))}:t:e},hn._lifecycleHooks.forEach(function(e){$n[e]=N}),hn._assetTypes.forEach(function(e){$n[e+"s"]=M}),$n.watch=function(e,t){if(!t)return Object.create(e||null);if(!e)return t;var n={};f(n,e);for(var r in t){var o=n[r],i=t[r];o&&!Array.isArray(o)&&(o=[o]),n[r]=o?o.concat(i):[i]}return n},$n.props=$n.methods=$n.computed=function(e,t){if(!t)return Object.create(e||null);if(!e)return t;var n=Object.create(null);return f(n,e),f(n,t),n};var Rn=function(e,t){return void 0===t?e:t},Dn=function(e,t,n,r,o,i,a){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=o,this.ns=void 0,this.context=i,this.functionalContext=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},Fn={child:{}};Fn.child.get=function(){return this.componentInstance},Object.defineProperties(Dn.prototype,Fn);var Ln,Bn=function(){var e=new Dn;return e.text="",e.isComment=!0,e},Un=u(function(e){var t="~"===e.charAt(0);e=t?e.slice(1):e;var n="!"===e.charAt(0);return e=n?e.slice(1):e,{name:e,once:t,capture:n}}),Vn=null,zn=[],Wn={},qn=!1,Hn=!1,Gn=0,Xn=0,Kn=function(e,t,n,r){this.vm=e,e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Xn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new on,this.newDepIds=new on,this.expression="","function"==typeof t?this.getter=t:(this.getter=O(t),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Kn.prototype.get=function(){S(this);var e,t=this.vm;if(this.user)try{e=this.getter.call(t,t)}catch(e){z(e,t,'getter for watcher "'+this.expression+'"')}else e=this.getter.call(t,t);return this.deep&&ye(e),x(),this.cleanupDeps(),e},Kn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Kn.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Kn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():me(this)},Kn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||d(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){z(e,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Kn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Kn.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Kn.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||i(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1}};var Zn=new on,Qn={enumerable:!0,configurable:!0,get:v,set:v},Yn={lazy:!0},er={init:function(e,t,n,r){if(!e.componentInstance||e.componentInstance._isDestroyed){(e.componentInstance=Te(e,Vn,n,r)).$mount(t?e.elm:void 0,t)}else if(e.data.keepAlive){var o=e;er.prepatch(o,o)}},prepatch:function(e,t){var n=t.componentOptions;ce(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){e.componentInstance._isMounted||(e.componentInstance._isMounted=!0,pe(e.componentInstance,"mounted")),e.data.keepAlive&&fe(e.componentInstance,!0)},destroy:function(e){e.componentInstance._isDestroyed||(e.data.keepAlive?de(e.componentInstance,!0):e.componentInstance.$destroy())}},tr=Object.keys(er),nr=1,rr=2,or=0;!function(e){e.prototype._init=function(e){var t=this;t._uid=or++,t._isVue=!0,e&&e._isComponent?Ye(t,e):t.$options=D(et(t.constructor),e||{},t),t._renderProxy=t,t._self=t,se(t),ee(t),Ke(t),pe(t,"beforeCreate"),Qe(t),be(t),Ze(t),pe(t,"created"),t.$options.el&&t.$mount(t.$options.el)}}(rt),function(e){var t={};t.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(e.prototype,"$data",t),Object.defineProperty(e.prototype,"$props",n),e.prototype.$set=A,e.prototype.$delete=I,e.prototype.$watch=function(e,t,n){var r=this;n=n||{},n.user=!0;var o=new Kn(r,e,t,n);return n.immediate&&t.call(r,o.value),function(){o.teardown()}}}(rt),function(e){var t=/^hook:/;e.prototype.$on=function(e,n){var r=this,o=this;if(Array.isArray(e))for(var i=0,a=e.length;i<a;i++)r.$on(e[i],n);else(o._events[e]||(o._events[e]=[])).push(n),t.test(e)&&(o._hasHookEvent=!0);return o},e.prototype.$once=function(e,t){function n(){r.$off(e,n),t.apply(r,arguments)}var r=this;return n.fn=t,r.$on(e,n),r},e.prototype.$off=function(e,t){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(e)){for(var o=0,i=e.length;o<i;o++)n.$off(e[o],t);return r}var a=r._events[e];if(!a)return r;if(1===arguments.length)return r._events[e]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===t||s.fn===t){a.splice(u,1);break}return r},e.prototype.$emit=function(e){var t=this,n=t._events[e];if(n){n=n.length>1?l(n):n;for(var r=l(arguments,1),o=0,i=n.length;o<i;o++)n[o].apply(t,r)}return t}}(rt),function(e){e.prototype._update=function(e,t){var n=this;n._isMounted&&pe(n,"beforeUpdate");var r=n.$el,o=n._vnode,i=Vn;Vn=n,n._vnode=e,n.$el=o?n.__patch__(o,e):n.__patch__(n.$el,e,t,!1,n.$options._parentElm,n.$options._refElm),Vn=i,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},e.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},e.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){pe(e,"beforeDestroy"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||i(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,pe(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.__patch__(e._vnode,null)}}}(rt),function(e){e.prototype.$nextTick=function(e){return Sn(e,this)},e.prototype._render=function(){var e=this,t=e.$options,n=t.render,r=t.staticRenderFns,o=t._parentVnode;if(e._isMounted)for(var i in e.$slots)e.$slots[i]=J(e.$slots[i]);e.$scopedSlots=o&&o.data.scopedSlots||xn,r&&!e._staticTrees&&(e._staticTrees=[]),e.$vnode=o;var a;try{a=n.call(e._renderProxy,e.$createElement)}catch(t){z(t,e,"render function"),a=e._vnode}return a instanceof Dn||(a=Bn()),a.parent=o,a},e.prototype._o=He,e.prototype._n=r,e.prototype._s=n,e.prototype._l=Ue,e.prototype._t=Ve,e.prototype._q=m,e.prototype._i=y,e.prototype._m=Je,e.prototype._f=ze,e.prototype._k=We,e.prototype._b=qe,e.prototype._v=W,e.prototype._e=Bn,e.prototype._u=ae}(rt);var ir=[String,RegExp],ar={name:"keep-alive",abstract:!0,props:{include:ir,exclude:ir},created:function(){this.cache=Object.create(null)},destroyed:function(){var e=this;for(var t in e.cache)pt(e.cache[t])},watch:{include:function(e){dt(this.cache,function(t){return ft(e,t)})},exclude:function(e){dt(this.cache,function(t){return!ft(e,t)})}},render:function(){var e=Y(this.$slots.default),t=e&&e.componentOptions;if(t){var n=lt(t);if(n&&(this.include&&!ft(this.include,n)||this.exclude&&ft(this.exclude,n)))return e;var r=null==e.key?t.Ctor.cid+(t.tag?"::"+t.tag:""):e.key;this.cache[r]?e.componentInstance=this.cache[r].componentInstance:this.cache[r]=e,e.data.keepAlive=!0}return e}},sr={KeepAlive:ar};!function(e){var t={};t.get=function(){return hn},Object.defineProperty(e,"config",t),e.util={warn:kn,extend:f,mergeOptions:D,defineReactive:j},e.set=A,e.delete=I,e.nextTick=Sn,e.options=Object.create(null),hn._assetTypes.forEach(function(t){e.options[t+"s"]=Object.create(null)}),e.options._base=e,f(e.options.components,sr),ot(e),it(e),at(e),ct(e)}(rt),Object.defineProperty(rt.prototype,"$isServer",{get:bn}),rt.version="2.2.2";var ur,cr={},lr=Object.freeze({namespaceMap:cr,createElement:ht,createElementNS:vt,createTextNode:mt,createComment:yt,insertBefore:_t,removeChild:gt,appendChild:bt,parentNode:wt,nextSibling:Ot,tagName:St,setTextContent:xt,setAttribute:Et}),fr={create:function(e,t){kt(t)},update:function(e,t){e.data.ref!==t.data.ref&&(kt(e,!0),kt(t))},destroy:function(e){kt(e,!0)}},dr=new Dn("",{},[]),pr=["create","activate","update","remove","destroy"],hr={create:Tt,update:Tt,destroy:function(e){Tt(e,dr)}},vr=Object.create(null),mr=[fr,hr],yr={create:Rt,update:Rt},_r={create:Dt,update:Dt},gr={create:Ut,update:Ut},br=u(sn),wr={create:Vt,update:zt},Or=u(function(e){return{enterClass:e+"-enter",enterToClass:e+"-enter-to",enterActiveClass:e+"-enter-active",leaveClass:e+"-leave",leaveToClass:e+"-leave-to",leaveActiveClass:e+"-leave-active"}}),Sr=(mn&&window.requestAnimationFrame&&window.requestAnimationFrame.bind(window),{create:Jt,activate:Jt,remove:Ht}),xr=[yr,_r,gr,wr,Sr],Er=xr.concat(mr),kr=function(e){function t(e){return new Dn(C.tagName(e).toLowerCase(),{},[],void 0,e)}function n(e,t){function n(){0==--n.listeners&&r(e)}return n.listeners=t,n}function r(e){var t=C.parentNode(e);t&&C.removeChild(t,e)}function i(e,t,n,r,o){if(e.isRootInsert=!o,!a(e,t,n,r)){var i=e.data,s=e.children,u=e.tag;if(jt(u)){e.elm=e.ns?C.createElementNS(e.ns,u):C.createElement(u,e),h(e);var c=i&&i.appendAsTree;c||(jt(i)&&p(e,t),l(n,e.elm,r)),f(e,s,t),c&&(jt(i)&&p(e,t),l(n,e.elm,r))}else e.isComment?(e.elm=C.createComment(e.text),l(n,e.elm,r)):(e.elm=C.createTextNode(e.text),l(n,e.elm,r))}}function a(e,t,n,r){var o=e.data;if(jt(o)){var i=jt(e.componentInstance)&&o.keepAlive;if(jt(o=o.hook)&&jt(o=o.init)&&o(e,!1,n,r),jt(e.componentInstance))return u(e,t),i&&c(e,t,n,r),!0}}function u(e,t){e.data.pendingInsert&&t.push.apply(t,e.data.pendingInsert),e.elm=e.componentInstance.$el,d(e)?(p(e,t),h(e)):(kt(e),t.push(e))}function c(e,t,n,r){for(var o,i=e;i.componentInstance;)if(i=i.componentInstance._vnode,jt(o=i.data)&&jt(o=o.transition)){for(o=0;o<E.activate.length;++o)E.activate[o](dr,i);t.push(i);break}l(n,e.elm,r)}function l(e,t,n){e&&(n?C.insertBefore(e,t,n):C.appendChild(e,t))}function f(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)i(t[r],n,e.elm,null,!0);else s(e.text)&&C.appendChild(e.elm,C.createTextNode(e.text))}function d(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return jt(e.tag)}function p(e,t){for(var n=0;n<E.create.length;++n)E.create[n](dr,e);S=e.data.hook,jt(S)&&(S.create&&S.create(dr,e),S.insert&&t.push(e))}function h(e){for(var t,n=e;n;)jt(t=n.context)&&jt(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,""),n=n.parent;jt(t=Vn)&&t!==e.context&&jt(t=t.$options._scopeId)&&C.setAttribute(e.elm,t,"")}function v(e,t,n,r,o,a){for(;r<=o;++r)i(n[r],a,e,t)}function m(e){var t,n,r=e.data;if(jt(r))for(jt(t=r.hook)&&jt(t=t.destroy)&&t(e),t=0;t<E.destroy.length;++t)E.destroy[t](e);if(jt(t=e.children))for(n=0;n<e.children.length;++n)m(e.children[n])}function y(e,t,n,o){for(;n<=o;++n){var i=t[n];jt(i)&&(jt(i.tag)?(_(i),m(i)):r(i.elm))}}function _(e,t){if(t||jt(e.data)){var o=E.remove.length+1;for(t?t.listeners+=o:t=n(e.elm,o),jt(S=e.componentInstance)&&jt(S=S._vnode)&&jt(S.data)&&_(S,t),S=0;S<E.remove.length;++S)E.remove[S](e,t);jt(S=e.data.hook)&&jt(S=S.remove)?S(e,t):t()}else r(e.elm)}function g(e,t,n,r,o){for(var a,s,u,c,l=0,f=0,d=t.length-1,p=t[0],h=t[d],m=n.length-1,_=n[0],g=n[m],w=!o;l<=d&&f<=m;)Ct(p)?p=t[++l]:Ct(h)?h=t[--d]:At(p,_)?(b(p,_,r),p=t[++l],_=n[++f]):At(h,g)?(b(h,g,r),h=t[--d],g=n[--m]):At(p,g)?(b(p,g,r),w&&C.insertBefore(e,p.elm,C.nextSibling(h.elm)),p=t[++l],g=n[--m]):At(h,_)?(b(h,_,r),w&&C.insertBefore(e,h.elm,p.elm),h=t[--d],_=n[++f]):(Ct(a)&&(a=It(t,l,d)),s=jt(_.key)?a[_.key]:null,Ct(s)?(i(_,r,e,p.elm),_=n[++f]):(u=t[s],At(u,_)?(b(u,_,r),t[s]=void 0,w&&C.insertBefore(e,_.elm,p.elm),_=n[++f]):(i(_,r,e,p.elm),_=n[++f])));l>d?(c=Ct(n[m+1])?null:n[m+1].elm,v(e,c,n,f,m,r)):f>m&&y(e,t,l,d)}function b(e,t,n,r){if(e!==t){if(t.isStatic&&e.isStatic&&t.key===e.key&&(t.isCloned||t.isOnce))return t.elm=e.elm,void(t.componentInstance=e.componentInstance);var o,i=t.data,a=jt(i);a&&jt(o=i.hook)&&jt(o=o.prepatch)&&o(e,t);var s=t.elm=e.elm,u=e.children,c=t.children;if(a&&d(t)){for(o=0;o<E.update.length;++o)E.update[o](e,t);jt(o=i.hook)&&jt(o=o.update)&&o(e,t)}Ct(t.text)?jt(u)&&jt(c)?u!==c&&g(s,u,c,n,r):jt(c)?(jt(e.text)&&C.setTextContent(s,""),v(s,null,c,0,c.length-1,n)):jt(u)?y(s,u,0,u.length-1):jt(e.text)&&C.setTextContent(s,""):e.text!==t.text&&C.setTextContent(s,t.text),a&&jt(o=i.hook)&&jt(o=o.postpatch)&&o(e,t)}}function w(e,t,n){if(n&&e.parent)e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}function O(e,t,n){t.elm=e;var r=t.tag,o=t.data,i=t.children;if(jt(o)&&(jt(S=o.hook)&&jt(S=S.init)&&S(t,!0),jt(S=t.componentInstance)))return u(t,n),!0;if(jt(r)){if(jt(i))if(e.hasChildNodes()){for(var a=!0,s=e.firstChild,c=0;c<i.length;c++){if(!s||!O(s,i[c],n)){a=!1;break}s=s.nextSibling}if(!a||s)return!1}else f(t,i,n);if(jt(o))for(var l in o)if(!j(l)){p(t,n);break}}else e.data!==t.text&&(e.data=t.text);return!0}var S,x,E={},k=e.modules,C=e.nodeOps;for(S=0;S<pr.length;++S)for(E[pr[S]]=[],x=0;x<k.length;++x)void 0!==k[x][pr[S]]&&E[pr[S]].push(k[x][pr[S]]);var j=o("attrs,style,class,staticClass,staticStyle,key");return function(e,n,r,o,a,s){if(!n)return void(e&&m(e));var u=!1,c=[];if(e){var l=jt(e.nodeType);if(!l&&At(e,n))b(e,n,c,o);else{if(l){if(1===e.nodeType&&e.hasAttribute("server-rendered")&&(e.removeAttribute("server-rendered"),r=!0),r&&O(e,n,c))return w(n,c,!0),e;e=t(e)}var f=e.elm,p=C.parentNode(f);if(i(n,c,f._leaveCb?null:p,C.nextSibling(f)),n.parent){for(var h=n.parent;h;)h.elm=n.elm,h=h.parent;if(d(n))for(var v=0;v<E.create.length;++v)E.create[v](dr,n.parent)}null!==p?y(p,[e],0,0):jt(e.tag)&&m(e)}}else u=!0,i(n,c,a,s);return w(n,c,u),n.elm}}({nodeOps:lr,modules:Er,LONG_LIST_THRESHOLD:10}),Cr={},jr={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},Ar={name:"transition",props:jr,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(function(e){return e.tag}),n.length)){var r=this.mode,o=n[0];if(Qt(this.$vnode))return o;var i=Xt(o);if(!i)return o;if(this._leaving)return Zt(e,o);var a="__transition-"+this._uid+"-";i.key=null==i.key?a+i.tag:s(i.key)?0===String(i.key).indexOf(a)?i.key:a+i.key:i.key;var u=(i.data||(i.data={})).transition=Kt(this),c=this._vnode,l=Xt(c);if(i.data.directives&&i.data.directives.some(function(e){return"show"===e.name})&&(i.data.show=!0),l&&l.data&&!Yt(i,l)){var d=l&&(l.data.transition=f({},u));if("out-in"===r)return this._leaving=!0,X(d,"afterLeave",function(){t._leaving=!1,t.$forceUpdate()}),Zt(e,o);if("in-out"===r){var p,h=function(){p()};X(u,"afterEnter",h),X(u,"enterCancelled",h),X(d,"delayLeave",function(e){p=e})}}return o}}},Ir=f({tag:String,moveClass:String},jr);delete Ir.mode;var Tr={props:Ir,created:function(){var e=this.$requireWeexModule("dom");this.getPosition=function(t){return new Promise(function(n,r){e.getComponentRect(t.ref,function(e){e.result?n(e.size):r(new Error("failed to get rect for element: "+t.tag))})})};var t=this.$requireWeexModule("animation");this.animate=function(e,n){return new Promise(function(r){t.transition(e.ref,n,r)})}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||"span",n=Object.create(null),r=this.prevChildren=this.children,o=this.$slots.default||[],i=this.children=[],a=Kt(this),s=0;s<o.length;s++){var u=o[s];u.tag&&null!=u.key&&0!==String(u.key).indexOf("__vlist")&&(i.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a)}if(r){var c=[],l=[];r.forEach(function(e){e.data.transition=a,n[e.key]?c.push(e):l.push(e)}),this.kept=e(t,null,c),this.removed=l}return e(t,null,i)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var e=this.prevChildren,t=this.moveClass||(this.name||"v")+"-move";e.length&&this.getMoveData(e[0].context,t)},methods:{getMoveData:function(e,t){var n=e.$options.style||{};return n["@TRANSITION"]&&n["@TRANSITION"][t]}}},Pr={Transition:Ar,TransitionGroup:Tr},Nr=o("div,img,image,input,switch,indicator,list,scroller,cell,template,text,slider,image");rt.config.mustUseProp=en,rt.config.isReservedTag=Nr,rt.config.isUnknownElement=tn,rt.options.directives=Cr,rt.options.components=Pr,rt.prototype.__patch__=kr,rt.prototype.$mount=function(e,t){return ue(this,e&&nn(e,this.$document),t)},e.Vue=rt},su=t(function(e,t){function n(e){this.instanceId="",this.nodeId=b++,this.parentNode=null,this.nodeType=3,this.text=e}function r(e){E.Document=e.Document,E.Element=e.Element,E.Comment=e.Comment,E.compileBundle=e.compileBundle}function o(){i(O),i(S),i(x),delete E.Document,delete E.Element,delete E.Comment,delete E.compileBundle}function i(e){for(var t in e)delete e[t]}function a(e,t,n,r,o){void 0===t&&(t=""),void 0===n&&(n={}),void 0===o&&(o={});var i=new E.Document(e,n.bundleUrl),a=O[e]={instanceId:e,config:n,data:r,document:i},s=m(e),u=y(e,s),c={config:n,document:i,requireModule:s};Object.freeze(c);var l=a.Vue=v(e,s),f=Object.assign({Vue:l,weex:c,__weex_require_module__:c.requireModule},u);g(f,t)||_(f,t),a.document.taskCenter.send("dom",{action:"createFinish"},[])}function s(e){var t=O[e];t&&t.app instanceof t.Vue&&(t.document.destroy(),t.app.$destroy()),delete O[e]}function u(e,t){var n=O[e];if(!(n&&n.app instanceof n.Vue))return new Error("refreshInstance: instance "+e+" not found!");for(var r in t)n.Vue.set(n.app,r,t[r]);n.document.taskCenter.send("dom",{action:"refreshFinish"},[])}function c(e){var t=O[e];return t&&t.app instanceof t.Vue?t.app.$el.toJSON():new Error("getRoot: instance "+e+" not found!")}function l(e,t,n,r,o){var i=e.document.getRef(t);return i?e.document.fireEvent(i,n,r,o):new Error('invalid element reference "'+t+'"')}function f(e,t,n,r){var o=e.document.taskCenter.callback(t,n,r);return e.document.taskCenter.send("dom",{action:"updateFinish"},[]),o}function d(e,t){if(O[e]&&Array.isArray(t)){var n=[];return t.forEach(function(t){var r=k[t.method],o=[].concat(t.args);"function"==typeof r&&(o.unshift(e),n.push(r.apply(void 0,o)))}),n}return new Error('invalid instance id "'+e+'" or tasks')}function p(e){for(var t in e)!function(t){S[t]||(S[t]={}),e[t].forEach(function(e){"string"==typeof e?S[t][e]=!0:S[t][e.name]=e.args})}(t)}function h(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?x[e]=!0:"object"==typeof e&&"string"==typeof e.type&&(x[e.type]=e))})}function v(e,t){var n={};w(n,E);var r=n.Vue,o=O[e],i=r.config.isReservedTag||function(){return!1};return r.config.isReservedTag=function(e){return x[e]||i(e)},r.prototype.$instanceId=e,r.prototype.$document=o.document,r.prototype.$requireWeexModule=t,r.mixin({beforeCreate:function(){var e=this.$options;if(e.el){var t=e.data,n=("function"==typeof t?t():t)||{};e.data=Object.assign(n,o.data),o.app=this}}}),r.prototype.$getConfig=function(){if(o.app instanceof r)return o.config},r}function m(e){var t=O[e];return function(e){var n=S[e]||[],r={};for(var o in n)!function(n){Object.defineProperty(r,n,{enumerable:!0,configurable:!0,get:function(){return function(){for(var r=arguments,o=[],i=arguments.length;i--;)o[i]=r[i];return t.document.taskCenter.send("module",{module:e,method:n},o)}},set:function(r){if("function"==typeof r)return t.document.taskCenter.send("module",{module:e,method:n},[r])}})}(o);return r}}function y(e,t){var n=O[e],r=t("timer");return{setTimeout:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setTimeout(i,t[1]),n.document.taskCenter.callbackManager.lastCallbackId.toString()},setInterval:function(){for(var e=arguments,t=[],o=arguments.length;o--;)t[o]=e[o];var i=function(){t[0].apply(t,t.slice(2))};return r.setInterval(i,t[1]),n.document.taskCenter.callbackManager.lastCallbackId.toString()},clearTimeout:function(e){r.clearTimeout(e)},clearInterval:function(e){r.clearInterval(e)}}}function _(e,t){var n=[],r=[];for(var o in e)n.push(o),r.push(e[o]);return n.push(t),(new(Function.prototype.bind.apply(Function,[null].concat(n)))).apply(void 0,r)}function g(e,t){if("function"!=typeof E.compileBundle)return!1;var n=void 0,r=!1,o="(function (",i=[],a=[];for(var s in e)i.push(s),a.push(e[s]);for(var u=0;u<i.length-1;++u)o+=i[u],o+=",";o+=i[i.length-1],o+=") {",o+=t,o+="} )";try{var c=e.weex||{},l=c.config||{};n=E.compileBundle(o,l.bundleUrl,l.bundleDigest,l.codeCachePath),n&&"function"==typeof n&&(n.apply(void 0,a),r=!0)}catch(e){console.error(e)}return r}Object.defineProperty(t,"__esModule",{value:!0});var b=1,w=au,O={},S={},x={},E={TextNode:n,instances:O,modules:S,components:x},k={fireEvent:function(e){for(var t=arguments,n=[],r=arguments.length-1;r-- >0;)n[r]=t[r+1];return l.apply(void 0,[O[e]].concat(n))},callback:function(e){for(var t=arguments,n=[],r=arguments.length-1;r-- >0;)n[r]=t[r+1];return f.apply(void 0,[O[e]].concat(n))}};t.init=r,t.reset=o,t.createInstance=a,t.destroyInstance=s,t.refreshInstance=u,t.getRoot=c,t.receiveTasks=d,t.registerModules=p,t.registerComponents=h}),uu=e(su),cu=su.registerComponents,lu=su.registerModules,fu=su.receiveTasks,du=su.getRoot,pu=su.refreshInstance,hu=su.destroyInstance,vu=su.createInstance,mu=su.reset,yu=su.init,_u=Object.freeze({default:uu,__moduleExports:su,registerComponents:cu,registerModules:lu,receiveTasks:fu,getRoot:du,refreshInstance:pu,destroyInstance:hu,createInstance:vu,reset:mu,init:yu}),gu=Object.freeze({$:ce,$el:le,$vm:fe,$renderThen:de,$scrollTo:pe,$transition:he,$getConfig:ve,$sendHttp:me,$openURL:ye,$setTitle:_e,$call:ge}),bu=Object.prototype.hasOwnProperty,wu=Object.prototype.toString,Ou="[object Object]",Su="__proto__"in{};"undefined"!=typeof Set&&Set.toString().match(/native code/)?Ws=Set:(Ws=function(){this.set=Object.create(null)},Ws.prototype.has=function(e){return void 0!==this.set[e]},Ws.prototype.add=function(e){null==e||this.set[e]||(this.set[e]=1)},Ws.prototype.clear=function(){this.set=Object.create(null)});var xu=/^@weex-component\//,Eu=/^@weex-module\//,ku=/\.js$/,Cu=function(e){return!!e.match(xu)},ju=function(e){return!!e.match(Eu)},Au=function(e){return!!e.match(/^\.{1,2}\//)},Iu=function(e){return!Cu(e)&&!ju(e)&&!Au(e)},Tu=0;Pe.target=null;var Pu=[];Pe.prototype.addSub=function(e){this.subs.push(e)},Pe.prototype.removeSub=function(e){Oe(this.subs,e)},Pe.prototype.depend=function(){Pe.target&&Pe.target.addDep(this)},Pe.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()};var Nu=0;Re.prototype.get=function(){Ne(this);var e=this.getter.call(this.vm,this.vm);return this.deep&&De(e),Me(),this.cleanupDeps(),e},Re.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Re.prototype.cleanupDeps=function(){for(var e=this,t=this.deps.length;t--;){var n=e.deps[t];e.newDepIds.has(n.id)||n.removeSub(e)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Re.prototype.update=function(e){this.lazy?this.dirty=!0:this.run()},Re.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||(Ee(e)||this.deep)&&!this.shallow){var t=this.value;this.value=e,this.cb.call(this.vm,e,t)}this.queued=this.shallow=!1}},Re.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Re.prototype.depend=function(){for(var e=this,t=this.deps.length;t--;)e.deps[t].depend()},Re.prototype.teardown=function(){var e=this;if(this.active){this.vm._isBeingDestroyed||this.vm._vForRemoving||Oe(this.vm._watchers,this);for(var t=this.deps.length;t--;)e.deps[t].removeSub(e);this.active=!1,this.vm=this.cb=this.value=null}};var Mu=je(),$u=Array.prototype,Ru=Object.create($u);["push","pop","shift","unshift","splice","sort","reverse"].forEach(function(e){var t=$u[e];we(Ru,e,function(){for(var n=arguments,r=arguments.length,o=new Array(r);r--;)o[r]=n[r];var i,a=t.apply(this,o),s=this.__ob__;switch(e){case"push":case"unshift":i=o;break;case"splice":i=o.slice(2)}return i&&s.observeArray(i),s.dep.notify(),a})}),we($u,"$set",function(e,t){return e>=this.length&&(this.length=e+1),this.splice(e,1,t)[0]}),we($u,"$remove",function(e){this.length&&("number"!=typeof e&&(e=this.indexOf(e)),e>-1&&this.splice(e,1))});var Du=Object.getOwnPropertyNames(Ru);Fe.prototype.walk=function(e){var t=this;for(var n in e)t.convert(n,e[n])},Fe.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)Ue(e[t])},Fe.prototype.convert=function(e,t){Ve(this.value,e,t)},Fe.prototype.addVm=function(e){(this.vms||(this.vms=[])).push(e)},Fe.prototype.removeVm=function(e){Oe(this.vms,e)};var Fu=["$index","$value","$event"],Lu={nativeComponentMap:{text:!0,image:!0,container:!0,slider:{type:"slider",append:"tree"},cell:{type:"cell",append:"tree"}}},Bu=Lu.nativeComponentMap,Uu={attr:"setAttr",style:"setStyle",event:"addEvent"},Vu=1,zu=["init","created","ready","destroyed"];!function(e){e.$emit=Gt,e.$dispatch=Xt,e.$broadcast=Kt,e.$on=Zt,e.$off=Qt}(en.prototype),en.prototype.$watch=function(e,t){vt(this,e,t)},en.set=ze,en.delete=We;var Wu={},qu=t(function(e,t){function n(e,t){if(e instanceof i)return e;if("string"!=typeof e)return null;if(e.length>G)return null;if(!(t?K[pe]:K[le]).test(e))return null;try{return new i(e,t)}catch(e){return null}}function r(e,t){var r=n(e,t);return r?r.version:null}function o(e,t){var r=n(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null}function i(e,t){if(e instanceof i){if(e.loose===t)return e;e=e.version}else if("string"!=typeof e)throw new TypeError("Invalid Version: "+e);if(e.length>G)throw new TypeError("version is longer than "+G+" characters");if(!(this instanceof i))return new i(e,t);H("SemVer",e,t),this.loose=t;var n=e.trim().match(t?K[pe]:K[le]);if(!n)throw new TypeError("Invalid Version: "+e);if(this.raw=e,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>X||this.major<0)throw new TypeError("Invalid major version");if(this.minor>X||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>X||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(function(e){if(/^[0-9]+$/.test(e)){var t=+e;if(t>=0&&t<X)return t}return e}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}function a(e,t,n,r){"string"==typeof n&&(r=n,n=void 0);try{return new i(e,n).inc(t,r).version}catch(e){return null}}function s(e,t){if(b(e,t))return null;var r=n(e),o=n(t);if(r.prerelease.length||o.prerelease.length){for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return"pre"+i;return"prerelease"}for(var i in r)if(("major"===i||"minor"===i||"patch"===i)&&r[i]!==o[i])return i}function u(e,t){var n=Re.test(e),r=Re.test(t);return n&&r&&(e=+e,t=+t),n&&!r?-1:r&&!n?1:e<t?-1:e>t?1:0}function c(e,t){return u(t,e)}function l(e,t){return new i(e,t).major}function f(e,t){return new i(e,t).minor}function d(e,t){return new i(e,t).patch}function p(e,t,n){return new i(e,n).compare(t)}function h(e,t){return p(e,t,!0)}function v(e,t,n){return p(t,e,n)}function m(e,n){return e.sort(function(e,r){return t.compare(e,r,n)})}function y(e,n){return e.sort(function(e,r){return t.rcompare(e,r,n)})}function _(e,t,n){return p(e,t,n)>0}function g(e,t,n){return p(e,t,n)<0}function b(e,t,n){return 0===p(e,t,n)}function w(e,t,n){return 0!==p(e,t,n)}function O(e,t,n){return p(e,t,n)>=0}function S(e,t,n){return p(e,t,n)<=0}function x(e,t,n,r){var o;switch(t){case"===":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e===n;break;case"!==":"object"==typeof e&&(e=e.version),"object"==typeof n&&(n=n.version),o=e!==n;break;case"":case"=":case"==":o=b(e,n,r);break;case"!=":o=w(e,n,r);break;case">":o=_(e,n,r);break;case">=":o=O(e,n,r);break;case"<":o=g(e,n,r);break;case"<=":o=S(e,n,r);break;default:throw new TypeError("Invalid operator: "+t)}return o}function E(e,t){if(e instanceof E){if(e.loose===t)return e;e=e.value}if(!(this instanceof E))return new E(e,t);H("comparator",e,t),this.loose=t,this.parse(e),this.semver===De?this.value="":this.value=this.operator+this.semver.version,H("comp",this)}function k(e,t){if(e instanceof k&&e.loose===t)return e;if(!(this instanceof k))return new k(e,t);if(this.loose=t,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(function(e){return this.parseRange(e.trim())},this).filter(function(e){return e.length}),!this.set.length)throw new TypeError("Invalid SemVer Range: "+e);this.format()}function C(e,t){return new k(e,t).set.map(function(e){return e.map(function(e){return e.value}).join(" ").trim().split(" ")})}function j(e,t){return H("comp",e),e=P(e,t),H("caret",e),e=I(e,t),H("tildes",e),e=M(e,t),H("xrange",e),e=R(e,t),H("stars",e),e}function A(e){return!e||"x"===e.toLowerCase()||"*"===e}function I(e,t){return e.trim().split(/\s+/).map(function(e){return T(e,t)}).join(" ")}function T(e,t){var n=t?K[xe]:K[Se];return e.replace(n,function(t,n,r,o,i){H("tilde",e,t,n,r,o,i);var a;return A(n)?a="":A(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":A(o)?a=">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":i?(H("replaceTilde pr",i),"-"!==i.charAt(0)&&(i="-"+i),a=">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0"):a=">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0",H("tilde return",a),a})}function P(e,t){return e.trim().split(/\s+/).map(function(e){return N(e,t)}).join(" ")}function N(e,t){H("caret",e,t);var n=t?K[je]:K[Ce];return e.replace(n,function(t,n,r,o,i){H("caret",e,t,n,r,o,i);var a;return A(n)?a="":A(r)?a=">="+n+".0.0 <"+(+n+1)+".0.0":A(o)?a="0"===n?">="+n+"."+r+".0 <"+n+"."+(+r+1)+".0":">="+n+"."+r+".0 <"+(+n+1)+".0.0":i?(H("replaceCaret pr",i),"-"!==i.charAt(0)&&(i="-"+i),a="0"===n?"0"===r?">="+n+"."+r+"."+o+i+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+i+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+i+" <"+(+n+1)+".0.0"):(H("no pr"),a="0"===n?"0"===r?">="+n+"."+r+"."+o+" <"+n+"."+r+"."+(+o+1):">="+n+"."+r+"."+o+" <"+n+"."+(+r+1)+".0":">="+n+"."+r+"."+o+" <"+(+n+1)+".0.0"),H("caret return",a),a})}function M(e,t){return H("replaceXRanges",e,t),e.split(/\s+/).map(function(e){return $(e,t)}).join(" ")}function $(e,t){e=e.trim();var n=t?K[be]:K[ge];return e.replace(n,function(t,n,r,o,i,a){H("xRange",e,t,n,r,o,i,a);var s=A(r),u=s||A(o),c=u||A(i),l=c;return"="===n&&l&&(n=""),s?t=">"===n||"<"===n?"<0.0.0":"*":n&&l?(u&&(o=0),c&&(i=0),">"===n?(n=">=",u?(r=+r+1,o=0,i=0):c&&(o=+o+1,i=0)):"<="===n&&(n="<",u?r=+r+1:o=+o+1),t=n+r+"."+o+"."+i):u?t=">="+r+".0.0 <"+(+r+1)+".0.0":c&&(t=">="+r+"."+o+".0 <"+r+"."+(+o+1)+".0"),H("xRange return",t),t})}function R(e,t){return H("replaceStars",e,t),e.trim().replace(K[Me],"")}function D(e,t,n,r,o,i,a,s,u,c,l,f,d){return t=A(n)?"":A(r)?">="+n+".0.0":A(o)?">="+n+"."+r+".0":">="+t,s=A(u)?"":A(c)?"<"+(+u+1)+".0.0":A(l)?"<"+u+"."+(+c+1)+".0":f?"<="+u+"."+c+"."+l+"-"+f:"<="+s,(t+" "+s).trim()}function F(e,t){for(var n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length){for(var n=0;n<e.length;n++)if(H(e[n].semver),e[n].semver!==De&&e[n].semver.prerelease.length>0){var r=e[n].semver;if(r.major===t.major&&r.minor===t.minor&&r.patch===t.patch)return!0}return!1}return!0}function L(e,t,n){try{t=new k(t,n)}catch(e){return!1}return t.test(e)}function B(e,t,n){return e.filter(function(e){return L(e,t,n)}).sort(function(e,t){return v(e,t,n)})[0]||null}function U(e,t,n){return e.filter(function(e){return L(e,t,n)}).sort(function(e,t){return p(e,t,n)})[0]||null}function V(e,t){try{return new k(e,t).range||"*"}catch(e){return null}}function z(e,t,n){return q(e,t,"<",n)}function W(e,t,n){return q(e,t,">",n)}function q(e,t,n,r){e=new i(e,r),t=new k(t,r);var o,a,s,u,c;switch(n){case">":o=_,a=S,s=g,u=">",c=">=";break;case"<":o=g,a=O,s=_,u="<",c="<=";break;default:
+throw new TypeError('Must provide a hilo val of "<" or ">"')}if(L(e,t,r))return!1;for(var l=0;l<t.set.length;++l){var f=t.set[l],d=null,p=null;if(f.forEach(function(e){e.semver===De&&(e=new E(">=0.0.0")),d=d||e,p=p||e,o(e.semver,d.semver,r)?d=e:s(e.semver,p.semver,r)&&(p=e)}),d.operator===u||d.operator===c)return!1;if((!p.operator||p.operator===u)&&a(e,p.semver))return!1;if(p.operator===c&&s(e,p.semver))return!1}return!0}function J(e,t){var r=n(e,t);return r&&r.prerelease.length?r.prerelease:null}t=e.exports=i;var H;"object"==typeof process&&process.env,H=function(){},t.SEMVER_SPEC_VERSION="2.0.0";var G=256,X=Number.MAX_SAFE_INTEGER||9007199254740991,K=t.re=[],Z=t.src=[],Q=0,Y=Q++;Z[Y]="0|[1-9]\\d*";var ee=Q++;Z[ee]="[0-9]+";var te=Q++;Z[te]="\\d*[a-zA-Z-][a-zA-Z0-9-]*";var ne=Q++;Z[ne]="("+Z[Y]+")\\.("+Z[Y]+")\\.("+Z[Y]+")";var re=Q++;Z[re]="("+Z[ee]+")\\.("+Z[ee]+")\\.("+Z[ee]+")";var oe=Q++;Z[oe]="(?:"+Z[Y]+"|"+Z[te]+")";var ie=Q++;Z[ie]="(?:"+Z[ee]+"|"+Z[te]+")";var ae=Q++;Z[ae]="(?:-("+Z[oe]+"(?:\\."+Z[oe]+")*))";var se=Q++;Z[se]="(?:-?("+Z[ie]+"(?:\\."+Z[ie]+")*))";var ue=Q++;Z[ue]="[0-9A-Za-z-]+";var ce=Q++;Z[ce]="(?:\\+("+Z[ue]+"(?:\\."+Z[ue]+")*))";var le=Q++,fe="v?"+Z[ne]+Z[ae]+"?"+Z[ce]+"?";Z[le]="^"+fe+"$";var de="[v=\\s]*"+Z[re]+Z[se]+"?"+Z[ce]+"?",pe=Q++;Z[pe]="^"+de+"$";var he=Q++;Z[he]="((?:<|>)?=?)";var ve=Q++;Z[ve]=Z[ee]+"|x|X|\\*";var me=Q++;Z[me]=Z[Y]+"|x|X|\\*";var ye=Q++;Z[ye]="[v=\\s]*("+Z[me]+")(?:\\.("+Z[me]+")(?:\\.("+Z[me]+")(?:"+Z[ae]+")?"+Z[ce]+"?)?)?";var _e=Q++;Z[_e]="[v=\\s]*("+Z[ve]+")(?:\\.("+Z[ve]+")(?:\\.("+Z[ve]+")(?:"+Z[se]+")?"+Z[ce]+"?)?)?";var ge=Q++;Z[ge]="^"+Z[he]+"\\s*"+Z[ye]+"$";var be=Q++;Z[be]="^"+Z[he]+"\\s*"+Z[_e]+"$";var we=Q++;Z[we]="(?:~>?)";var Oe=Q++;Z[Oe]="(\\s*)"+Z[we]+"\\s+",K[Oe]=new RegExp(Z[Oe],"g");var Se=Q++;Z[Se]="^"+Z[we]+Z[ye]+"$";var xe=Q++;Z[xe]="^"+Z[we]+Z[_e]+"$";var Ee=Q++;Z[Ee]="(?:\\^)";var ke=Q++;Z[ke]="(\\s*)"+Z[Ee]+"\\s+",K[ke]=new RegExp(Z[ke],"g");var Ce=Q++;Z[Ce]="^"+Z[Ee]+Z[ye]+"$";var je=Q++;Z[je]="^"+Z[Ee]+Z[_e]+"$";var Ae=Q++;Z[Ae]="^"+Z[he]+"\\s*("+de+")$|^$";var Ie=Q++;Z[Ie]="^"+Z[he]+"\\s*("+fe+")$|^$";var Te=Q++;Z[Te]="(\\s*)"+Z[he]+"\\s*("+de+"|"+Z[ye]+")",K[Te]=new RegExp(Z[Te],"g");var Pe=Q++;Z[Pe]="^\\s*("+Z[ye]+")\\s+-\\s+("+Z[ye]+")\\s*$";var Ne=Q++;Z[Ne]="^\\s*("+Z[_e]+")\\s+-\\s+("+Z[_e]+")\\s*$";var Me=Q++;Z[Me]="(<|>)?=?\\s*\\*";for(var $e=0;$e<Q;$e++)H($e,Z[$e]),K[$e]||(K[$e]=new RegExp(Z[$e]));t.parse=n,t.valid=r,t.clean=o,t.SemVer=i,i.prototype.format=function(){return this.version=this.major+"."+this.minor+"."+this.patch,this.prerelease.length&&(this.version+="-"+this.prerelease.join(".")),this.version},i.prototype.toString=function(){return this.version},i.prototype.compare=function(e){return H("SemVer.compare",this.version,this.loose,e),e instanceof i||(e=new i(e,this.loose)),this.compareMain(e)||this.comparePre(e)},i.prototype.compareMain=function(e){return e instanceof i||(e=new i(e,this.loose)),u(this.major,e.major)||u(this.minor,e.minor)||u(this.patch,e.patch)},i.prototype.comparePre=function(e){var t=this;if(e instanceof i||(e=new i(e,this.loose)),this.prerelease.length&&!e.prerelease.length)return-1;if(!this.prerelease.length&&e.prerelease.length)return 1;if(!this.prerelease.length&&!e.prerelease.length)return 0;var n=0;do{var r=t.prerelease[n],o=e.prerelease[n];if(H("prerelease compare",n,r,o),void 0===r&&void 0===o)return 0;if(void 0===o)return 1;if(void 0===r)return-1;if(r!==o)return u(r,o)}while(++n)},i.prototype.inc=function(e,t){var n=this;switch(e){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",t);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",t);break;case"prepatch":this.prerelease.length=0,this.inc("patch",t),this.inc("pre",t);break;case"prerelease":0===this.prerelease.length&&this.inc("patch",t),this.inc("pre",t);break;case"major":0===this.minor&&0===this.patch&&0!==this.prerelease.length||this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":0===this.patch&&0!==this.prerelease.length||this.minor++,this.patch=0,this.prerelease=[];break;case"patch":0===this.prerelease.length&&this.patch++,this.prerelease=[];break;case"pre":if(0===this.prerelease.length)this.prerelease=[0];else{for(var r=this.prerelease.length;--r>=0;)"number"==typeof n.prerelease[r]&&(n.prerelease[r]++,r=-2);-1===r&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error("invalid increment argument: "+e)}return this.format(),this.raw=this.version,this},t.inc=a,t.diff=s,t.compareIdentifiers=u;var Re=/^[0-9]+$/;t.rcompareIdentifiers=c,t.major=l,t.minor=f,t.patch=d,t.compare=p,t.compareLoose=h,t.rcompare=v,t.sort=m,t.rsort=y,t.gt=_,t.lt=g,t.eq=b,t.neq=w,t.gte=O,t.lte=S,t.cmp=x,t.Comparator=E;var De={};E.prototype.parse=function(e){var t=this.loose?K[Ae]:K[Ie],n=e.match(t);if(!n)throw new TypeError("Invalid comparator: "+e);this.operator=n[1],"="===this.operator&&(this.operator=""),n[2]?this.semver=new i(n[2],this.loose):this.semver=De},E.prototype.toString=function(){return this.value},E.prototype.test=function(e){return H("Comparator.test",e,this.loose),this.semver===De||("string"==typeof e&&(e=new i(e,this.loose)),x(e,this.operator,this.semver,this.loose))},t.Range=k,k.prototype.format=function(){return this.range=this.set.map(function(e){return e.join(" ").trim()}).join("||").trim(),this.range},k.prototype.toString=function(){return this.range},k.prototype.parseRange=function(e){var t=this.loose;e=e.trim(),H("range",e,t);var n=t?K[Ne]:K[Pe];e=e.replace(n,D),H("hyphen replace",e),e=e.replace(K[Te],"$1$2$3"),H("comparator trim",e,K[Te]),e=e.replace(K[Oe],"$1~"),e=e.replace(K[ke],"$1^"),e=e.split(/\s+/).join(" ");var r=t?K[Ae]:K[Ie],o=e.split(" ").map(function(e){return j(e,t)}).join(" ").split(/\s+/);return this.loose&&(o=o.filter(function(e){return!!e.match(r)})),o=o.map(function(e){return new E(e,t)})},t.toComparators=C,k.prototype.test=function(e){var t=this;if(!e)return!1;"string"==typeof e&&(e=new i(e,this.loose));for(var n=0;n<this.set.length;n++)if(F(t.set[n],e))return!0;return!1},t.satisfies=L,t.maxSatisfying=B,t.minSatisfying=U,t.validRange=V,t.ltr=z,t.gtr=W,t.outside=q,t.prerelease=J}),Ju=function(e,t){for(var n=[],r=arguments.length-2;r-- >0;)n[r]=arguments[r+2];console.debug("[JS Framework] define a component "+t);var o,i;if(i=n.length>1?n[1]:n[0],"function"==typeof i&&(o=i,i=null),o){var a=function(t){if(Cu(t)){var n=Ie(t);return on(e,n)}if(ju(t)){var r=Ie(t);return e.requireModule(r)}if(Au(t)||Iu(t)){var o=Te(t);return e.commonModules[o]}},s={exports:{}};o(a,s.exports,s),i=s.exports}if(Cu(t)){var u=Ie(t);an(e,u,i)}else if(ju(t)){var c,l=Ie(t);tn((c={},c[l]=i,c))}else if(Au(t)){var f=Te(t);e.commonModules[f]=i}else if(Iu(t)){var d=Te(t);i.template||i.style||i.methods?an(e,d,i):e.commonModules[d]=i}},Hu=function(e){this.id=e,this.map=[],this.hooks=[]};Hu.prototype.isEmpty=function(){return 0===this.map.length},Hu.prototype.append=function(e,t,n,r){var o=this;this.hasTimer||(this.hasTimer=!0,setTimeout(function(){o.hasTimer=!1,o.flush(!0)},0));var i=this.map;i[t]||(i[t]={});var a=i[t];a[e]||(a[e]={}),"element"===e?(a[e][n]||(a[e][n]=[]),a[e][n].push(r)):a[e][n]=r},Hu.prototype.flush=function(e){var t=this.map.slice();this.map.length=0,t.forEach(function(e){xn(e,"repeat"),xn(e,"shown"),En(e,"element")});var n=this.hooks.slice();this.hooks.length=0,n.forEach(function(e){e()}),this.isEmpty()||this.flush()},Hu.prototype.then=function(e){this.hooks.push(e)},kn.prototype.requireModule=function(e){return rn(this,e)},kn.prototype.updateActions=function(){return gn(this)},kn.prototype.callTasks=function(e){return bn(this,e)},Object.freeze(kn),Object.freeze(kn.prototype);var Gu={},Xu=Lu.nativeComponentMap;global.registerMethods=Nn;var Ku={fireEvent:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return yn.apply(void 0,[Gu[e]].concat(t))},callback:function(e){for(var t=[],n=arguments.length-1;n-- >0;)t[n]=arguments[n+1];return _n.apply(void 0,[Gu[e]].concat(t))}};Nn(gu),Object.freeze(en);var Zu=Object.freeze({registerComponents:Tn,registerModules:Pn,registerMethods:Nn,createInstance:Cn,init:jn,refreshInstance:An,destroyInstance:In,receiveTasks:Mn,getRoot:$n}),Qu=t(function(e){e.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=15)}([function(e,t,n){var r=e.exports.createUniqueKey="undefined"!=typeof Symbol?Symbol:function(e){return"[["+e+"_"+Math.random().toFixed(8).slice(2)+"]]"},o=e.exports.isObject=function(e){return"object"==typeof e&&null!==e};e.exports.LISTENERS=r("listeners"),e.exports.CAPTURE=1,e.exports.BUBBLE=2,e.exports.ATTRIBUTE=3,e.exports.newNode=function(e,t,n){var r=o(n);return{listener:e,kind:t,once:r&&Boolean(n.once),passive:r&&Boolean(n.passive),next:null}}},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(){r(this,e),this._listeners={}}return o(e,[{key:"_addListener",value:function(e,t,n){return this._listeners[e]=this._listeners[e]||[],this._listeners[e].push({listener:t,once:n}),this}},{key:"on",value:function(e,t){return this._addListener(e,t,!1)}},{key:"once",value:function(e,t){return this._addListener(e,t,!0)}},{key:"off",value:function(e,t){return this._listeners[e]&&this._listeners[e].length?t?(this._listeners[e]=this._listeners[e].filter(function(e){return!(e.listener===t)}),this):(delete this._listeners[e],this):this}},{key:"emit",value:function(e,t){var n=this;return this._listeners[e]?(this._listeners[e].forEach(function(r){r.listener.apply(n,[t]),r.once&&n.removeListener(e,r.listener)}),this):this}}]),e}();t.default=i,e.exports=t.default},function(e,t){e.exports=function(){return function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=10)}([function(e,t,n){function r(e){return!!e&&("symbol"===(void 0===e?"undefined":s(e))||!!e.constructor&&("Symbol"===e.constructor.name&&"Symbol"===e[e.constructor.toStringTag]))}function o(e){if(!r(e))throw new TypeError(e+" is not a symbol");return e}var i,a,s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u=Object.defineProperties,c=Object.defineProperty,l=Object.create(null),f=function(){var e=Object.create(null);return function(t){for(var n=0;e[t+(n||"")];)++n;return t+=n||"",e[t]=!0,"@@"+t}}();a=function(e){if(this instanceof a)throw new TypeError("Symbol is not a constructor");return i(e)},e.exports=i=function e(t){var n;if(this instanceof e)throw new TypeError("Symbol is not a constructor");return n=Object.create(a.prototype),t=void 0===t?"":String(t),u(n,{__description__:{value:t},__name__:{value:f(t)}})},u(i,{for:{value:function(e){return l[e]?l[e]:l[e]=i(String(e))}},keyFor:{value:function(e){var t;o(e);for(t in l)if(l[t]===e)return t}},hasInstance:{value:i("hasInstance")},isConcatSpreadable:{value:i("isConcatSpreadable")},iterator:{value:i("iterator")},match:{value:i("match")},replace:{value:i("replace")},search:{value:i("search")},species:{value:i("species")},split:{value:i("split")},toPrimitive:{value:i("toPrimitive")},toStringTag:{value:i("toStringTag")},unscopables:{value:i("unscopables")}}),u(a.prototype,{constructor:{value:i},toString:{value:function(){return this.__name__}}}),u(i.prototype,{toString:{value:function(){return"Symbol ("+o(this).__description__+")"}},valueOf:{value:function(){return o(this)}}}),c(i.prototype,i.toPrimitive,{value:function(){var e=o(this);return"symbol"===(void 0===e?"undefined":s(e))?e:e.toString()}}),c(i.prototype,i.toStringTag,{value:"Symbol"}),c(a.prototype,i.toStringTag,{value:i.prototype[i.toStringTag]}),c(a.prototype,i.toPrimitive,{value:i.prototype[i.toPrimitive]})},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e){return encodeURIComponent(e).replace(s,l)}function i(e){return decodeURIComponent(e.replace(u," "))}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=/[!'\(\)~]|%20|%00/g,u=/\+/g,c={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"},l=function(e){return c[e]},f=function(){try{return!!Symbol.iterator}catch(e){return!1}}(),d="__URLSearchParams__",p=function(){function e(t){var n=this;if(r(this,e),this[d]=Object.create(null),t){"?"===t.charAt(0)&&(t=t.slice(1));for(var o,a,s=(t||"").split("&"),u=0,c=s.length;u<c;u++)a=s[u],o=a.indexOf("="),-1<o?n.append(i(a.slice(0,o)),i(a.slice(o+1))):a.length&&n.append(i(a),"")}}return a(e,[{key:"append",value:function(e,t){var n=this[d];e in n?n[e].push(""+t):n[e]=[""+t]}},{key:"delete",value:function(e){delete this[d][e]}},{key:"get",value:function(e){var t=this[d];return e in t?t[e][0]:null}},{key:"getAll",value:function(e){var t=this[d];return e in t?t[e].slice(0):[]}},{key:"has",value:function(e){return e in this[d]}},{key:"set",value:function(e,t){this[d][e]=[""+t]}},{key:"forEach",value:function(e,t){var n=this[d];Object.getOwnPropertyNames(n).forEach(function(r){n[r].forEach(function(n){e.call(t,n,r,this)},this)},this)}},{key:"keys",value:function(){var e=[];this.forEach(function(t,n){e.push(n)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"values",value:function(){var e=[];this.forEach(function(t){e.push(t)});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"entries",value:function(){var e=[];this.forEach(function(t,n){e.push([n,t])});var t={next:function(){var t=e.shift();return{done:void 0===t,value:t}}};return f&&(t[Symbol.iterator]=function(){return t}),t}},{key:"toString",value:function(){var e,t,n,r,i=this[d],a=[];for(t in i)for(n=o(t),e=0,r=i[t];e<r.length;e++)a.push(n+"="+o(r[e]));return a.join("&")}}]),e}();f&&(p.prototype[Symbol.iterator]=p.prototype.entries),e.exports=p},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var o=function e(t,n){r(this,e),this.family=t,this.source=n};e.exports=o},function(e,t,n){function r(e){return Number.isNaN(e)?f:e}function o(e){return e===f?NaN:e}function i(e,t){var n=0,r=!1;return{next:function(){if(n===e._keys.length&&(r=!0),r)return{value:void 0,done:!0};for(;e._keys[n]===l;)n++;return{value:t.call(e,n++),done:!1}}}}function a(e){for(var t=0,n=0,r=e._keys.length;n<r;n++)e._keys[n]!==l&&t++;return t}function s(e,t){return"function"==typeof e[t]}var u=n(0),c=function(e){return e&&e.__esModule?e:{default:e}}(u),l=(0,c.default)("undef"),f=(0,c.default)("NaN"),d=!0,p=function e(t){this._keys=[],this._values=[],t&&s(t,"forEach")&&(t instanceof e||s(t,"clear")&&s(t,"delete")&&s(t,"entries")&&s(t,"forEach")&&s(t,"get")&&s(t,"has")&&s(t,"keys")&&s(t,"set")&&s(t,"values")?t.forEach(function(e,t){this.set.apply(this,[t,e])},this):t.forEach(function(e){this.set.apply(this,e)},this)),d||(this.size=a(this))};p.prototype={};try{Object.defineProperty(p.prototype,"size",{get:function(){return a(this)}})}catch(e){d=!1}p.prototype.get=function(e){var t=this._keys.indexOf(r(e));return-1!==t?this._values[t]:void 0},p.prototype.set=function(e,t){var n=this._keys.indexOf(r(e));return-1!==n?this._values[n]=t:(this._keys.push(r(e)),this._values.push(t),d||(this.size=a(this))),this},p.prototype.has=function(e){return-1!==this._keys.indexOf(r(e))},p.prototype.delete=function(e){var t=this._keys.indexOf(r(e));return-1!==t&&(this._keys[t]=l,this._values[t]=l,d||(this.size=a(this)),!0)},p.prototype.clear=function(){this._keys=this._values=[],d||(this.size=0)},p.prototype.values=function(){return i(this,function(e){return this._values[e]})},p.prototype.keys=function(){return i(this,function(e){return o(this._keys[e])})},p.prototype.entries=p.prototype[c.default.iterator]=function(){return i(this,function(e){return[o(this._keys[e]),this._values[e]]})},p.prototype.forEach=function(e,t){var n=this;t=t||Jn;for(var r=this.entries(),o=r.next();!1===o.done;)e.call(t,o.value[1],o.value[0],n),o=r.next()},p.prototype[c.default.species]=p,Object.defineProperty(p,"constructor",{value:p});try{Object.defineProperty(p,"length",{value:0})}catch(e){}e.exports=p},function(e,t,n){function r(e,t){return o(e).some(function(e){var n=e.inverse,r="all"===e.type||t.type===e.type;if(r&&n||!r&&!n)return!1;var o=e.expressions.every(function(e){var n=e.feature,r=e.modifier,o=e.value,i=t[n];if(!i)return!1;switch(n){case"width":case"height":o=parseFloat(o),i=parseFloat(i)}switch(r){case"min":return i>=o;case"max":return i<=o;default:return i===o}});return o&&!n||!o&&n})}function o(e){return e.split(",").map(function(e){e=e.trim();var t=e.match(a);if(!t)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var n=t[1],r=t[2],o=((t[3]||"")+(t[4]||"")).trim(),i={};if(i.inverse=!!n&&"not"===n.toLowerCase(),i.type=r?r.toLowerCase():"all",!o)return i.expressions=[],i;if(!(o=o.match(/\([^\)]+\)/g)))throw new SyntaxError('Invalid CSS media query: "'+e+'"');return i.expressions=o.map(function(t){var n=t.match(s);if(!n)throw new SyntaxError('Invalid CSS media query: "'+e+'"');var r=n[1].toLowerCase().match(u);return{modifier:r[1],feature:r[2],value:n[2]}}),i})}function i(e){var t={matches:!1,media:e};return""===e?(t.matches=!0,t):(t.matches=r(e,{type:"screen",width:window.screen.width,height:window.screen.height}),t)}var a=/^(?:(only|not)?\s*([_a-z][_a-z0-9-]*)|(\([^\)]+\)))(?:\s*and\s*(.*))?$/i,s=/^\(\s*([_a-z-][_a-z0-9-]*)\s*(?:\:\s*([^\)]+))?\s*\)$/,u=/^(?:(min|max)-)?(.+)/;e.exports=i},function(e,t,n){function r(){}function o(e,t){return function(){e.apply(t,arguments)}}function i(e){if("object"!==d(this))throw new TypeError("Promises must be constructed via new");if("function"!=typeof e)throw new TypeError("Promise resolver is not a function");this._state=0,this._handled=!1,this._value=void 0,this._deferreds=[],f(e,this)}function a(e,t){for(;3===e._state;)e=e._value;if(0===e._state)return void e._deferreds.push(t);e._handled=!0,p(function(){var n=1===e._state?t.onFulfilled:t.onRejected;if(null===n)return void(1===e._state?s:u)(t.promise,e._value);var r;try{r=n(e._value)}catch(e){return void u(t.promise,e)}s(t.promise,r)})}function s(e,t){try{if(t===e)throw new TypeError("A promise cannot be resolved with itself.");if(t&&("object"===(void 0===t?"undefined":d(t))||"function"==typeof t)){var n=t.then;if(t instanceof i)return e._state=3,e._value=t,void c(e);if("function"==typeof n)return void f(o(n,t),e)}e._state=1,e._value=t,c(e)}catch(t){u(e,t)}}function u(e,t){e._state=2,e._value=t,c(e)}function c(e){2===e._state&&0===e._deferreds.length&&p(function(){e._handled||h(e._value)});for(var t=0,n=e._deferreds.length;t<n;t++)a(e,e._deferreds[t]);e._deferreds=null}function l(e,t,n){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.promise=n}function f(e,t){var n=!1;try{e(function(e){n||(n=!0,s(t,e))},function(e){n||(n=!0,u(t,e))})}catch(e){if(n)return;n=!0,u(t,e)}}var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p="function"==typeof setImmediate&&setImmediate||function(e){"function"==typeof setTimeout?setTimeout(e,0):e()},h=function(e){"undefined"!=typeof console&&console&&console.log("Possible Unhandled Promise Rejection:",e)};i.prototype.catch=function(e){return this.then(null,e)},i.prototype.then=function(e,t){var n=new this.constructor(r);return a(this,new l(e,t,n)),n},i.all=function(e){var t=Array.prototype.slice.call(e);return new i(function(e,n){function r(i,a){try{if(a&&("object"===(void 0===a?"undefined":d(a))||"function"==typeof a)){var s=a.then;if("function"==typeof s)return void s.call(a,function(e){r(i,e)},n)}t[i]=a,0==--o&&e(t)}catch(e){n(e)}}if(0===t.length)return e([]);for(var o=t.length,i=0;i<t.length;i++)r(i,t[i])})},i.resolve=function(e){return e&&"object"===(void 0===e?"undefined":d(e))&&e.constructor===i?e:new i(function(t){t(e)})},i.reject=function(e){return new i(function(t,n){n(e)})},i.race=function(e){return new i(function(t,n){for(var r=0,o=e.length;r<o;r++)e[r].then(t,n)})},i._setImmediateFn=function(e){p=e},i._setUnhandledRejectionFn=function(e){h=e},e.exports=i},function(e,t,n){function r(e){return Number.isNaN(e)?l:e}function o(e){return e===l?NaN:e}function i(e,t){var n=0;return{next:function(){for(;e._values[n]===c;)n++;return n===e._values.length?{value:void 0,done:!0}:{value:t.call(e,n++),done:!1}}}}function a(e){for(var t=0,n=0,r=e._values.length;n<r;n++)e._values[n]!==c&&t++;return t}var s=n(0),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=(0,u.default)("undef"),l=(0,u.default)("NaN"),f=!0,d=function(e){this._values=[],e&&"function"==typeof e.forEach&&e.forEach(function(e){this.add.call(this,e)},this),f||(this.size=a(this))};try{Object.defineProperty(d.prototype,"size",{get:function(){return a(this)}})}catch(e){f=!1}d.prototype.add=function(e){return e=r(e),-1===this._values.indexOf(e)&&(this._values.push(e),f||(this.size=a(this))),this},d.prototype.has=function(e){return-1!==this._values.indexOf(r(e))},d.prototype.delete=function(e){var t=this._values.indexOf(r(e));return-1!==t&&(this._values[t]=c,f||(this.size=a(this)),!0)},d.prototype.clear=function(){this._values=[],f||(this.size=0)},d.prototype.values=d.prototype.keys=function(){return i(this,function(e){return o(this._values[e])})},d.prototype.entries=d.prototype[u.default.iterator]=function(){return i(this,function(e){return[o(this._values[e]),o(this._values[e])]})},d.prototype.forEach=function(e,t){var n=this;t=t||Jn;for(var r=this.entries(),o=r.next();!1===o.done;)e.call(t,o.value[1],o.value[0],n),o=r.next()},d.prototype[u.default.species]=d,Object.defineProperty(d,"constructor",{value:d});try{Object.defineProperty(d,"length",{value:0})}catch(e){}e.exports=d},function(e,t,n){function r(e){return void 0!==d[e]}function o(){c.call(this),this._isInvalid=!0}function i(e){return""==e&&o.call(this),e.toLowerCase()}function a(e){var t=e.charCodeAt(0);return t>32&&t<127&&-1==[34,35,60,62,63,96].indexOf(t)?e:encodeURIComponent(e)}function s(e){var t=e.charCodeAt(0);return t>32&&t<127&&-1==[34,35,60,62,96].indexOf(t)?e:encodeURIComponent(e)}function u(e,t,n){function u(e){b.push(e)}var c=this,l=t||"scheme start",f=0,y="",_=!1,g=!1,b=[];e:for(;(e[f-1]!=h||0==f)&&!this._isInvalid;){var w=e[f];switch(l){case"scheme start":if(!w||!v.test(w)){if(t){u("Invalid scheme.");break e}y="",l="no scheme";continue}y+=w.toLowerCase(),l="scheme";break;case"scheme":if(w&&m.test(w))y+=w.toLowerCase();else{if(":"!=w){if(t){if(h==w)break e;u("Code point not allowed in scheme: "+w);break e}y="",f=0,l="no scheme";continue}if(c._scheme=y,y="",t)break e;r(c._scheme)&&(c._isRelative=!0),l="file"==c._scheme?"relative":c._isRelative&&n&&n._scheme==c._scheme?"relative or authority":c._isRelative?"authority first slash":"scheme data"}break;case"scheme data":"?"==w?l="query":"#"==w?(c._fragment="#",l="fragment"):h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._schemeData+=a(w));break;case"no scheme":if(n&&r(n._scheme)){l="relative";continue}u("Missing scheme."),o.call(c);break;case"relative or authority":if("/"!=w||"/"!=e[f+1]){u("Expected /, got: "+w),l="relative";continue}l="authority ignore slashes";break;case"relative":if(c._isRelative=!0,"file"!=c._scheme&&(c._scheme=n._scheme),h==w){c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query=n._query,c._username=n._username,c._password=n._password;break e}if("/"==w||"\\"==w)"\\"==w&&u("\\ is an invalid code point."),l="relative slash";else if("?"==w)c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query="?",c._username=n._username,c._password=n._password,l="query";else{if("#"!=w){var O=e[f+1],S=e[f+2];("file"!=c._scheme||!v.test(w)||":"!=O&&"|"!=O||h!=S&&"/"!=S&&"\\"!=S&&"?"!=S&&"#"!=S)&&(c._host=n._host,c._port=n._port,c._username=n._username,c._password=n._password,c._path=n._path.slice(),c._path.pop()),l="relative path";continue}c._host=n._host,c._port=n._port,c._path=n._path.slice(),c._query=n._query,c._fragment="#",c._username=n._username,c._password=n._password,l="fragment"}break;case"relative slash":if("/"!=w&&"\\"!=w){"file"!=c._scheme&&(c._host=n._host,c._port=n._port,c._username=n._username,c._password=n._password),l="relative path";continue}"\\"==w&&u("\\ is an invalid code point."),l="file"==c._scheme?"file host":"authority ignore slashes";break;case"authority first slash":if("/"!=w){u("Expected '/', got: "+w),l="authority ignore slashes";continue}l="authority second slash";break;case"authority second slash":if(l="authority ignore slashes","/"!=w){u("Expected '/', got: "+w);continue}break;case"authority ignore slashes":if("/"!=w&&"\\"!=w){l="authority";continue}u("Expected authority, got: "+w);break;case"authority":if("@"==w){_&&(u("@ already seen."),y+="%40"),_=!0;for(var x=0;x<y.length;x++){var E=y[x];if("\t"!=E&&"\n"!=E&&"\r"!=E)if(":"!=E||null!==c._password){var k=a(E);null!==c._password?c._password+=k:c._username+=k}else c._password="";else u("Invalid whitespace in authority.")}y=""}else{if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){f-=y.length,y="",l="host";continue}y+=w}break;case"file host":if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){2!=y.length||!v.test(y[0])||":"!=y[1]&&"|"!=y[1]?0==y.length?l="relative path start":(c._host=i.call(c,y),y="",l="relative path start"):l="relative path";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid whitespace in file host."):y+=w;break;case"host":case"hostname":if(":"!=w||g){if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w){if(c._host=i.call(c,y),y="",l="relative path start",t)break e;continue}"\t"!=w&&"\n"!=w&&"\r"!=w?("["==w?g=!0:"]"==w&&(g=!1),y+=w):u("Invalid code point in host/hostname: "+w)}else if(c._host=i.call(c,y),y="",l="port","hostname"==t)break e;break;case"port":if(/[0-9]/.test(w))y+=w;else{if(h==w||"/"==w||"\\"==w||"?"==w||"#"==w||t){if(""!=y){var C=parseInt(y,10);C!=d[c._scheme]&&(c._port=C+""),y=""}if(t)break e;l="relative path start";continue}"\t"==w||"\n"==w||"\r"==w?u("Invalid code point in port: "+w):o.call(c)}break;case"relative path start":if("\\"==w&&u("'\\' not allowed in path."),l="relative path","/"!=w&&"\\"!=w)continue;break;case"relative path":if(h!=w&&"/"!=w&&"\\"!=w&&(t||"?"!=w&&"#"!=w))"\t"!=w&&"\n"!=w&&"\r"!=w&&(y+=a(w));else{"\\"==w&&u("\\ not allowed in relative path.");var j;(j=p[y.toLowerCase()])&&(y=j),".."==y?(c._path.pop(),"/"!=w&&"\\"!=w&&c._path.push("")):"."==y&&"/"!=w&&"\\"!=w?c._path.push(""):"."!=y&&("file"==c._scheme&&0==c._path.length&&2==y.length&&v.test(y[0])&&"|"==y[1]&&(y=y[0]+":"),c._path.push(y)),y="","?"==w?(c._query="?",l="query"):"#"==w&&(c._fragment="#",l="fragment")}break;case"query":t||"#"!=w?h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._query+=s(w)):(c._fragment="#",l="fragment");break;case"fragment":h!=w&&"\t"!=w&&"\n"!=w&&"\r"!=w&&(c._fragment+=w)}f++}}function c(){this._scheme="",this._schemeData="",this._username="",this._password=null,this._host="",this._port="",this._path=[],this._query="",this._fragment="",this._isInvalid=!1,this._isRelative=!1}function l(e,t){void 0===t||t instanceof l||(t=new l(String(t))),this._url=e,c.call(this);var n=e.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g,"");u.call(this,n,null,t)}var f=n(1),d=Object.create(null);d.ftp=21,d.file=0,d.gopher=70,d.http=80,d.https=443,d.ws=80,d.wss=443;var p=Object.create(null);p["%2e"]=".",p[".%2e"]="..",p["%2e."]="..",p["%2e%2e"]="..";var h=void 0,v=/[a-zA-Z]/,m=/[a-zA-Z0-9\+\-\.]/;l.prototype={toString:function(){return this.href},get href(){if(this._isInvalid)return this._url;var e="";return""==this._username&&null==this._password||(e=this._username+(null!=this._password?":"+this._password:"")+"@"),this.protocol+(this._isRelative?"//"+e+this.host:"")+this.pathname+this._query+this._fragment},set href(e){c.call(this),u.call(this,e)},get protocol(){return this._scheme+":"},set protocol(e){this._isInvalid||u.call(this,e+":","scheme start")},get host(){return this._isInvalid?"":this._port?this._host+":"+this._port:this._host},set host(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"host")},get hostname(){return this._host},set hostname(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"hostname")},get port(){return this._port},set port(e){!this._isInvalid&&this._isRelative&&u.call(this,e,"port")},get pathname(){return this._isInvalid?"":this._isRelative?"/"+this._path.join("/"):this._schemeData},set pathname(e){!this._isInvalid&&this._isRelative&&(this._path=[],u.call(this,e,"relative path start"))},get search(){return this._isInvalid||!this._query||"?"==this._query?"":this._query},set search(e){!this._isInvalid&&this._isRelative&&(this._query="?","?"==e[0]&&(e=e.slice(1)),u.call(this,e,"query"))},get searchParams(){return new f(this.search)},get hash(){return this._isInvalid||!this._fragment||"#"==this._fragment?"":this._fragment},set hash(e){this._isInvalid||(this._fragment="#","#"==e[0]&&(e=e.slice(1)),u.call(this,e,"fragment"))},get origin(){var e;if(this._isInvalid||!this._scheme)return"";switch(this._scheme){case"data":case"file":case"javascript":case"mailto":return"null"}return e=this.host,e?this._scheme+"://"+e:""}},e.exports=l},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=Object.defineProperty,i=Date.now()%1e9,a=function(e){this.name="__st"+(1e9*Math.random()>>>0)+i+++"__",e&&e.forEach&&e.forEach(function(e){this.set.apply(this,e)},this)};a.prototype.set=function(e,t){if("object"!==(void 0===e?"undefined":r(e))&&"function"!=typeof e)throw new TypeError("Invalid value used as weak map key");var n=e[this.name];return n&&n[0]===e?n[1]=t:o(e,this.name,{value:[e,t],writable:!0}),this},a.prototype.get=function(e){var t;return(t=e[this.name])&&t[0]===e?t[1]:void 0},a.prototype.delete=function(e){var t=e[this.name];return!(!t||t[0]!==e)&&(t[0]=t[1]=void 0,!0)},a.prototype.has=function(e){var t=e[this.name];return!!t&&t[0]===e},e.exports=a},function(e,t,n){var r=Date.now()%1e9,o=function(e){this.name="__st"+(1e9*Math.random()>>>0)+r+++"__",e&&e.forEach&&e.forEach(this.add,this)};o.prototype.add=function(e){var t=this.name;return e[t]||Object.defineProperty(e,t,{value:!0,writable:!0}),this},o.prototype.delete=function(e){return!!e[this.name]&&(e[this.name]=void 0,!0)},o.prototype.has=function(e){return!!e[this.name]},e.exports=o},function(e,t,n){e.exports={
+get Promise(){return n(5)},get Symbol(){return n(0)},get Map(){return n(3)},get Set(){return n(6)},get WeakMap(){return n(8)},get WeakSet(){return n(9)},get FontFace(){return n(2)},get URL(){return n(7)},get URLSearchParams(){return n(1)},get matchMedia(){return n(4)}}}])}},function(e,t,n){e.exports=function(){var e={},t="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return e.btoa=function(e){for(var n,r,o=String(e),i=0,a=t,s="";o.charAt(0|i)||(a="=",i%1);s+=a.charAt(63&n>>8-i%1*8)){if((r=o.charCodeAt(i+=.75))>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");n=n<<8|r}return s},e.atob=function(e){var n=String(e).replace(/=+$/,"");if(n.length%4==1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(var r,o,i=0,a=0,s="";o=n.charAt(a++);~o&&(r=i%4?64*r+o:o,i++%4)?s+=String.fromCharCode(255&r>>(-2*i&6)):0)o=t.indexOf(o);return s},e}},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});t.ModuleFactories={rax:n(14)}},function(e,t,n){e.exports=function(e){function t(t,n,r){n instanceof Function&&(r=n,n=[]),e[t]={factory:r,deps:n,module:{exports:{}},isInitialized:!1,hasError:!1}}return t}},function(e,t,n){function r(e){e.body.addEvent("viewappear",function(t){e.visibilityState=s,t.type=c,e.dispatchEvent(t)}),e.body.addEvent("viewdisappear",function(t){e.visibilityState=u,t.type=c,e.dispatchEvent(t)})}function o(e){e.body&&(e.body.removeEvent("viewappear"),e.body.removeEvent("viewdisappear"))}var i=n(1),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s="visible",u="hidden",c="visibilitychange";e.exports=function(e,t){var n=new a.default,i=!1;try{t.addEventListener=function(e,o){e===c&&(t.body?r(t):i=!0),n.on(e,o)},t.removeEventListener=function(e,r){e===c&&o(t),n.off(e,r)},t.dispatchEvent=function(e){n.emit(e.type,e)},t.fonts={add:function(t){e("@weex-module/dom").addRule("fontFace",{fontFamily:t.family,src:t.source})}},t.visibilityState=s;var u=t.createBody;Object.defineProperty(t,"createBody",{value:function(){var e=u.call(t);return i&&r(t),e}})}catch(e){console.log(e)}return t}},function(e,t,n){function r(e){if("*"==e)return e;e="string"==typeof e?e:"";for(var t=e.split("."),n=0,r=[];n<3;){var o="string"==typeof t[n]&&t[n]?t[n]:"0";r.push(o),n++}return r.join(".")}function o(e,t,n){var r={isDowngrade:!0,errorType:1,code:1e3},o=e.toLowerCase();return o.indexOf("osversion")>=0?r.code=1001:o.indexOf("appversion")>=0?r.code=1002:o.indexOf("weexversion")>=0?r.code=1003:o.indexOf("devicemodel")>=0&&(r.code=1004),r.errorMessage=function(e,t,n){return"Downgrade["+e+"] :: deviceInfo "+t+" matched criteria "+n}(e,t,n),r}function i(e){var t={isDowngrade:!1},n=WXEnvironment,i=n.platform||"unknow",a=i.toLowerCase(),u=e[a]||{};for(var c in n){var l=c,f=l.toLowerCase(),d=n[c],p=f.indexOf("version")>=0,h=f.indexOf("devicemodel")>=0,v=u[c];if(v&&p){var m=r(v),y=r(n[c]);if(s.default.satisfies(y,m)){t=o(l,d,v);break}}else if(h){var _=Array.isArray(v)?v:[v];if(_.indexOf(d)>=0){t=o(l,d,v);break}}}return t}var a=n(16),s=function(e){return e&&e.__esModule?e:{default:e}}(a);e.exports=function(e){return function(t){var n=e("@weex-module/instanceWrap"),r=i(t);return!!r.isDowngrade&&(n.error(r.errorType,r.code,r.errorMessage),!0)}}},function(e,t,n){function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}e.exports=function(){var e=function e(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,e),this.type=t,this.bubbles=Boolean(n.bubbles),this.cancelable=Boolean(n.cancelable)};return{Event:e,CustomEvent:function(e){function t(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i(this,t);var o=r(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return o.detail=n.detail,o}return o(t,e),t}(e)}}},function(e,t,n){e.exports=function(e,t){function n(e){return"string"!=typeof e&&(e=String(e)),e.toLowerCase()}function r(e){return"string"!=typeof e&&(e=String(e)),e}function o(e){this.originHeaders=e,this.map={},e instanceof o?e.forEach(function(e,t){this.append(t,e)},this):e&&Object.getOwnPropertyNames(e).forEach(function(t){this.append(t,e[t])},this)}function i(e){if(e.bodyUsed)return t.reject(new TypeError("Already read"));e.bodyUsed=!0}function a(){return this.bodyUsed=!1,this._initBody=function(e,t){if(this._bodyInit=e,"string"==typeof e)this._bodyText=e;else{if(e)throw new Error("unsupported BodyInit type");this._bodyText=""}},this.text=function(){var e=i(this);return e||t.resolve(this._bodyText)},this.json=function(){return this.text().then(JSON.parse)},this}function s(e){var t=e.toUpperCase();return l.indexOf(t)>-1?t:e}function u(e,t){t=t||{};var n=t.body;if(u.prototype.isPrototypeOf(e)){if(e.bodyUsed)throw new TypeError("Already read");this.url=e.url,this.credentials=e.credentials,t.headers||(this.headers=new o(e.headers)),this.method=e.method,this.mode=e.mode,n||(n=e._bodyInit,e.bodyUsed=!0)}else this.url=e;if(this.credentials=t.credentials||this.credentials||"omit",!t.headers&&this.headers||(this.headers=new o(t.headers)),this.method=s(t.method||this.method||"GET"),this.mode=t.mode||this.mode||null,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&n)throw new TypeError("Body not allowed for GET or HEAD requests");this._initBody(n,t)}function c(e,t){t||(t={}),this.type="default",this.status="status"in t?t.status:200,this.ok=this.status>=200&&this.status<300,this.statusText="statusText"in t?t.statusText:"OK",this.headers=new o(t.headers),this.url=t.url||"",this._initBody(e,t)}o.prototype.append=function(e,t){e=n(e),t=r(t);var o=this.map[e];this.map[e]=o?o+","+t:t},o.prototype.delete=function(e){delete this.map[n(e)]},o.prototype.get=function(e){return e=n(e),this.has(e)?this.map[e]:null},o.prototype.has=function(e){return this.map.hasOwnProperty(n(e))},o.prototype.set=function(e,t){this.map[n(e)]=[r(t)]},o.prototype.forEach=function(e,t){var n=this;for(var r in this.map)n.map.hasOwnProperty(r)&&e.call(t,n.map[r],r,n)};var l=["DELETE","GET","HEAD","OPTIONS","POST","PUT"];u.prototype.clone=function(){return new u(this)},a.call(u.prototype),a.call(c.prototype),c.prototype.clone=function(){return new c(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new o(this.headers),url:this.url})},c.error=function(){var e=new c(null,{status:0,statusText:""});return e.type="error",e};var f=[301,302,303,307,308];return c.redirect=function(e,t){if(-1===f.indexOf(t))throw new RangeError("Invalid status code");return new c(null,{status:t,headers:{location:e}})},{fetch:function(n,r){return new t(function(t,o){var i;i=u.prototype.isPrototypeOf(n)&&!r?n:new u(n,r);var a={url:i.url,method:i.method,headers:i.headers&&i.headers.originHeaders};void 0!==i._bodyInit&&(a.body=i._bodyInit),a.type=r&&r.dataType?r.dataType:"json",(0,e("@weex-module/stream").fetch)(a,function(e){try{"string"==typeof e&&(e=JSON.parse(e));var n="string"==typeof e.data?e.data:JSON.stringify(e.data),r=new c(n,{status:e.status,statusText:e.statusText,headers:e.headers,url:i.url});t(r)}catch(e){o(e)}},function(e){})})},Headers:o,Request:u,Response:c}}},function(e,t,n){function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.exports=function(e){var t,n={};return n.timing=(t={unloadEventStart:0,unloadEventEnd:0,navigationStart:e,redirectStart:0,redirectEnd:0,fetchStart:e,domainLookupStart:e,domainLookupEnd:e,connectStart:e,secureConnectionStart:e},r(t,"connectStart",e),r(t,"requestStart",e),r(t,"responseStart",e),r(t,"responseEnd",e),r(t,"domLoading",0),r(t,"domInteractive",0),r(t,"domComplete",0),r(t,"domContentLoadedEventStart",0),r(t,"domContentLoadedEventEnd",0),r(t,"loadEventStart",0),r(t,"loadEventEnd",0),t),n.now=function(){return Date.now()-n.timing.navigationStart},n}},function(e,t,n){e.exports=function(e){function t(n){var r=e[n];if(r&&r.isInitialized)return r.module.exports;if(!r)throw new Error('Requiring unknown module "'+n+'"');if(r.hasError)throw new Error('Requiring module "'+n+'" which threw an exception');try{r.isInitialized=!0,r.factory(t,r.module.exports,r.module)}catch(e){throw r.hasError=!0,r.isInitialized=!1,e}return r.module.exports}return t}},function(e,t,n){var r="@weex-module/timer";e.exports=function(e,t){var n=function(n,o){return e(r).setTimeout(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()},o=function(n,o){return e(r).setInterval(n,o),t.taskCenter.callbackManager.lastCallbackId.toString()};return{setTimeout:n,clearTimeout:function(t){e(r).clearTimeout(t)},setInterval:o,clearInterval:function(t){e(r).clearInterval(t)},requestAnimationFrame:function(t){return e(r).setTimeout(t,16)},cancelAnimationFrame:function(t){e(r).clearTimeout(t)}}}},function(e,t,n){function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(18),u=0,c=1,l=3,f=["close","error","message","open"],d=function e(t,n){i(this,e),this.type=t.toString(),Object.assign(this,n)};e.exports=function(e){var t,n;return n=t=function(t){function n(t,o){i(this,n);var a=r(this,(n.__proto__||Object.getPrototypeOf(n)).call(this)),s=e("@weex-module/webSocket");return s.WebSocket(t,o),a.readyState=u,a.websocket=s,s.onmessage(function(e){a.dispatchEvent(new d("message",e))}),s.onopen(function(e){a.readyState=c,a.dispatchEvent(new d("open"))}),s.onclose(function(e){a.readyState=l,a.dispatchEvent(new d("close",{code:e.code,reason:e.reason}))}),s.onerror(function(e){a.dispatchEvent(new d("error",e))}),a}return o(n,t),a(n,[{key:"close",value:function(e,t){2!==this.readyState&&this.readyState!==l&&(this.readyState=2,this.websocket.close(e,t),this.websocket.removeAllEventListeners())}},{key:"send",value:function(e){if("string"==typeof e)return void this.websocket.send(e);throw new Error("Unsupported data type")}}]),n}(s(f)),t.CONNECTING=u,t.OPEN=c,t.CLOSING=2,t.CLOSED=l,n}},function(e,t){e.exports=function(e,t,n){var r=this.__weex_document__,o=this.document;n.exports=function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};return t.m=e,t.c=n,t.i=function(e){return e},t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=24)}([function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={component:null,mountID:1,sandbox:!0,rootComponents:{},rootInstances:{},hook:null,driver:null,monitor:null},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t<e.length;t++)n[t]=e[t];return n}return Array.from(e)}Object.defineProperty(t,"__esModule",{value:!0});var i=n(0),a=r(i),s=n(6),u=n(9),c=r(u),l=n(2),f=r(l),d=n(4),p=r(d),h=n(30),v=r(h),m=n(5),y="$$instance";t.default={set:function(e,t){e[y]||(e[y]=t,t.rootID&&(a.default.rootInstances[t.rootID]=t,a.default.rootComponents[t.rootID]=t._internal))},get:function(e){return e[y]},remove:function(e){var t=this.get(e);t&&(e[y]=null,t.rootID&&(delete a.default.rootComponents[t.rootID],delete a.default.rootInstances[t.rootID]))},render:function(e,t){a.default.driver.beforeRender&&a.default.driver.beforeRender(),null==t&&(t=a.default.driver.createBody());var n=this.get(t);if(n&&n.isRootComponent){var r=n.getRenderedComponent(),i=r._currentElement;if((0,p.default)(i,e)){var u=r._context;return r.updateComponent(i,e,u,u),n}a.default.hook.Reconciler.unmountComponent(n),(0,c.default)(t)}if(m.isWeb&&t.childNodes)for(var l=[].concat(o(t.childNodes)),d=0;d<l.length;d++){var h=l[d];h.hasAttribute&&h.hasAttribute("data-rendered")&&a.default.driver.removeChild(h,t)}var y=(0,s.createElement)(v.default,null,e),_=(0,f.default)(y),g={},b=_.mountComponent(t,g);return this.set(t,b),a.default.driver.afterRender&&a.default.driver.afterRender(b),a.default.hook.Mount._renderNewRootComponent(b._internal),b}},e.exports=t.default},function(e,t,n){function r(e){var t=void 0;if(void 0===e||null===e||!1===e||!0===e)t=new a.default.EmptyComponent;else if(Array.isArray(e))t=new a.default.FragmentComponent(e);else if("object"===(void 0===e?"undefined":o(e))&&e.type)t="string"==typeof e.type?new a.default.NativeComponent(e):new a.default.CompositeComponent(e);else{if("string"!=typeof e&&"number"!=typeof e)throw Error("Invalid element type "+JSON.stringify(e));t=new a.default.TextComponent(e)}return t._mountIndex=0,t}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i);t.default=r,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=function(){function e(t,n,o){r(this,e),this.props=t,this.context=n,this.refs={},this.updater=o}return o(e,[{key:"isComponentClass",value:function(){}},{key:"setState",value:function(e,t){this.updater.setState(this,e,t)}},{key:"forceUpdate",value:function(e){this.updater.forceUpdate(this,e)}}]),e}();t.default=i,e.exports=t.default},function(e,t,n){function r(e,t){var n=null===e,r=null===t;if(n||r)return n===r;var i=void 0===e?"undefined":o(e),a=void 0===t?"undefined":o(t);return"string"===i||"number"===i?"string"===a||"number"===a:"object"===i&&"object"===a&&e.type===t.type&&e.key===t.key}Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default=r,e.exports=t.default},function(e,t,n){var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"===r(Symbol.iterator)?function(e){return void 0===e?"undefined":r(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":r(e)};t.isWeb="object"===("undefined"==typeof navigator?"undefined":o(navigator))&&("Mozilla"===navigator.appCodeName||"Gecko"===navigator.product),t.isNode=void 0!==process&&!(!process.versions||!process.versions.node),t.isWeex="function"==typeof callNative,t.isReactNative="undefined"!=typeof __fbBatchedBridgeConfig},function(e,t,n){function r(){if(h.default.component){var e=h.default.component.getName();if(e)return" Check the render method of `"+e+"`."}return""}function o(e,t){if(Array.isArray(e))for(var n=0,r=e.length;n<r;n++)o(e[n],t);else t.push(e)}function i(e){if(null==e)return e;var t=[];return o(e,t),1===t.length&&(t=t[0]),t}function a(e){if(e){if(Array.isArray(e)){for(var t={},n=0;n<e.length;++n){var r=a(e[n]);if(r)for(var o in r)t[o]=r[o]}return t}return e}}function s(e,t){if(v.isWeex&&"text"===e){var n=t.children;n&&(Array.isArray(n)&&(n=n.join("")),t.children=null,t.value=n)}return t}function u(e,t){var n=arguments;if(null==e)throw Error("createElement: type should not be null or undefined."+r());var o={},s=void 0,u=null,c=null;if(null!=t){c=void 0===t.ref?null:t.ref,u=void 0===t.key?null:String(t.key);for(s in t)t.hasOwnProperty(s)&&!m.hasOwnProperty(s)&&(o[s]=t[s])}for(var l=arguments.length,f=Array(l>2?l-2:0),p=2;p<l;p++)f[p-2]=n[p];if(f.length&&(o.children=i(f)),e&&e.defaultProps){var v=e.defaultProps;for(s in v)void 0===o[s]&&(o[s]=v[s])}return o.style&&(Array.isArray(o.style)||"object"===d(o.style))&&(o.style=a(o.style)),new y(e,u,c,o,h.default.component)}function c(e){var t=u.bind(null,e);return t.type=e,t}function l(e,t){var n=arguments,r=Object.assign({},e.props),o=e.key,a=e.ref,s=e._owner;if(t){void 0!==t.ref&&(a=t.ref,s=h.default.component),void 0!==t.key&&(o=String(t.key));var u=void 0;e.type&&e.type.defaultProps&&(u=e.type.defaultProps);var c=void 0;for(c in t)t.hasOwnProperty(c)&&!m.hasOwnProperty(c)&&(void 0===t[c]&&void 0!==u?r[c]=u[c]:r[c]=t[c])}for(var l=arguments.length,f=Array(l>2?l-2:0),d=2;d<l;d++)f[d-2]=n[d];return f.length&&(r.children=i(f)),new y(e.type,o,a,r,s)}function f(e){return"object"===(void 0===e?"undefined":d(e))&&null!==e&&e.type&&e.props}Object.defineProperty(t,"__esModule",{value:!0});var d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.createElement=u,t.createFactory=c,t.cloneElement=l,t.isValidElement=f;var p=n(0),h=function(e){return e&&e.__esModule?e:{default:e}}(p),v=n(5),m={key:!0,ref:!0},y=function(e,t,n,r,o){return r=s(e,r),{type:e,key:t,ref:n,props:r,_owner:o}};t.default=y},function(e,t,n){function r(e){if(null==e)return null;if(e.ownerDocument||e.nodeType)return e;if(e._nativeNode)return e._nativeNode;if("string"==typeof e)return i.default.driver.getElementById(e);if("function"!=typeof e.render)throw new Error("Appears to be neither Component nor DOMNode.");var t=e._internal;if(t){for(;!t._nativeNode;)if(null==(t=t._renderedComponent))return null;return t._nativeNode}throw new Error("findDOMNode was called on an unmounted component.")}Object.defineProperty(t,"__esModule",{value:!0});var o=n(0),i=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=r,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n){e=(0,u.default)(e);for(var r in t){var o=t[r];if(r!==l&&null!=o)if(r===c){if(n)continue;a.default.driver.setStyles(e,o)}else if(f.test(r)){var i=r.slice(2).toLowerCase();a.default.driver.addEventListener(e,i,o)}else a.default.driver.setAttribute(e,r,o)}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var i=n(0),a=r(i),s=n(7),u=r(s),c="style",l="children",f=/on[A-Z]/;e.exports=t.default},function(e,t,n){function r(e){var t=i.default.get(e);return!!t&&(i.default.remove(e),t._internal.unmountComponent(),!0)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=r;var o=n(1),i=function(e){return e&&e.__esModule?e:{default:e}}(o);e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=r(o),a=n(0),s=r(a);t.default={ComponentTree:{getClosestInstanceFromNode:function(e){return i.default.get(e)},getNodeFromInstance:function(e){for(;e._renderedComponent;)e=e._renderedComponent;return e?e._nativeNode:null}},Mount:{_instancesByReactRootID:s.default.rootComponents,_renderNewRootComponent:function(){}},Reconciler:{mountComponent:function(){},receiveComponent:function(){},unmountComponent:function(){}},monitor:null},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t,n){var r=t&&t.key,o="string"==typeof r,i="."+n.toString(36);if(o){var a="$"+r,s=void 0===e[a];return s||console.warn('Encountered two children with the same key "'+r+'".'),s?a:i}return i},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=n(0),s=r(a),u=n(13),c=r(u),l=n(2),f=r(l),d=n(4),p=r(d),h=n(11),v=r(h),m=n(1),y=r(m),_=/on[A-Z]/,g=function(){function e(t){o(this,e),this._currentElement=t}return i(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=s.default.mountID++;var r=this._currentElement.props,o=this._currentElement.type,i={_internal:this,type:o,props:r},a=r.append;this._instance=i,this._prevStyleCopy=Object.assign({},r.style);var u=this.getNativeNode();"tree"!==a&&(n?n(u,e):s.default.driver.appendChild(u,e)),this._currentElement&&this._currentElement.ref&&c.default.attach(this._currentElement._owner,this._currentElement.ref,this);var l=r.children;return null!=l&&this.mountChildren(l,t),"tree"===a&&(n?n(u,e):s.default.driver.appendChild(u,e)),s.default.hook.Reconciler.mountComponent(this),i}},{key:"mountChildren",value:function(e,t){var n=this;Array.isArray(e)||(e=[e]);var r={},o=e.map(function(e,o){var i=(0,f.default)(e),a=(0,v.default)(r,e,o);return r[a]=i,i._mountIndex=o,i.mountComponent(n.getNativeNode(),t)});return this._renderedChildren=r,o}},{key:"unmountChildren",value:function(e){var t=this._renderedChildren;if(t){for(var n in t){t[n].unmountComponent(e)}this._renderedChildren=null}}},{key:"unmountComponent",value:function(e){if(this._nativeNode){var t=this._currentElement.ref;t&&c.default.detach(this._currentElement._owner,t,this),y.default.remove(this._nativeNode),e||s.default.driver.removeChild(this._nativeNode,this._parent),s.default.driver.removeAllEventListeners(this._nativeNode)}this.unmountChildren(e),s.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null,this._prevStyleCopy=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,c.default.update(e,t,this);var o=e.props,i=t.props;this.updateProperties(o,i),this.updateChildren(i.children,r),s.default.hook.Reconciler.receiveComponent(this)}},{key:"updateProperties",value:function(e,t){var n=this,r=void 0,o=void 0,i=void 0;for(r in e)if("children"!==r&&!t.hasOwnProperty(r)&&e.hasOwnProperty(r)&&null!=e[r])if("style"===r){var a=n._prevStyleCopy;for(o in a)a.hasOwnProperty(o)&&(i=i||{},i[o]="");n._prevStyleCopy=null}else _.test(r)?"function"==typeof e[r]&&s.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),e[r]):s.default.driver.removeAttribute(n.getNativeNode(),r,e[r]);for(r in t){var u=t[r],c="style"===r?n._prevStyleCopy:null!=e?e[r]:void 0;if("children"!==r&&t.hasOwnProperty(r)&&u!==c&&(null!=u||null!=c))if("style"===r)if(u?u=n._prevStyleCopy=Object.assign({},u):n._prevStyleCopy=null,null!=c){for(o in c)!c.hasOwnProperty(o)||u&&u.hasOwnProperty(o)||(i=i||{},i[o]="");for(o in u)u.hasOwnProperty(o)&&c[o]!==u[o]&&(i=i||{},i[o]=u[o])}else i=u;else if(_.test(r))"function"==typeof c&&s.default.driver.removeEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),c),"function"==typeof u&&s.default.driver.addEventListener(n.getNativeNode(),r.slice(2).toLowerCase(),u);else{var l={};l[r]=u,null!=u?s.default.driver.setAttribute(n.getNativeNode(),r,u):s.default.driver.removeAttribute(n.getNativeNode(),r,e[r])}}i&&s.default.driver.setStyles(this.getNativeNode(),i)}},{key:"updateChildren",value:function(e,t){var n=this,r=this._renderedChildren;if(null!=e||null!=r){var o={},i={};if(null!=e){Array.isArray(e)||(e=[e]);for(var a=0,u=e.length;a<u;a++){var c=e[a],l=(0,v.default)(o,c,a),d=r&&r[l],h=d&&d._currentElement;if(null!=d&&(0,p.default)(h,c))d.updateComponent(h,c,t,t),o[l]=d;else{if(d){var m=d.getNativeNode();d.unmountComponent(!0),i[l]=m}o[l]=(0,f.default)(c)}}}var y=void 0,_=void 0;if(null!=r)for(var g in r)if(r.hasOwnProperty(g)){var b=r[g],w=!o[g];y?w&&b.unmountComponent():(y=b,_=w)}null!=o&&function(){var e=0,a=0,u=null,c=[];for(var l in o){(function(l){if(!o.hasOwnProperty(l))return"continue";var f=o[l],d=r&&r[l];if(d===f){var p=d.getNativeNode();if(Array.isArray(p)||(p=[p]),d._mountIndex<e){Array.isArray(u)&&(u=u[u.length-1]);for(var h=p.length-1;h>=0;h--)s.default.driver.insertAfter(p[h],u)}c=c.concat(p),e=Math.max(d._mountIndex,e),d._mountIndex=a}else{null!=d&&(e=Math.max(d._mountIndex,e));var v=n.getNativeNode();Array.isArray(v)&&(v=n._parent),f.mountComponent(v,t,function(e,t){var n=i[l];if(Array.isArray(e)||(e=[e]),n){Array.isArray(n)||(n=[n]);for(var r=void 0,o=0;o<e.length;o++){var a=e[o];n[o]?s.default.driver.replaceChild(a,n[o]):s.default.driver.insertAfter(a,r),r=a}if(e.length<n.length)for(var f=e.length;f<n.length;f++)s.default.driver.removeChild(n[f])}else{Array.isArray(u)&&(u=u[u.length-1]);var d=void 0;y&&!u&&(d=y.getNativeNode(),Array.isArray(d)&&(d=d[0]));for(var p=e.length-1;p>=0;p--){var h=e[p];u?s.default.driver.insertAfter(h,u):d?s.default.driver.insertBefore(h,d):s.default.driver.appendChild(h,t)}}c=c.concat(e)}),f._mountIndex=a}a++,u=f.getNativeNode()})(l)}if(Array.isArray(n._nativeNode)){n._nativeNode.splice(0,n._nativeNode.length);for(var f=0;f<c.length;f++)n._nativeNode.push(c[f])}}(),_&&y.unmountComponent(),this._renderedChildren=o}}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=s.default.driver.createElement(this._instance),y.default.set(this._nativeNode,this._instance)),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return this._currentElement.type}}]),e}();t.default=g,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={update:function(e,t,n){var r=null!=e&&e.ref,o=null!=t&&t.ref;r!==o&&(null!=r&&this.detach(e._owner,r,n),null!=o&&this.attach(t._owner,o,n))},attach:function(e,t,n){if(!e)throw new Error("You might be adding a ref to a component that was not created inside a component's `render` method, or you have multiple copies of Rax loaded.");var r=n.getPublicInstance();"function"==typeof t?t(r):e._instance.refs[t]=r},detach:function(e,t,n){if("function"==typeof t)t(null);else{var r=n.getPublicInstance();e._instance.refs[t]===r&&delete e._instance.refs[t]}}},e.exports=t.default},function(e,t,n){function r(e){return"string"==typeof e&&-1!==e.indexOf(l)}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:d;return e.replace(f,function(e){return parseFloat(e)*t+"px"})}function i(){return d}function a(e){d=e}function s(e,t){return"number"==typeof e&&!c[t]}function u(e,t){return t&&s(e,t)?e*d+"px":r(e)?o(e):e}Object.defineProperty(t,"__esModule",{value:!0}),t.isRem=r,t.calcRem=o,t.getRem=i,t.setRem=a,t.isUnitNumber=s,t.convertUnit=u;var c={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridRow:!0,gridColumn:!0,fontWeight:!0,lineClamp:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,lines:!0},l="rem",f=/[-+]?\d*\.?\d+rem/g,d=void 0},function(e,t,n){function r(e,t){return e.style=e.style||{},t.forEach(function(t){e[t]&&!e.style[t]&&(e.style[t]=e[t],delete e[t])}),e}function o(e,t,n){return e[t]&&!e[n]&&(e[n]=e[t],delete e[t]),e}Object.defineProperty(t,"__esModule",{value:!0}),t.transformPropsAttrsToStyle=r,t.renamePropsAttr=o},function(e,t,n){var r=n(10),o=function(e){return e&&e.__esModule?e:{default:e}}(r);"undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject&&__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(o.default)},function(e,t,n){function r(e){return null==e?null:i.default.get(e)}Object.defineProperty(t,"__esModule",{value:!0});var o=n(1),i=function(e){return e&&e.__esModule?e:{default:e}}(o);t.default=r,e.exports=t.default},function(e,t,n){function r(e){function t(e,t,n,r,i,a){return o}var n=t.bind(null,!1);return n.isRequired=t.bind(null,!0),n}Object.defineProperty(t,"__esModule",{value:!0});var o=function(e){function t(e,t,n,r,o){}return r(t)}();t.default={array:o,bool:o,func:o,number:o,object:o,string:o,symbol:o,element:o,node:o,any:o,arrayOf:o,instanceOf:o,objectOf:o,oneOf:o,oneOfType:o,shape:o},e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(3),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=function(e){function t(e,n){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n))}return i(t,e),a(t,[{key:"isPureComponentClass",value:function(){}}]),t}(u.default);t.default=c,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t,n,r){"function"==typeof n&&(r=n,n=null),(0,a.default)(n||{});var o=u.default.render(e,t),i=o.getPublicInstance();return r&&r.call(i),i}Object.defineProperty(t,"__esModule",{value:!0});var i=n(25),a=r(i),s=n(1),u=r(s),c=n(0);r(c);t.default=o,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default="0.2.11",e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var i=n(8),a=r(i),s=n(14),u=n(26),c=r(u),l={getElementById:function(e){return o.getElementById(e)},getParentNode:function(e){return e.parentNode},createBody:function(){return o.body},createComment:function(e){return o.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return o.createTextNode(e)},updateText:function(e,t){e["textContent"in o?"textContent":"nodeValue"]=t},createElement:function(e){var t=o.createElement(e.type),n=e.props;return(0,a.default)(t,n),t},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){(t=t||e.parentNode)&&t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode,n.replaceChild(e,t)},insertAfter:function(e,t,n){n=n||t.parentNode
+;var r=t.nextSibling;r?n.insertBefore(e,r):n.appendChild(e)},insertBefore:function(e,t,n){n=n||t.parentNode,n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEventListener(t,n)},removeEventListener:function(e,t,n){return e.removeEventListener(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t){if("dangerouslySetInnerHTML"===t)return e.innerHTML=null;"className"===t&&(t="class"),t in e&&(e[t]=null),e.removeAttribute(t)},setAttribute:function(e,t,n){if("dangerouslySetInnerHTML"===t)return e.innerHTML=n.__html;"className"===t&&(t="class"),t in e?e[t]=n:e.setAttribute(t,n)},setStyles:function(e,t){var n={};for(var r in t){var o=t[r];c.default.isFlexProp(r)?c.default[r](o,n):n[r]=(0,s.convertUnit)(o,r)}for(var i in n){var a=n[i];if(Array.isArray(a))for(var u=0;u<a.length;u++)e.style[i]=a[u];else e.style[i]=a}},beforeRender:function(){(0,s.setRem)(this.getWindowWidth()/750)},getWindowWidth:function(){return o.documentElement.clientWidth}};t.default=l,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=n(44),o=function(e){return e&&e.__esModule?e:{default:e}}(r);t.default=o.default,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0}),t.version=t.setNativeProps=t.findComponentInstance=t.unmountComponentAtNode=t.findDOMNode=t.render=t.PropTypes=t.PureComponent=t.Component=t.createFactory=t.isValidElement=t.cloneElement=t.createElement=void 0;var o=n(6);Object.defineProperty(t,"createElement",{enumerable:!0,get:function(){return o.createElement}}),Object.defineProperty(t,"cloneElement",{enumerable:!0,get:function(){return o.cloneElement}}),Object.defineProperty(t,"isValidElement",{enumerable:!0,get:function(){return o.isValidElement}}),Object.defineProperty(t,"createFactory",{enumerable:!0,get:function(){return o.createFactory}}),n(16);var i=n(3),a=r(i),s=n(19),u=r(s),c=n(18),l=r(c),f=n(20),d=r(f),p=n(7),h=r(p),v=n(9),m=r(v),y=n(17),_=r(y),g=n(8),b=r(g),w=n(21),O=r(w);t.Component=a.default,t.PureComponent=u.default,t.PropTypes=l.default,t.render=d.default,t.findDOMNode=h.default,t.unmountComponentAtNode=m.default,t.findComponentInstance=_.default,t.setNativeProps=b.default,t.version=O.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e){var t=e.driver,n=e.hook,r=e.measurer;if(s.default.EmptyComponent=c.default,s.default.NativeComponent=f.default,s.default.TextComponent=p.default,s.default.FragmentComponent=y.default,s.default.CompositeComponent=v.default,s.default.hook=n||S.default,s.default.measurer=r,!s.default.driver){if(!t)if(i.isWeex)t=g.default;else{if(!i.isWeb)throw Error("No builtin driver matched");t=w.default}s.default.driver=t}}Object.defineProperty(t,"__esModule",{value:!0}),t.default=o;var i=n(5),a=n(0),s=r(a),u=n(28),c=r(u),l=n(12),f=r(l),d=n(33),p=r(d),h=n(27),v=r(h),m=n(29),y=r(m),_=n(23),g=r(_),b=n(22),w=r(b),O=n(10),S=r(O);e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r={stretch:"stretch","flex-start":"start","flex-end":"end",center:"center"},o={row:"horizontal",column:"vertical"},i={"flex-start":"start","flex-end":"end",center:"center","space-between":"justify","space-around":"justify"},a={display:!0,flex:!0,alignItems:!0,alignSelf:!0,flexDirection:!0,justifyContent:!0,flexWrap:!0},s={isFlexProp:function(e){return a[e]},display:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.display="flex"===e?["-webkit-box","-webkit-flex","flex"]:e,t},flex:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxFlex=e,t.webkitFlex=e,t.flex=e,t},flexWrap:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.flexWrap=e,t},alignItems:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxAlign=r[e],t.webkitAlignItems=e,t.alignItems=e,t},alignSelf:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitAlignSelf=e,t.alignSelf=e,t},flexDirection:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxOrient=o[e],t.webkitFlexDirection=e,t.flexDirection=e,t},justifyContent:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return t.webkitBoxPack=i[e],t.webkitJustifyContent=e,t.justifyContent=e,t}};t.default=s,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){try{return e()}catch(e){if(t)t(e);else{if(!d.default.sandbox)throw e;setTimeout(function(){throw e},0)}}}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(32),u=r(s),c=n(34),l=r(c),f=n(0),d=r(f),p=n(13),h=r(p),v=n(2),m=r(v),y=n(4),_=r(y),g=n(31),b=r(g),w=function(){function e(t){o(this,e),this._currentElement=t}return a(e,[{key:"getName",value:function(){var e=this._currentElement.type,t=this._instance&&this._instance.constructor;return e.displayName||t&&t.displayName||e.name||t&&t.name||null}},{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=d.default.mountID++,this._updateCount=0;var r=this._currentElement.type,o=this._currentElement.props,a=r.prototype,s=a&&r.prototype.isComponentClass,c=a&&r.prototype.render,f=this._processContext(t),p=void 0,v=void 0;if(s||c)p=new r(o,f,l.default);else{if("function"!=typeof r)throw Error("Invalid component type "+JSON.stringify(r));p=new u.default(r)}p.props=o,p.context=f,p.refs={},p.updater=l.default,p._internal=this,this._instance=p;var y=p.state;if(void 0===y&&(p.state=y=null),i(function(){p.componentWillMount&&p.componentWillMount()}),null==v){d.default.component=this,p.state=this._processPendingState(o,f);var _=void 0;"function"==typeof p.handleError&&(_=function(e){p.handleError(e)}),i(function(){v=p.render()},_),d.default.component=null}return this._renderedComponent=(0,m.default)(v),this._renderedComponent.mountComponent(this._parent,this._processChildContext(t),n),this._currentElement&&this._currentElement.ref&&h.default.attach(this._currentElement._owner,this._currentElement.ref,this),i(function(){p.componentDidMount&&p.componentDidMount()}),d.default.hook.Reconciler.mountComponent(this),p}},{key:"unmountComponent",value:function(e){var t=this._instance;if(i(function(){t.componentWillUnmount&&t.componentWillUnmount()}),d.default.hook.Reconciler.unmountComponent(this),t._internal=null,null!=this._renderedComponent){var n=this._currentElement.ref;n&&h.default.detach(this._currentElement._owner,n,this),this._renderedComponent.unmountComponent(e),this._renderedComponent=null,this._instance=null}this._currentElement=null,this._pendingStateQueue=null,this._pendingForceUpdate=!1,this._context=null}},{key:"_processContext",value:function(e){var t=this._currentElement.type,n=t.contextTypes;if(!n)return{};var r={};for(var o in n)r[o]=e[o];return r}},{key:"_processChildContext",value:function(e){var t=this._instance,n=t.getChildContext&&t.getChildContext();return n?Object.assign({},e,n):e}},{key:"_processPendingState",value:function(e,t){var n=this._instance,r=this._pendingStateQueue;if(!r)return n.state;this._pendingStateQueue=null;for(var o=Object.assign({},n.state),i=0;i<r.length;i++){var a=r[i];Object.assign(o,"function"==typeof a?a.call(n,o,e,t):a)}return o}},{key:"updateComponent",value:function(e,t,n,r){var o=this._instance;o||console.error("Update component '"+this.getName()+"' that has already been unmounted (or failed to mount).");var a=!1,s=void 0,u=void 0;this._context===r?s=o.context:(s=this._processContext(r),a=!0),e===t?u=t.props:(u=t.props,a=!0);var c=a&&o.componentWillReceiveProps;c&&(this._pendingState=!0,i(function(){o.componentWillReceiveProps(u,s)}),this._pendingState=!1),h.default.update(e,t,this);var f=!0,p=o.props,v=o.state,m=this._processPendingState(u,s);if(this._pendingForceUpdate||(o.shouldComponentUpdate?f=i(function(){return o.shouldComponentUpdate(u,m,s)}):o.isPureComponentClass&&(f=!(0,b.default)(p,u)||!(0,b.default)(v,m))),f){this._pendingForceUpdate=!1;var y=o.context;i(function(){o.componentWillUpdate&&o.componentWillUpdate(u,m,s)}),this._currentElement=t,this._context=r,o.props=u,o.state=m,o.context=s,this._updateRenderedComponent(r),i(function(){o.componentDidUpdate&&o.componentDidUpdate(p,v,y)}),this._updateCount++}else this._currentElement=t,this._context=r,o.props=u,o.state=m,o.context=s;if(c){var _=this._pendingCallbacks;this._pendingCallbacks=null,l.default.runCallbacks(_,o)}d.default.hook.Reconciler.receiveComponent(this)}},{key:"_updateRenderedComponent",value:function(e){var t=this._renderedComponent,n=t._currentElement,r=this._instance,o=void 0;if(d.default.component=this,i(function(){o=r.render()}),d.default.component=null,(0,_.default)(n,o))t.updateComponent(n,o,t._context,this._processChildContext(e));else{var a=t.getNativeNode();t.unmountComponent(!0),this._renderedComponent=(0,m.default)(o),this._renderedComponent.mountComponent(this._parent,this._processChildContext(e),function(e,t){Array.isArray(e)||(e=[e]),Array.isArray(a)||(a=[a]);for(var n=void 0,r=0;r<e.length;r++){var o=e[r];a[r]?d.default.driver.replaceChild(o,a[r]):d.default.driver.insertAfter(o,n),n=o}if(e.length<a.length)for(var i=e.length;i<a.length;i++)d.default.driver.removeChild(a[i])})}}},{key:"getNativeNode",value:function(){var e=this._renderedComponent;if(e)return e.getNativeNode()}},{key:"getPublicInstance",value:function(){var e=this._instance;return e instanceof u.default?null:e}}]),e}();t.default=w,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(){r(this,e),this._currentElement=null}return o(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t;var r={_internal:this},o=this.getNativeNode();return n?n(o,e):a.default.driver.appendChild(o,e),r}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),this._nativeNode=null,this._parent=null,this._context=null}},{key:"updateComponent",value:function(){}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createEmpty()),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),u=n(0),c=r(u),l=n(12),f=r(l),d=n(1),p=r(d),h=n(2),v=r(h),m=n(11),y=r(m),_=function(e){function t(e){return o(this,t),i(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e))}return a(t,e),s(t,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=c.default.mountID++;var r={_internal:this};this._instance=r;var o=this.getNativeNode(),i=this._currentElement;if(this.mountChildren(i,t),n)n(o,e);else for(var a=Array.isArray(e),s=0;s<o.length;s++){var u=o[s];a?e.push(u):c.default.driver.appendChild(u,e)}return r}},{key:"mountChildren",value:function(e,t){var n=this,r={},o=this.getNativeNode(),i=e.map(function(e,i){var a=(0,v.default)(e),s=(0,y.default)(r,e,i);return r[s]=a,a._mountIndex=i,a.mountComponent(n._parent,t,function(e){if(Array.isArray(e))for(var t=0;t<e.length;t++)o.push(e[t]);else o.push(e)})});return this._renderedChildren=r,i}},{key:"unmountComponent",value:function(e){var t=this;if(this._nativeNode&&(p.default.remove(this._nativeNode),!e))for(var n=0;n<this._nativeNode.length;n++)c.default.driver.removeChild(t._nativeNode[n]);this.unmountChildren(!0),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._instance=null}},{key:"updateComponent",value:function(e,t,n,r){this._currentElement=t,this.updateChildren(this._currentElement,r)}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=[]),this._nativeNode}},{key:"getPublicInstance",value:function(){return this.getNativeNode()}},{key:"getName",value:function(){return"fragment"}}]),t}(f.default);t.default=_,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function i(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),s=n(3),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=1,l=function(e){function t(){var e,n,i,a,s=arguments;r(this,t);for(var u=arguments.length,l=Array(u),f=0;f<u;f++)l[f]=s[f];return n=i=o(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),i.rootID=c++,a=n,o(i,a)}return i(t,e),a(t,[{key:"isRootComponent",value:function(){}},{key:"render",value:function(){return this.props.children}},{key:"getPublicInstance",value:function(){return this.getRenderedComponent().getPublicInstance()}},{key:"getRenderedComponent",value:function(){return this._internal._renderedComponent}}]),t}(u.default);t.default=l,e.exports=t.default},function(e,t,n){function r(e,t){return e===t?0!==e||1/e==1/t:e!==e&&t!==t}function o(e,t){if(r(e,t))return!0;if("object"!==(void 0===e?"undefined":i(e))||null===e||"object"!==(void 0===t?"undefined":i(t))||null===t)return!1;var n=Object.keys(e),o=Object.keys(t);if(n.length!==o.length)return!1;for(var s=0;s<n.length;s++)if(!a.call(t,n[s])||!r(e[n[s]],t[n[s]]))return!1;return!0}Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a=Object.prototype.hasOwnProperty;t.default=o,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=(function(e){e&&e.__esModule}(i),function(){function e(t){r(this,e),this.pureRender=t}return o(e,[{key:"render",value:function(){return this.pureRender(this.props,this.context)}}]),e}());t.default=a,e.exports=t.default},function(e,t,n){function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),i=n(0),a=function(e){return e&&e.__esModule?e:{default:e}}(i),s=function(){function e(t){r(this,e),this._currentElement=t,this._stringText=String(t)}return o(e,[{key:"mountComponent",value:function(e,t,n){this._parent=e,this._context=t,this._mountID=a.default.mountID++;var r=this.getNativeNode();n?n(r,e):a.default.driver.appendChild(r,e);var o={_internal:this};return a.default.hook.Reconciler.mountComponent(this),o}},{key:"unmountComponent",value:function(e){this._nativeNode&&!e&&a.default.driver.removeChild(this._nativeNode,this._parent),a.default.hook.Reconciler.unmountComponent(this),this._currentElement=null,this._nativeNode=null,this._parent=null,this._context=null,this._stringText=null}},{key:"updateComponent",value:function(e,t,n){e!==t&&(this._currentElement=t,this._stringText=String(t),a.default.driver.updateText(this.getNativeNode(),t),a.default.hook.Reconciler.receiveComponent(this))}},{key:"getNativeNode",value:function(){return null==this._nativeNode&&(this._nativeNode=a.default.driver.createText(this._stringText)),this._nativeNode}}]),e}();t.default=s,e.exports=t.default},function(e,t,n){function r(e,t){if(t){(e._pendingCallbacks||(e._pendingCallbacks=[])).push(t)}}function o(e,t){if(t){(e._pendingStateQueue||(e._pendingStateQueue=[])).push(t)}}Object.defineProperty(t,"__esModule",{value:!0});var i={setState:function(e,t,n){var i=e._internal;i&&(o(i,t),r(i,n),i._pendingState||this.runUpdate(e))},forceUpdate:function(e,t){var n=e._internal;n&&(n._pendingForceUpdate=!0,r(n,t),this.runUpdate(e))},runUpdate:function(e){var t=e._internal;if(t&&t._renderedComponent){var n=t._pendingCallbacks;t._pendingCallbacks=null;var r=t._currentElement,o=t._context;(t._pendingStateQueue||t._pendingForceUpdate)&&t.updateComponent(r,r,o,o),this.runCallbacks(n,e)}},runCallbacks:function(e,t){if(e)for(var n=0;n<e.length;n++)e[n].call(t)}};t.default=i,e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){return e.type="div",e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e};t.default={parse:function(e){var t=e.props;e.type="text";var n=t.style,o=t.disabled,i=t.children,a=r({textAlign:"center",fontSize:22,paddingTop:4,paddingRight:12,paddingBottom:6,paddingLeft:12,borderWidth:4,borderStyle:"solid",borderColor:"#000000",backgroudColor:"#c0c0c0"},n);return o&&(t.onClick=null,a=r({},a,{color:"#7f7f7f",borderColor:"#7f7f7f"})),"string"==typeof i&&(t.value=i,t.children=null),e}},e.exports=t.default},function(e,t,n){function r(e,t,n){return{fontSize:e*t,marginTop:e*t*n,marginBottom:e*t*n,fontWeight:"bold"}}Object.defineProperty(t,"__esModule",{value:!0});var o=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},i={h1:r(28,2,.67),h2:r(28,1.5,.83),h3:r(28,1.17,1),h4:r(28,1,1.33),h5:r(28,.83,1.67),h6:r(28,.67,2.33)};t.default={parse:function(e){var t=e.type,n=e.props;return e.type="text",n.style=o({},i[t]||i.h6,n.style),"string"!=typeof n.children||n.value||(n.value=n.children,n.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.type="image",e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e}},e.exports=t.default},function(e,t,n){function r(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(38),i=r(o),a=n(43),s=r(a),u=n(42),c=r(u),l=n(41),f=r(l),d=n(40),p=r(d),h=n(36),v=r(h),m=n(37),y=r(m),_=n(35),g=r(_);t.default={span:f.default,p:p.default,img:i.default,button:v.default,video:s.default,textarea:c.default,h1:y.default,h2:y.default,h3:y.default,h4:y.default,h5:y.default,h6:y.default,nav:g.default,article:g.default,section:g.default,footer:g.default,aside:g.default,main:g.default},e.exports=t.default},function(e,t,n){function r(e){return{type:"span",attr:{value:e}}}function o(e){var t=e.type,n=e.props,r=n.style,o=n.children;"img"===t&&(t="image"),l[t]&&(r=u({},l[t],r),t="span"),n.style=null,n.children=null;var a={type:t,style:r,attr:n||{}};return o&&("span"===t&&"string"==typeof o?a.attr.value=o:a.children=i(o)),a}function i(e){var t=[];Array.isArray(e)||(e=[e]);for(var n=0;n<e.length;n++){var i=e[n];"string"==typeof i?t.push(r(i)):"object"===(void 0===i?"undefined":s(i))&&t.push(o(i))}return t}var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var s="function"==typeof Symbol&&"symbol"===a(Symbol.iterator)?function(e){return void 0===e?"undefined":a(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":a(e)},u=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},c={fontSize:28,marginTop:28,marginBottom:28},l={u:{textDecoration:"underline"},s:{textDecoration:"line-through"},i:{fontStyle:"italic"},b:{fontWeight:"bold"},del:{textDecoration:"line-through"},em:{fontStyle:"italic"},strong:{fontWeight:"bold"},big:{fontSize:33.6},small:{fontSize:28*.8}};t.default={parse:function(e){var t=e.props,n=t.children;return e.type="richtext",t.style=u({},c,t.style),t.value=i(n),t.children=null,e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return e.type="text","string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.default={parse:function(e){var t=e.props;return"string"!=typeof t.children||t.value||(t.value=t.children,t.children=null),e}},e.exports=t.default},function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0});var r=n(15);t.default={parse:function(e){var t=e.props;return e.props=(0,r.transformPropsAttrsToStyle)(t,["width","height"]),e.props=(0,r.renamePropsAttr)(t,"autoplay","auto-play"),e}},e.exports=t.default},function(e,t,n){var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};Object.defineProperty(t,"__esModule",{value:!0});var i="function"==typeof Symbol&&"symbol"===o(Symbol.iterator)?function(e){return void 0===e?"undefined":o(e)}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":void 0===e?"undefined":o(e)},a=n(14),s=n(39),u=function(e){return e&&e.__esModule?e:{default:e}}(s),c=/on[A-Z]/,l={},f="object"===(void 0===r?"undefined":i(r))?r:"object"===(void 0===f?"undefined":i(f))?f:null,d={getElementById:function(e){return l[e]},getParentNode:function(e){return e.parentNode},createBody:function(){if(f.body)return f.body;var e=f.documentElement,t=f.createBody();return e.appendChild(t),t},createComment:function(e){return f.createComment(e)},createEmpty:function(){return this.createComment(" empty ")},createText:function(e){return d.createElement({type:"text",props:{value:e}})},updateText:function(e,t){this.setAttribute(e,"value",t)},createElement:function(e){var t=u.default[e.type];t&&(e=t.parse(e));var n=e.props,r={},o=n.style;for(var i in o)r[i]=(0,a.convertUnit)(o[i],i);var s=f.createElement(e.type,{style:r});return this.setNativeProps(s,n),s},appendChild:function(e,t){return t.appendChild(e)},removeChild:function(e,t){t=t||e.parentNode;var n=e.attr&&e.attr.id;return null!=n&&(l[n]=null),t.removeChild(e)},replaceChild:function(e,t,n){n=n||t.parentNode;var r=t.previousSibling,o=t.nextSibling;this.removeChild(t,n),r?this.insertAfter(e,r,n):o?this.insertBefore(e,o,n):this.appendChild(e,n)},insertAfter:function(e,t,n){return n=n||t.parentNode,n.insertAfter(e,t)},insertBefore:function(e,t,n){return n=n||t.parentNode,n.insertBefore(e,t)},addEventListener:function(e,t,n){return e.addEvent(t,n)},removeEventListener:function(e,t,n){return e.removeEvent(t,n)},removeAllEventListeners:function(e){},removeAttribute:function(e,t,n){return"id"==t&&(l[n]=null),e.setAttr(t,void 0,!1)},setAttribute:function(e,t,n){return"id"==t&&(l[n]=e),e.setAttr(t,n,!1)},setStyles:function(e,t){for(var n in t){var r=t[n];r=(0,a.convertUnit)(r,n),e.setStyle(n,r)}},beforeRender:function(){f.open(),(0,a.setRem)(this.getWindowWidth()/750)},afterRender:function(){f.listener&&f.listener.createFinish&&f.listener.createFinish(),f.close()},getWindowWidth:function(){return 750},setNativeProps:function(e,t){var n=this;for(var r in t){var o=t[r];if("children"!==r&&null!=o)if(c.test(r)){var i=r.slice(2).toLowerCase();n.addEventListener(e,i,o)}else n.setAttribute(e,r,o)}}};t.default=d,e.exports=t.default}])}},function(e,t,n){function r(e,t){var n;for(var r in P)P.hasOwnProperty(r)&&(n=P[r],"*"!==t&&t!==n.origin||(e.target=n.window,n.window.dispatchEvent(e)))}function o(e){e.taskCenter.send("dom",{action:"updateFinish"},[])}function i(e){var t=P[e];if(!t)throw new Error('Invalid instance id "'+e+'"');return t}function a(e){k=e.Document,C=e.Element,j=e.Comment}function s(e){Array.isArray(e)&&e.forEach(function(e){e&&("string"==typeof e?x[e]=!0:"object"===(void 0===e?"undefined":b(e))&&"string"==typeof e.type&&(x[e.type]=e))})}function u(e){}function c(e){if("object"===(void 0===e?"undefined":b(e)))for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(E[t]=e[t])}function l(e,t,n){for(var r in t)e[r]={factory:t[r].bind(n),module:{exports:{}},isInitialized:!1};return e}function f(e,t){if("object"===(void 0===E?"undefined":b(E))){for(var n in E)!function(n){var r=A+n;e[r]={module:{exports:{}},isInitialized:!0},E[n].forEach(function(o){"string"==typeof o&&(o={name:o});var i=o.name;e[r].module.exports[i]=function(){for(var e=arguments,r=arguments.length,o=Array(r),a=0;a<r;a++)o[a]=e[a];return t.taskCenter.send("module",{module:n,method:i},o)}})}(n)}return e}function d(e,t,o,i,a){var s=P[e];if(void 0!=s)throw new Error('Instance id "'+e+'" existed when create instance');var u=Date.now(),c="object"===("undefined"==typeof WXEnvironment?"undefined":b(WXEnvironment))&&WXEnvironment||{},d=n(2)(),p="function"==typeof p?p:d.Promise,h="function"==typeof h?h:d.Symbol,v="function"==typeof v?v:d.Set,m="function"==typeof m?m:d.Map,y="function"==typeof y?y:d.WeakMap,_="function"==typeof _?_:d.WeakSet,O=d.URL,x=d.URLSearchParams,E=d.FontFace,C=d.matchMedia,j=new k(e,o.bundleUrl),A=new O(o.bundleUrl),N={};s=P[e]={document:j,instanceId:e,modules:N,origin:A.origin,uid:0},f(N,j);var M=n(5)(N),$=n(11)(N),R=n(7)($);n(6)($,j);var D=n(9)($,p),F=D.fetch,L=D.Headers,B=D.Request,U=D.Response,V=n(13)($),z=n(12)($,j),W=z.setTimeout,q=z.clearTimeout,J=z.setInterval,H=z.clearInterval,G=z.requestAnimationFrame,X=z.cancelAnimationFrame,K=n(3)(),Z=K.atob,Q=K.btoa,Y=n(10)(u),ee=n(8)(),te=ee.Event,ne=ee.CustomEvent,re=new S.default,oe={Promise:p,Symbol:h,Map:m,Set:v,WeakMap:y,WeakSet:_,name:"",closed:!1,atob:Z,btoa:Q,performance:Y,document:j,location:A,navigator:{product:"Weex",platform:c.platform,appName:c.appName,appVersion:c.appVersion},screen:{width:c.deviceWidth,height:c.deviceHeight,availWidth:c.deviceWidth,availHeight:c.deviceHeight,colorDepth:24,pixelDepth:24},devicePixelRatio:c.scale,fetch:F,Headers:L,Response:U,Request:B,URL:O,URLSearchParams:x,FontFace:E,WebSocket:V,Event:te,CustomEvent:ne,matchMedia:C,setTimeout:W,clearTimeout:q,setInterval:J,clearInterval:H,requestAnimationFrame:G,cancelAnimationFrame:X,alert:function(e){$(I).alert({message:e},function(){})},open:function(e){$(T).push({url:e,animated:"true"},function(e){})},postMessage:function(e,t){r({origin:A.origin,data:JSON.parse(JSON.stringify(e)),type:"message",source:oe},t)},addEventListener:function(e,t){re.on(e,t)},removeEventListener:function(e,t){re.off(e,t)},dispatchEvent:function(e){re.emit(e.type,e)},define:M,require:$,__weex_document__:j,__weex_define__:M,__weex_require__:$,__weex_downgrade__:R,__weex_env__:c,__weex_code__:t,__weex_options__:o,__weex_data__:i};s.window=oe.self=oe.window=oe;var ie={},ae={};try{ie=a.services.builtinGlobals,ae=a.services.builtinModules}catch(e){}if(Object.assign(oe,ie),l(N,g({},w.ModuleFactories,ae),oe),"Web"!==c.platform){var se=Y.timing;se.domLoading=Date.now(),new Function('with(this){(function(){"use strict";\n'+t+"\n}).call(this)}").call(oe),se.domInteractive=se.domComplete=se.domInteractive=Date.now()}else new Function('"use strict";\n'+t).call(oe)}function p(e,t){var n=i(e),r=n.document;r.documentElement.fireEvent("refresh",{timestamp:Date.now(),data:t}),r.taskCenter.send("dom",{action:"refreshFinish"},[])}function h(e){var t=i(e);t.window.closed=!0;var n=t.document;n.documentElement.fireEvent("destory",{timestamp:Date.now()}),n.destroy&&n.destroy(),n.taskCenter&&n.taskCenter.destroyCallback&&n.taskCenter.destroyCallback(),delete P[e]}function v(e){var t=i(e),n=t.document;return n.toJSON?n.toJSON():{}}function m(e,t,n,r,i){if(Array.isArray(t))return void t.some(function(t){return!1!==m(e,t,n,r)});var a=e.getRef(t);if(a){var s=e.fireEvent(a,n,r,i);return o(e),s}return new Error('Invalid element reference "'+t+'"')}function y(e,t){var n=i(e);if(Array.isArray(t)){var r=n.document,a=[];return t.forEach(function(e){var t=void 0;if("fireEvent"===e.method){var n=_(e.args,4),i=n[0],s=n[1],u=n[2],c=n[3];t=m(r,i,s,u,c)}else if("callback"===e.method){var l=_(e.args,3),f=l[0],d=l[1],p=l[2];t=r.taskCenter.callback(f,d,p),o(r)}a.push(t)}),a}}Object.defineProperty(t,"__esModule",{value:!0});var _=function(){function e(e,t){var n=[],r=!0,o=!1,i=void 0;try{for(var a,s=e[Symbol.iterator]();!(r=(a=s.next()).done)&&(n.push(a.value),!t||n.length!==t);r=!0);}catch(e){o=!0,i=e}finally{try{!r&&s.return&&s.return()}finally{if(o)throw i}}return n}return function(t,n){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return e(t,n);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),g=Object.assign||function(e){for(var t=arguments,n=1;n<arguments.length;n++){var r=t[n];for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(e[o]=r[o])}return e},b="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.getInstance=i,t.init=a,t.registerComponents=s,t.registerMethods=u,t.registerModules=c,t.createInstance=d,t.refreshInstance=p,t.destroyInstance=h,t.getRoot=v,t.receiveTasks=y;var w=n(4),O=n(1),S=function(e){return e&&e.__esModule?e:{default:e}}(O),x={},E={},k=void 0,C=void 0,j=void 0,A="@weex-module/",I=A+"modal",T=A+"navigator",P={};t.default=t},function(e,t,n){
+Object.defineProperty(t,"__esModule",{value:!0});var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.default={satisfies:function(e,t){if((void 0===e?"undefined":r(e))+(void 0===t?"undefined":r(t))!="stringstring")return!1;if("*"==t)return!0;for(var n=t.match(/(\W+)?([\d|.]+)/),o=e.split("."),i=n[2].split("."),a=Math.max(o.length,i.length),s=0,u=0;u<a;u++){if(o[u]&&!i[u]&&parseInt(o[u])>0||parseInt(o[u])>parseInt(i[u])){s=1;break}if(i[u]&&!o[u]&&parseInt(i[u])>0||parseInt(o[u])<parseInt(i[u])){s=-1;break}}switch(n[1]){case"<":if(-1===s)return!0;break;case"<=":if(1!==s)return!0;break;case">":if(1===s)return!0;break;case">=":if(-1!==s)return!0;break;default:if(0===s)return!0}return!1}},e.exports=t.default},function(e,t,n){function r(e,t){for(var n=e[a][t];null!=n;){if(n.kind===s)return n.listener;n=n.next}return null}function o(e,t,n){"function"!=typeof n&&"object"!=typeof n&&(n=null);for(var r=null,o=e[a][t];null!=o;)o.kind===s?null==r?e[a][t]=o.next:r.next=o.next:r=o,o=o.next;null!=n&&(null==r?e[a][t]=u(n,s):r.next=u(n,s))}var i=n(0),a=i.LISTENERS,s=i.ATTRIBUTE,u=i.newNode;e.exports.defineCustomEventTarget=function(e,t){function n(){e.call(this)}var i={constructor:{value:n,configurable:!0,writable:!0}};return t.forEach(function(e){i["on"+e]={get:function(){return r(this,e)},set:function(t){o(this,e,t)},configurable:!0,enumerable:!0}}),n.prototype=Object.create(e.prototype,i),n}},function(e,t,n){var r=n(0),o=n(17),i=n(19),a=r.isObject,s=r.LISTENERS,u=r.CAPTURE,c=r.BUBBLE,l=r.ATTRIBUTE,f=r.newNode,d=o.defineCustomEventTarget,p=i.createEventWrapper,h=i.STOP_IMMEDIATE_PROPAGATION_FLAG,v=i.PASSIVE_LISTENER_FLAG,m="undefined"!=typeof window&&void 0!==window.EventTarget,y=e.exports=function e(){var t=arguments;if(!(this instanceof e)){if(1===arguments.length&&Array.isArray(arguments[0]))return d(e,arguments[0]);if(arguments.length>0){for(var n=Array(arguments.length),r=0;r<arguments.length;++r)n[r]=t[r];return d(e,n)}throw new TypeError("Cannot call a class as a function")}Object.defineProperty(this,s,{value:Object.create(null)})};y.prototype=Object.create((m?window.EventTarget:Object).prototype,{constructor:{value:y,writable:!0,configurable:!0},addEventListener:{value:function(e,t,n){if(null==t)return!1;if("function"!=typeof t&&"object"!=typeof t)throw new TypeError('"listener" is not an object.');var r=a(n)?Boolean(n.capture):Boolean(n),o=r?u:c,i=this[s][e];if(null==i)return this[s][e]=f(t,o,n),console.log(this[s]),!0;for(var l=null;null!=i;){if(i.listener===t&&i.kind===o)return!1;l=i,i=i.next}return l.next=f(t,o,n),!0},configurable:!0,writable:!0},removeEventListener:{value:function(e,t,n){var r=this;if(null==t)return!1;for(var o=a(n)?Boolean(n.capture):Boolean(n),i=o?u:c,l=null,f=this[s][e];null!=f;){if(f.listener===t&&f.kind===i)return null==l?r[s][e]=f.next:l.next=f.next,!0;l=f,f=f.next}return!1},configurable:!0,writable:!0},dispatchEvent:{value:function(e){var t=this,n=e.type;console.log(n,this[s]);var r=this[s][n];if(console.log(n,r),null==r)return!0;for(var o=p(e,this),i=null;null!=r&&(r.once?null==i?t[s][n]=r.next:i.next=r.next:i=r,o[v]=r.passive,"function"==typeof r.listener?r.listener.call(t,o):r.kind!==l&&"function"==typeof r.listener.handleEvent&&r.listener.handleEvent(o),!o[h]);)r=r.next;return!o.defaultPrevented},configurable:!0,writable:!0}})},function(e,t,n){var r=n(0).createUniqueKey,o=r("stop_immediate_propagation_flag"),i=r("canceled_flag"),a=r("passive_listener_flag"),s=r("original_event"),u=Object.freeze({stopPropagation:Object.freeze({value:function(){var e=this[s];"function"==typeof e.stopPropagation&&e.stopPropagation()},writable:!0,configurable:!0}),stopImmediatePropagation:Object.freeze({value:function(){this[o]=!0;var e=this[s];"function"==typeof e.stopImmediatePropagation&&e.stopImmediatePropagation()},writable:!0,configurable:!0}),preventDefault:Object.freeze({value:function(){if(!this[a]){!0===this.cancelable&&(this[i]=!0);var e=this[s];"function"==typeof e.preventDefault&&e.preventDefault()}},writable:!0,configurable:!0}),defaultPrevented:Object.freeze({get:function(){return this[i]},enumerable:!0,configurable:!0})});e.exports.STOP_IMMEDIATE_PROPAGATION_FLAG=o,e.exports.PASSIVE_LISTENER_FLAG=a,e.exports.createEventWrapper=function(e,t){var n="number"==typeof e.timeStamp?e.timeStamp:Date.now(),r={type:{value:e.type,enumerable:!0},target:{value:t,enumerable:!0},currentTarget:{value:t,enumerable:!0},eventPhase:{value:2,enumerable:!0},bubbles:{value:Boolean(e.bubbles),enumerable:!0},cancelable:{value:Boolean(e.cancelable),enumerable:!0},timeStamp:{value:n,enumerable:!0},isTrusted:{value:!1,enumerable:!0}};return r[o]={value:!1,writable:!0},r[i]={value:!1,writable:!0},r[a]={value:!1,writable:!0},r[s]={value:e},void 0!==e.detail&&(r.detail={value:e.detail,enumerable:!0}),Object.create(Object.create(e,u),r)}}])}),Yu=e(Qu),ec={Vanilla:iu,Vue:_u,Rax:Yu,Weex:Zu},tc={},nc={};Dn.prototype.postMessage=function(e){var t=this;if(this._closed)throw new Error('BroadcastChannel "'+this.name+'" is closed.');var n=tc[this.name];if(n&&n.length)for(var r=0;r<n.length;++r){var o=n[r];o._closed||o===t||"function"==typeof o.onmessage&&o.onmessage(new Rn("message",{data:e}))}},Dn.prototype.close=function(){var e=this;if(!this._closed&&(this._closed=!0,tc[this.name])){var t=tc[this.name].filter(function(t){return t!==e});t.length?tc[this.name]=t:delete tc[this.name]}};var rc={create:function(e,t,n){if(nc[e]=[],"function"==typeof global.BroadcastChannel)return{};var r={BroadcastChannel:function(t){Object.defineProperty(this,"name",{configurable:!1,enumerable:!0,writable:!1,value:String(t)}),this._closed=!1,this.onmessage=null,tc[this.name]||(tc[this.name]=[]),tc[this.name].push(this),nc[e].push(this)}};return r.BroadcastChannel.prototype=Dn.prototype,{instance:r}},destroy:function(e,t){nc[e].forEach(function(e){return e.close()}),delete nc[e]}},oc={BroadcastChannel:rc},ic=qs.init,ac=qs.config;ac.frameworks=ec;var sc=qn.native,uc=qn.transformer;for(var cc in oc)qs.service.register(cc,oc[cc]);qs.freezePrototype(),qs.setNativeConsole(),global.frameworkVersion=sc,global.transformerVersion=uc;var lc=ic(ac);for(var fc in lc)!function(e){global[e]=function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];var r=lc[e].apply(lc,t);return r instanceof Error&&console.error(r.toString()),r}}(fc);var dc=Object.freeze({$userTrack:Fn,$sendMtop:Ln,$callWindvane:Bn,$setSpm:Un,$getUserInfo:Vn,$login:zn,$logout:Wn});global.registerMethods(dc)});
\ No newline at end of file
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h b/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
index 3270a95..9bde252 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <JavaScriptCore/JavaScriptCore.h>
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m b/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m
index 3bc3dda..876e024 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/JSValue+Weex.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "JSValue+Weex.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
index eb6c676..2f90d47 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
index 4f101b9..a982e92 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeContext.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeContext.h"
@@ -246,6 +257,10 @@
     if([self.insStack containsObject:instance]){
         [self.insStack removeObject:instance];
     }
+    
+    if(_jsBridge && [_jsBridge respondsToSelector:@selector(removeTimers:)]){
+        [_jsBridge removeTimers:instance];
+    }
 
     if(self.sendQueue[instance]){
         [self.sendQueue removeObjectForKey:instance];
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
index 5cfc657..366efe1 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -12,7 +23,7 @@
 @interface WXBridgeMethod : NSObject
 
 @property (nonatomic, strong, readonly) NSString *methodName;
-@property (nonatomic, copy, readonly) NSArray *arguments;
+@property (nonatomic, copy, readonly) NSMutableArray *arguments;
 @property (nonatomic, weak, readonly) WXSDKInstance *instance;
 
 - (instancetype)initWithMethodName:(NSString *)methodName
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m
index c9ca9fa..bf401a1 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeMethod.h"
@@ -21,7 +32,7 @@
 {
     if (self = [super init]) {
         _methodName = methodName;
-        _arguments = arguments;
+        _arguments = [NSMutableArray arrayWithArray:arguments];
         _instance = instance;
     }
     
@@ -37,7 +48,9 @@
 //https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtTypeEncodings.html
 -(id)parseArgument:(id)obj parameterType:(const char *)parameterType order:(int)order
 {
+#ifdef DEBUG
     BOOL check = YES;
+#endif
     if (strcmp(parameterType,@encode(float))==0 || strcmp(parameterType,@encode(double))==0)
     {
 #ifdef DEBUG
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h b/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
index 50cdc20..d2ecb35 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeMethod.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m
index ea98885..31b9117 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXCallJSMethod.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXCallJSMethod.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h b/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
index 5906e09..d44ddcd 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeMethod.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m
index e8c5225..1ead434 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXComponentMethod.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponentMethod.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.h b/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.h
index ac29521..c86b12e 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.m
index 5248313..fcc4cb3 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXDebugLoggerBridge.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDebugLoggerBridge.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
index b3c604c..42e3e1b 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
index 593ed27..7d58cf3 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXJSCoreBridge.h"
@@ -21,6 +32,8 @@
 #import <JavaScriptCore/JavaScriptCore.h>
 #import "WXPolyfillSet.h"
 #import "JSValue+Weex.h"
+#import "WXJSExceptionProtocol.h"
+#import "WXSDKManager.h"
 
 #import <dlfcn.h>
 
@@ -30,6 +43,7 @@
 @interface WXJSCoreBridge ()
 
 @property (nonatomic, strong)  JSContext *jsContext;
+@property (nonatomic, strong)  NSMutableArray *timers;
 
 @end
 
@@ -44,6 +58,7 @@
         if (WX_SYS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")) {
             _jsContext.name = @"Weex Context";
         }
+        _timers = [NSMutableArray new];
         
         __weak typeof(self) weakSelf = self;
         
@@ -57,6 +72,15 @@
             } afterDelay:[timeout toDouble] / 1000];
         };
         
+        _jsContext[@"setTimeoutWeex"] = ^(JSValue *appid, JSValue *ret,JSValue *arg ) {
+            [weakSelf triggerTimeout:[appid toString] ret:[ret toString] arg:[arg toString]];
+        };
+        
+        _jsContext[@"setIntervalWeex"] = ^(JSValue *appid, JSValue *ret,JSValue *arg) {
+            [weakSelf triggerInterval:[appid toString] ret:[ret toString] arg:[arg toString]];
+            
+        };
+        
         _jsContext[@"nativeLog"] = ^() {
             static NSDictionary *levelMap;
             static dispatch_once_t onceToken;
@@ -96,7 +120,13 @@
         _jsContext.exceptionHandler = ^(JSContext *context, JSValue *exception){
             context.exception = exception;
             NSString *message = [NSString stringWithFormat:@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]];
+            id<WXJSExceptionProtocol> jsExceptionHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXJSExceptionProtocol)];
             
+            WXSDKInstance *instance = [WXSDKEngine topInstance];
+            if ([jsExceptionHandler respondsToSelector:@selector(onJSException:)]) {
+                WXJSExceptionInfo * jsExceptionInfo = [[WXJSExceptionInfo alloc] initWithInstanceId:instance.instanceId bundleUrl:[instance.scriptURL absoluteString] errorCode:[NSString stringWithFormat:@"%d", WX_ERR_JS_EXECUTE] functionName:@"" exception:[NSString stringWithFormat:@"%@\n%@",[exception toString], exception[@"stack"]] userInfo:nil];
+                [jsExceptionHandler onJSException:jsExceptionInfo];
+            }
             WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_JS_EXECUTE, message);
         };
         
@@ -206,7 +236,7 @@
     _jsContext[@"WXEnvironment"] = data;
 }
 
-typedef void (*WXJSCGarbageCollect)(JSContextRef);
+//typedef void (*WXJSCGarbageCollect)(JSContextRef);
 
 - (void)garbageCollect
 {
@@ -222,6 +252,15 @@
 //    }
 }
 
+#pragma mark - Public
+-(void)removeTimers:(NSString *)instance
+{
+    if(instance && [_timers containsObject:instance])
+    {
+        [_timers removeObject:instance];
+    }
+}
+
 #pragma mark - Private
 
 - (void)triggerTimeout:(void(^)())block
@@ -229,4 +268,60 @@
     block();
 }
 
+- (void)callBack:(NSDictionary *)dic
+{
+    if([dic objectForKey:@"appid"] && [_timers containsObject:[dic objectForKey:@"appid"]]) {
+        [[WXSDKManager bridgeMgr] callBack:[dic objectForKey:@"appid"] funcId:[dic objectForKey:@"ret"]  params:[dic objectForKey:@"arg"] keepAlive:NO];
+    }
+}
+
+
+- (void)callBackInterval:(NSDictionary *)dic
+{
+    if([dic objectForKey:@"appid"] && [_timers containsObject:[dic objectForKey:@"appid"]]) {
+        [[WXSDKManager bridgeMgr] callBack:[dic objectForKey:@"appid"] funcId:[dic objectForKey:@"ret"]  params:nil keepAlive:YES];
+        [self triggerInterval:[dic objectForKey:@"appid"] ret:[dic objectForKey:@"ret"] arg:[dic objectForKey:@"arg"]];
+    }
+    
+}
+
+- (void)triggerTimeout:(NSString *)appid ret:(NSString *)ret arg:(NSString *)arg
+{
+    
+    double interval = [arg doubleValue]/1000.0f;
+    if(WXFloatEqual(interval,0)) {
+        return;
+    }
+    if(![_timers containsObject:appid]){
+        [_timers addObject:appid];
+    }
+    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, interval*NSEC_PER_SEC);
+    dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        NSMutableDictionary *dic = [NSMutableDictionary new];
+        [dic setObject:appid forKey:@"appid"];
+        [dic setObject:ret forKey:@"ret"];
+        [dic setObject:arg forKey:@"arg"];
+        [self performSelector:@selector(callBack:) withObject:dic ];
+    });
+}
+
+- (void)triggerInterval:(NSString *)appid ret:(NSString *)ret arg:(NSString *)arg
+{
+    double interval = [arg doubleValue]/1000.0f;
+    if(WXFloatEqual(interval,0)) {
+        return;
+    }
+    if(![_timers containsObject:appid]){
+        [_timers addObject:appid];
+    }
+    dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, interval*NSEC_PER_SEC);
+    dispatch_after(time, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
+        NSMutableDictionary *dic = [NSMutableDictionary new];
+        [dic setObject:appid forKey:@"appid"];
+        [dic setObject:ret forKey:@"ret"];
+        [dic setObject:arg forKey:@"arg"];
+        [self performSelector:@selector(callBackInterval:) withObject:dic ];
+    });
+}
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
index 1a4107d..876be42 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeMethod.h"
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
index 351c5c3..8897d70 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleMethod.h"
@@ -13,6 +24,8 @@
 #import "WXAssert.h"
 #import "WXUtility.h"
 #import "WXSDKInstance_private.h"
+#import "WXHandlerFactory.h"
+#import "WXValidateProtocol.h"
 
 @implementation WXModuleMethod
 
@@ -30,6 +43,26 @@
 
 - (NSInvocation *)invoke
 {
+    
+    if (self.instance.needValidate) {
+        id<WXValidateProtocol> validateHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)];
+        if (validateHandler) {
+            WXModuleValidateResult* result =  [validateHandler validateWithWXSDKInstance:self.instance module:self.moduleName method:self.methodName args:self.arguments];
+            if (result && !result.isSuccess) {
+                NSString *errorMessage = [result.error.userInfo  objectForKey:@"errorMsg"];
+                WXLogError(@"%@", errorMessage);
+                WX_MONITOR_FAIL(WXMTJSBridge, WX_ERR_INVOKE_NATIVE, errorMessage);
+                if ([result.error respondsToSelector:@selector(userInfo)]) {
+                    NSInvocation *invocation = [self invocationWithTarget:result.error selector:@selector(userInfo)];
+                    [invocation invoke];
+                    return invocation;
+                }else{
+                    return nil;
+                }
+            }
+        }
+    }
+    
     Class moduleClass =  [WXModuleFactory classWithModuleName:_moduleName];
     if (!moduleClass) {
         NSString *errorMessage = [NSString stringWithFormat:@"Module:%@ doesn't exist, maybe it has not been registered", _moduleName];
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h b/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
index 042ca81..2123c06 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m b/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m
index 8bc692f..4c59dee 100644
--- a/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m
+++ b/ios/sdk/WeexSDK/Sources/Bridge/WXPolyfillSet.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXPolyfillSet.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h
new file mode 100644
index 0000000..4ad4a9b
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.h
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <UIKit/UIKit.h>
+#import "WXLength.h"
+
+extern NSString * const kCollectionSupplementaryViewKindHeader;
+
+@protocol WXMultiColumnLayoutDelegate <NSObject>
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView insetForLayout:(UICollectionViewLayout *)collectionViewLayout;
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView contentWidthForLayout:(UICollectionViewLayout *)collectionViewLayout;
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForItemAtIndexPath:(NSIndexPath *)indexPath;
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section;
+
+- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout hasHeaderInSection:(NSInteger)section;
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForHeaderInSection:(NSInteger)section;
+
+@end
+
+@interface WXMultiColumnLayout : UICollectionViewLayout
+
+@property (nonatomic, weak) id<WXMultiColumnLayoutDelegate> delegate;
+
+@property (nonatomic, strong) WXLength *columnCount;
+
+@property (nonatomic, strong) WXLength *columnWidth;
+
+@property (nonatomic, assign) float columnGap;
+
+@property (nonatomic, assign, readonly) CGFloat computedColumnWidth;
+@property (nonatomic, assign, readonly) int computedColumnCount;
+@property (nonatomic, assign, readonly) CGFloat computedHeaderWidth;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m
new file mode 100644
index 0000000..e99e88f
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXMultiColumnLayout.m
@@ -0,0 +1,403 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXMultiColumnLayout.h"
+#import "NSArray+Weex.h"
+#import "WXUtility.h"
+#import "WXAssert.h"
+
+void computeColumnWidthAndCount(float availableWidth, WXLength *columnCount, WXLength *columnWidth, float columnGap, int *N, float *W)
+{
+    /* Pseudo-algorithm according to
+     * https://www.w3.org/TR/css3-multicol/
+     * Note that, in most cases, only one of ‘column-width’ and ‘column-count’ affect the layout. 
+     * If ‘column-width’ has a value other than ‘auto’, ‘column-count’ indicates the maximum number of columns.
+     **/
+    if (columnWidth.isAuto && columnCount.isAuto) {
+        WXAssert(NO, @"Unsupport both of column-width and column-count being auto.");
+        return;
+    }
+    
+    if (columnWidth.isAuto && !columnCount.isAuto) {
+        *N = columnCount.intValue;
+        *W = MAX(0, (availableWidth - ((*N -1) * columnGap)) / *N);
+    }
+    
+    if (!columnWidth.isAuto && columnCount.isAuto) {
+        *N = MAX(1, WXFloorPixelValue((availableWidth + columnGap) / (columnWidth.floatValue + columnGap)));
+        *W = ((availableWidth + columnGap) / *N) - columnGap;
+    }
+    
+    if (!columnWidth.isAuto && !columnCount.isAuto) {
+        *N = MIN(columnCount.intValue, WXFloorPixelValue((availableWidth + columnGap) / (columnWidth.floatValue + columnGap)));
+        *W = ((availableWidth + columnGap) / *N) - columnGap;
+    }
+}
+
+NSString * const kCollectionSupplementaryViewKindHeader = @"WXCollectionSupplementaryViewKindHeader";
+NSString * const kMultiColumnLayoutHeader = @"WXMultiColumnLayoutHeader";
+NSString * const kMultiColumnLayoutCell = @"WXMultiColumnLayoutCell";
+
+@interface WXMultiColumnLayoutHeaderAttributes : UICollectionViewLayoutAttributes
+
+@property (nonatomic, assign) BOOL isSticky;
+
+@end
+
+@implementation WXMultiColumnLayoutHeaderAttributes
+
+- (id)copyWithZone:(NSZone *)zone
+{
+    WXMultiColumnLayoutHeaderAttributes *copy = [super copyWithZone:zone];
+    copy.isSticky = self.isSticky;
+    
+    return copy;
+}
+
+@end
+
+@interface WXMultiColumnLayout ()
+
+@property (nonatomic, strong) NSMutableDictionary<NSString *, NSDictionary<id, UICollectionViewLayoutAttributes *> *> *layoutAttributes;
+@property (nonatomic, strong) NSMutableArray<NSNumber *> *columnsMaxHeights;
+
+@property (nonatomic, assign, readwrite) CGFloat computedColumnWidth;
+@property (nonatomic, assign, readwrite) int computedColumnCount;
+
+@end
+
+@implementation WXMultiColumnLayout
+
+- (instancetype)init
+{
+    if (self = [super init]) {
+        _layoutAttributes = [NSMutableDictionary dictionary];
+        _columnsMaxHeights = [NSMutableArray array];
+    }
+    
+    return self;
+}
+
+#pragma mark - Public Accessors
+
+- (void)setColumnCount:(WXLength *)columnCount
+{
+    if (!(columnCount.isAuto && _columnCount.isAuto) || _columnCount.intValue != columnCount.intValue) {
+        _columnCount = columnCount;
+        [self _cleanComputed];
+    }
+}
+
+- (void)setColumnWidth:(WXLength *)columnWidth
+{
+    if (!(columnWidth.isAuto && _columnWidth.isAuto) || _columnWidth.floatValue != columnWidth.floatValue) {
+        _columnWidth = columnWidth;
+        [self _cleanComputed];
+    }
+}
+
+- (void)setColumnGap:(float)columnGap
+{
+    if (_columnGap != columnGap) {
+        _columnGap = columnGap;
+        [self _cleanComputed];
+    }
+}
+
+- (CGFloat)computedColumnWidth
+{
+    if (!_computedColumnWidth && !_computedColumnCount) {
+        [self _computeColumnWidthAndCount];
+    }
+    
+    return _computedColumnWidth;
+}
+
+- (int)computedColumnCount
+{
+    if (!_computedColumnWidth && !_computedColumnCount) {
+        [self _computeColumnWidthAndCount];
+    }
+    
+    return _computedColumnCount;
+}
+
+- (CGFloat)computedHeaderWidth
+{
+    UIEdgeInsets insets = [self.delegate collectionView:self.collectionView insetForLayout:self];
+    return self.contentWidth - (insets.left + insets.right);
+}
+
+#pragma mark - Methods to Override for UICollectionViewLayout
+
+- (void)prepareLayout
+{
+    [super prepareLayout];
+    
+    [self _cleanup];
+    
+    NSInteger numberOfSections = [self.collectionView numberOfSections];
+    UIEdgeInsets insets = [self.delegate collectionView:self.collectionView insetForLayout:self];
+    
+    float columnWidth = self.computedColumnWidth;
+    int columnCount = self.computedColumnCount;
+    float columnGap = self.columnGap;
+    
+    CGFloat currentHeight = insets.top;
+    NSMutableDictionary *headersAttributes = [NSMutableDictionary dictionaryWithCapacity:numberOfSections];
+    NSMutableDictionary *cellAttributes = [NSMutableDictionary dictionary];
+    for (NSInteger i = 0; i < columnCount; i++) {
+        [self.columnsMaxHeights addObject:@(currentHeight)];
+    }
+    
+    for (NSInteger section = 0; section < numberOfSections; section++) {
+        BOOL hasHeader = [self.delegate collectionView:self.collectionView layout:self hasHeaderInSection:section];
+        // header
+        if (hasHeader) {
+            CGFloat headerHeight = [self.delegate collectionView:self.collectionView layout:self heightForHeaderInSection:section];
+            WXMultiColumnLayoutHeaderAttributes *headerAttributes = [WXMultiColumnLayoutHeaderAttributes layoutAttributesForSupplementaryViewOfKind:kCollectionSupplementaryViewKindHeader withIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
+            headerAttributes.frame = CGRectMake(insets.left, currentHeight, self.contentWidth - (insets.left + insets.right), headerHeight);
+            headerAttributes.isSticky = [self.delegate collectionView:self.collectionView layout:self isNeedStickyForHeaderInSection:section];
+            headerAttributes.zIndex = headerAttributes.isSticky ? 1 : 0;
+            headersAttributes[@(section)] = headerAttributes;
+            
+            currentHeight = CGRectGetMaxY(headerAttributes.frame);
+            [self _columnsReachToHeight:currentHeight];
+        }
+        
+        // cells
+        for (NSInteger item = 0; item < [self.collectionView numberOfItemsInSection:section]; item++) {
+            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:item inSection:section];
+            CGFloat itemHeight = [self.delegate collectionView:self.collectionView layout:self heightForItemAtIndexPath:indexPath];
+            UICollectionViewLayoutAttributes *itemAttributes = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:indexPath];
+            NSUInteger column = [self _minHeightColumnForAllColumns];
+            CGFloat x = insets.left + (columnWidth + columnGap) * column;
+            CGFloat y = [self.columnsMaxHeights[column] floatValue];
+            itemAttributes.frame = CGRectMake(x, y, columnWidth, itemHeight);
+            cellAttributes[indexPath] = itemAttributes;
+            
+            self.columnsMaxHeights[column] = @(CGRectGetMaxY(itemAttributes.frame));
+        }
+        
+        currentHeight = [self _maxHeightForAllColumns];
+        [self _columnsReachToHeight:currentHeight];
+    }
+    
+    currentHeight = currentHeight + insets.bottom;
+    [self _columnsReachToHeight:currentHeight];
+    
+    self.layoutAttributes[kMultiColumnLayoutHeader] = headersAttributes;
+    self.layoutAttributes[kMultiColumnLayoutCell] = cellAttributes;
+}
+
+- (CGSize)collectionViewContentSize
+{
+    NSInteger numberOfSections = [self.collectionView numberOfSections];
+    if (numberOfSections == 0) {
+        return CGSizeZero;
+    }
+    
+    return CGSizeMake(self.contentWidth, self.contentHeight);
+}
+
+- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
+{
+    NSMutableArray<WXMultiColumnLayoutHeaderAttributes *> *stickyHeaders = [NSMutableArray array];
+    NSMutableArray<UICollectionViewLayoutAttributes *> *result = [NSMutableArray array];
+    
+    [self.layoutAttributes enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull kind, NSDictionary<id,UICollectionViewLayoutAttributes *> * _Nonnull dictionary, BOOL * _Nonnull stop) {
+        [dictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, UICollectionViewLayoutAttributes * _Nonnull attributes, BOOL * _Nonnull stop) {
+            if (attributes.representedElementKind == kCollectionSupplementaryViewKindHeader
+                && [self.delegate collectionView:self.collectionView layout:self isNeedStickyForHeaderInSection:attributes.indexPath.section]) {
+                [stickyHeaders addObject:(WXMultiColumnLayoutHeaderAttributes *)attributes];
+            } else if (CGRectIntersectsRect(rect, attributes.frame)) {
+                [result addObject:attributes];
+            }
+        }];
+    }];
+    
+    [stickyHeaders sortUsingComparator:^NSComparisonResult(WXMultiColumnLayoutHeaderAttributes *obj1, WXMultiColumnLayoutHeaderAttributes *obj2) {
+        if (obj1.indexPath.section < obj2.indexPath.section) {
+            return NSOrderedAscending;
+        } else {
+            return NSOrderedDescending;
+        }
+    }];
+    
+    for (int i = 0; i < stickyHeaders.count; i++) {
+        WXMultiColumnLayoutHeaderAttributes *header = stickyHeaders[i];
+        [self _adjustStickyForHeaderAttributes:header next:(i == stickyHeaders.count - 1) ? nil : stickyHeaders[i + 1]];
+        [result addObject:header];
+    }
+    
+    WXLogDebug(@"return result attributes:%@ for rect:%@", result, NSStringFromCGRect(rect));
+    
+    return result;
+}
+
+- (void)_adjustStickyForHeaderAttributes:(WXMultiColumnLayoutHeaderAttributes *)header
+                                   next:(WXMultiColumnLayoutHeaderAttributes *)nextHeader
+{
+    CGRect bounds = self.collectionView.bounds;
+    CGFloat originY = header.frame.origin.y;
+    CGFloat maxY = nextHeader ? (nextHeader.frame.origin.y - header.frame.size.height) : (CGRectGetMaxY(bounds) - header.frame.size.height);
+    CGFloat currentY = CGRectGetMaxY(bounds) - bounds.size.height + self.collectionView.contentInset.top;
+    
+    CGFloat resultY = MIN(MAX(currentY, originY), maxY);
+    CGPoint origin = header.frame.origin;
+    origin.y = resultY;
+    
+    header.frame = (CGRect){origin, header.frame.size};
+    header.hidden = NO;
+}
+
+- (UICollectionViewLayoutAttributes *)layoutAttributesForSupplementaryViewOfKind:(NSString *)elementKind atIndexPath:(NSIndexPath *)indexPath
+{
+    if ([elementKind isEqualToString:kCollectionSupplementaryViewKindHeader]) {
+        UICollectionViewLayoutAttributes *attributes = self.layoutAttributes[kMultiColumnLayoutHeader][@(indexPath.section)];
+        WXLogDebug(@"return header attributes:%@ for index path:%@", attributes, indexPath);
+        
+        return attributes;
+    }
+    
+    return nil;
+}
+
+- (UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    if (self.layoutAttributes.count == 0) {
+        [self prepareLayout];
+    }
+    
+    UICollectionViewLayoutAttributes *attributes = self.layoutAttributes[kMultiColumnLayoutCell][indexPath];
+    WXLogDebug(@"return item attributes:%@ for index path:%@", attributes, indexPath);
+    return attributes;
+}
+
+- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds
+{
+    __block BOOL hasStickyHeader = NO;
+    [self.layoutAttributes[kMultiColumnLayoutHeader] enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, UICollectionViewLayoutAttributes * _Nonnull obj, BOOL * _Nonnull stop) {
+        WXMultiColumnLayoutHeaderAttributes *attribute = (WXMultiColumnLayoutHeaderAttributes *)obj;
+        if (attribute.isSticky) {
+            hasStickyHeader = YES;
+            *stop = YES;
+        }
+    }];
+    
+    if (hasStickyHeader) {
+        // always return yes no trigger resetting sticky header's frame.
+        return YES;
+    } else {
+        CGRect oldBounds = self.collectionView.bounds;
+        if (CGRectGetWidth(newBounds) != CGRectGetWidth(oldBounds)) {
+            return YES;
+        }
+    }
+    
+    return NO;
+}
+
+#pragma mark - Private
+
+- (CGFloat)contentWidth
+{
+    return [self.delegate collectionView:self.collectionView contentWidthForLayout:self];
+}
+
+- (CGFloat)contentHeight
+{
+    return [self _maxHeightForAllColumns];
+}
+
+- (void)_computeColumnWidthAndCount
+{
+    UIEdgeInsets insets = [self.delegate collectionView:self.collectionView insetForLayout:self];
+    
+    int columnCount;
+    float columnWidth ;
+    float availableWidth = self.contentWidth - (insets.left + insets.right);
+    computeColumnWidthAndCount(availableWidth, self.columnCount, self.columnWidth, self.columnGap, &columnCount, &columnWidth);
+    if (availableWidth <= 0) {
+        return;
+    }
+    WXAssert(columnCount > 0, @"invalid column count");
+    WXAssert(columnWidth > 0, @"invalid column width");
+    
+    _computedColumnWidth = columnWidth;
+    _computedColumnCount = columnCount;
+}
+
+- (CGFloat)_maxHeightForAllColumns
+{
+    CGFloat maxHeight = 0.0;
+    for (NSNumber *number in self.columnsMaxHeights) {
+        CGFloat height = [number floatValue];
+        if (height > maxHeight) {
+            maxHeight = height;
+        }
+    }
+    
+    return maxHeight;
+}
+
+- (NSUInteger)_minHeightColumnForAllColumns
+{
+    __block NSUInteger index = 0;
+    __block CGFloat minHeight = FLT_MAX;
+    
+    [self.columnsMaxHeights enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
+        CGFloat height = [obj floatValue];
+        if (height < minHeight) {
+            minHeight = height;
+            index = idx;
+        }
+    }];
+    
+    return index;
+}
+
+- (void)_columnsReachToHeight:(CGFloat)height
+{
+    for (NSInteger i = 0; i < self.columnsMaxHeights.count; i ++) {
+        self.columnsMaxHeights[i] = @(height);
+    }
+}
+
+- (void)_cleanup
+{
+    [self.layoutAttributes removeAllObjects];
+    [self.columnsMaxHeights removeAllObjects];
+}
+
+- (void)_cleanComputed
+{
+    _computedColumnWidth = 0;
+    _computedColumnCount = 0;
+}
+
+- (void)invalidateLayout
+{
+    [super invalidateLayout];
+    
+    [self _cleanComputed];
+}
+
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
new file mode 100644
index 0000000..a9c2539
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.h
@@ -0,0 +1,23 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+#import <WeexSDK/WeexSDK.h>
+
+@interface WXRecyclerComponent : WXScrollerComponent
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
new file mode 100644
index 0000000..8d266e0
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerComponent.m
@@ -0,0 +1,660 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXRecyclerComponent.h"
+#import "WXComponent_internal.h"
+#import "WXSDKInstance_private.h"
+#import "WXRecyclerDataController.h"
+#import "WXRecyclerUpdateController.h"
+#import "WXMultiColumnLayout.h"
+#import "WXHeaderComponent.h"
+#import "WXFooterComponent.h"
+#import "WXCellComponent.h"
+#import "WXAssert.h"
+#import "WXConvert.h"
+
+static NSString * const kCollectionCellReuseIdentifier = @"WXRecyclerCell";
+static NSString * const kCollectionHeaderReuseIdentifier = @"WXRecyclerHeader";
+static float const kRecyclerNormalColumnGap = 32;
+
+typedef enum : NSUInteger {
+    WXRecyclerLayoutTypeMultiColumn,
+    WXRecyclerLayoutTypeFlex,
+    WXRecyclerLayoutTypeGrid,
+} WXRecyclerLayoutType;
+
+@interface WXCollectionView : UICollectionView
+
+@end
+
+@implementation WXCollectionView
+
+- (void)insertSubview:(UIView *)view atIndex:(NSInteger)index
+{
+    [super insertSubview:view atIndex:index];
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    [self.wx_component layoutDidFinish];
+}
+
+- (void)setContentOffset:(CGPoint)contentOffset
+{
+    [super setContentOffset:contentOffset];
+}
+
+@end
+
+@interface WXCollectionViewCell : UICollectionViewCell
+
+@end
+
+@implementation WXCollectionViewCell
+
+- (void)prepareForReuse
+{
+    [super prepareForReuse];
+
+    WXCellComponent *cellComponent = (WXCellComponent *)self.wx_component;
+    if (cellComponent.isRecycle && [cellComponent isViewLoaded] && [self.contentView.subviews containsObject:cellComponent.view]) {
+        [cellComponent _unloadViewWithReusing:YES];
+    }
+}
+
+@end
+
+@interface WXRecyclerComponent () <UICollectionViewDataSource, UICollectionViewDelegate, WXMultiColumnLayoutDelegate, WXRecyclerUpdateControllerDelegate, WXCellRenderDelegate, WXHeaderRenderDelegate>
+
+@property (nonatomic, strong, readonly) WXRecyclerDataController *dataController;
+@property (nonatomic, strong, readonly) WXRecyclerUpdateController *updateController;
+@property (nonatomic, weak, readonly) UICollectionView *collectionView;
+
+@end
+
+@implementation WXRecyclerComponent
+{
+    WXRecyclerLayoutType _layoutType;
+    UICollectionViewLayout *_collectionViewlayout;
+    
+    UIEdgeInsets _padding;
+    NSUInteger _previousLoadMoreCellNumber;
+}
+
+- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+{
+    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
+        [self _fillPadding];
+        
+        if ([type isEqualToString:@"waterfall"] || (attributes[@"layout"] && [attributes[@"layout"] isEqualToString:@"multi-column"])) {
+            // TODO: abstraction
+            _layoutType = WXRecyclerLayoutTypeMultiColumn;
+            CGFloat scaleFactor = weexInstance.pixelScaleFactor;
+            _collectionViewlayout = [WXMultiColumnLayout new];
+            WXMultiColumnLayout *layout = (WXMultiColumnLayout *)_collectionViewlayout;
+            layout.columnWidth = [WXConvert WXLength:attributes[@"columnWidth"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeAuto];
+            layout.columnCount = [WXConvert WXLength:attributes[@"columnCount"] isFloat:NO scaleFactor:1.0] ? : [WXLength lengthWithInt:1 type:WXLengthTypeFixed];
+            layout.columnGap = [self _floatValueForColumnGap:([WXConvert WXLength:attributes[@"columnGap"] isFloat:YES scaleFactor:scaleFactor] ? : [WXLength lengthWithFloat:0.0 type:WXLengthTypeNormal])];
+
+            layout.delegate = self;
+        } else {
+            _collectionViewlayout = [UICollectionViewLayout new];
+        }
+        
+        _dataController = [WXRecyclerDataController new];
+        _updateController = [WXRecyclerUpdateController new];
+        _updateController.delegate = self;
+        [self fixFlicker];
+    }
+    
+    return self;
+}
+
+- (void)dealloc
+{
+    _collectionView.delegate = nil;
+    _collectionView.dataSource = nil;
+}
+
+#pragma mark - Public Subclass Methods
+
+- (UIView *)loadView
+{
+    return [[WXCollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:_collectionViewlayout];
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    _collectionView = (UICollectionView *)self.view;
+    _collectionView.allowsSelection = NO;
+    _collectionView.allowsMultipleSelection = NO;
+    _collectionView.dataSource = self;
+    _collectionView.delegate = self;
+    
+    [_collectionView registerClass:[WXCollectionViewCell class] forCellWithReuseIdentifier:kCollectionCellReuseIdentifier];
+    [_collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:kCollectionSupplementaryViewKindHeader withReuseIdentifier:kCollectionHeaderReuseIdentifier];
+    
+    [self performUpdatesWithCompletion:^(BOOL finished) {
+        
+    }];
+}
+
+- (void)viewWillUnload
+{
+    [super viewWillUnload];
+    
+    _collectionView.dataSource = nil;
+    _collectionView.delegate = nil;
+}
+
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+    [super updateAttributes:attributes];
+    
+    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
+        CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
+        WXMultiColumnLayout *layout = (WXMultiColumnLayout *)_collectionViewlayout;
+        BOOL needUpdateLayout = NO;
+        if (attributes[@"columnWidth"]) {
+            layout.columnWidth = [WXConvert WXLength:attributes[@"columnWidth"] isFloat:YES scaleFactor:scaleFactor];
+            needUpdateLayout = YES;
+        }
+        
+        if (attributes[@"columnCount"]) {
+            layout.columnCount = [WXConvert WXLength:attributes[@"columnCount"] isFloat:NO scaleFactor:1.0];
+            
+            needUpdateLayout = YES;
+        }
+        if (attributes[@"columnGap"]) {
+            layout.columnGap = [self _floatValueForColumnGap:([WXConvert WXLength:attributes[@"columnGap"] isFloat:YES scaleFactor:scaleFactor])];
+            needUpdateLayout = YES;
+        }
+        
+        if (needUpdateLayout) {
+            for (WXComponent *component in self.subcomponents) {
+                [component setNeedsLayout];
+            }
+            
+            [self.collectionView reloadData];
+            [self.collectionView.collectionViewLayout invalidateLayout];
+        }
+    }
+    
+}
+
+- (void)setContentSize:(CGSize)contentSize
+{
+    // Do Nothing
+}
+
+- (void)adjustSticky
+{
+    // Do Nothing, sticky is adjusted by layout
+}
+
+#pragma mark - Private Subclass Methods
+
+- (void)_updateStylesOnComponentThread:(NSDictionary *)styles resetStyles:(NSMutableArray *)resetStyles isUpdateStyles:(BOOL)isUpdateStyles
+{
+    [super _updateStylesOnComponentThread:styles resetStyles:resetStyles isUpdateStyles:isUpdateStyles];
+    
+    [self _fillPadding];
+}
+
+- (void)_handleFirstScreenTime
+{
+    // Do Nothing, firstScreenTime is set by cellDidRendered:
+}
+
+- (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
+{
+    CGPoint contentOffset = _collectionView.contentOffset;
+    CGFloat contentOffsetY = 0;
+    
+    CGRect rect;
+    while (component) {
+        if ([component isKindOfClass:[WXCellComponent class]]) {
+            NSIndexPath *toIndexPath = [self.dataController indexPathForCell:(WXCellComponent *)component];
+            UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForItemAtIndexPath:toIndexPath];
+            rect = attributes.frame;
+            break;
+        }
+        if ([component isKindOfClass:[WXHeaderComponent class]]) {
+            NSUInteger toIndex = [self.dataController indexForHeader:(WXHeaderComponent *)component];
+            UICollectionViewLayoutAttributes *attributes = [_collectionView layoutAttributesForSupplementaryElementOfKind:kCollectionSupplementaryViewKindHeader atIndexPath:[NSIndexPath indexPathWithIndex:toIndex]];
+            rect = attributes.frame;
+            break;
+        }
+        contentOffsetY += component.calculatedFrame.origin.y;
+        component = component.supercomponent;
+    }
+    
+    contentOffsetY += rect.origin.y;
+    contentOffsetY += offset * self.weexInstance.pixelScaleFactor;
+    
+    if (_collectionView.contentSize.height >= _collectionView.frame.size.height && contentOffsetY > _collectionView.contentSize.height - _collectionView.frame.size.height) {
+        contentOffset.y = _collectionView.contentSize.height - _collectionView.frame.size.height;
+    } else {
+        contentOffset.y = contentOffsetY;
+    }
+    
+    [_collectionView setContentOffset:contentOffset animated:animated];
+
+}
+
+- (void)performUpdatesWithCompletion:(void (^)(BOOL finished))completion
+{
+    WXAssertMainThread();
+    
+    //TODO: support completion
+    
+    if (![self isViewLoaded]) {
+        completion(NO);
+    }
+    
+    NSArray *oldData = [self.dataController.sections copy];
+    NSArray *newData = [self _sectionArrayFromComponents:self.subcomponents];
+    
+    [_updateController performUpdatesWithNewData:newData oldData:oldData view:_collectionView];
+}
+
+- (void)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
+{
+    if ([subcomponent isKindOfClass:[WXCellComponent class]]) {
+        ((WXCellComponent *)subcomponent).delegate = self;
+    } else if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
+        ((WXHeaderComponent *)subcomponent).delegate = self;
+    }
+    
+    [super _insertSubcomponent:subcomponent atIndex:index];
+    
+    if (![subcomponent isKindOfClass:[WXHeaderComponent class]]
+        && ![subcomponent isKindOfClass:[WXCellComponent class]]) {
+        return;
+    }
+    
+    WXPerformBlockOnMainThread(^{
+        [self performUpdatesWithCompletion:^(BOOL finished) {
+    
+        }];
+    });
+}
+
+- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
+{
+    //Here will not insert cell/header/footer's view again
+    if (![subcomponent isKindOfClass:[WXCellComponent class]]
+        && ![subcomponent isKindOfClass:[WXHeaderComponent class]]
+        && ![subcomponent isKindOfClass:[WXFooterComponent class]]) {
+        [super insertSubview:subcomponent atIndex:index];
+    }
+}
+
+#pragma mark - WXRecyclerUpdateControllerDelegate
+
+- (void)updateController:(WXRecyclerUpdateController *)controller willPerformUpdateWithNewData:(NSArray<WXSectionDataController *> *)newData
+{
+    if (newData) {
+        [self.dataController updateData:newData];
+    }
+}
+
+- (void)updateController:(WXRecyclerUpdateController *)controller didPerformUpdateWithFinished:(BOOL)finished
+{
+    
+}
+
+#pragma mark - UICollectionViewDataSource
+
+- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
+{
+    WXLogDebug(@"section number:%zi", [self.dataController numberOfSections]);
+    return [self.dataController numberOfSections];
+}
+
+- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
+{
+    NSInteger numberOfItems = [self.dataController numberOfItemsInSection:section];
+    
+    WXLogDebug(@"Number of items is %ld in section:%ld", numberOfItems, section);
+    
+    return numberOfItems;
+}
+
+- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXLogDebug(@"Getting cell at indexPath:%@", indexPath);
+    
+    WXCollectionViewCell *cellView = [_collectionView dequeueReusableCellWithReuseIdentifier:kCollectionCellReuseIdentifier forIndexPath:indexPath];
+    
+    UIView *contentView = [self.dataController cellForItemAtIndexPath:indexPath];
+    
+    cellView.wx_component = contentView.wx_component;
+    
+    if (contentView.superview == cellView.contentView) {
+        return cellView;
+    }
+    
+    for (UIView *view in cellView.contentView.subviews) {
+        [view removeFromSuperview];
+    }
+    
+    [cellView.contentView addSubview:contentView];
+    [cellView setAccessibilityIdentifier:contentView.accessibilityIdentifier];
+    
+    return cellView;
+}
+
+- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath
+{
+    UICollectionReusableView *reusableView = nil;
+    if ([kind isEqualToString:kCollectionSupplementaryViewKindHeader]) {
+        reusableView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:kCollectionHeaderReuseIdentifier forIndexPath:indexPath];
+        UIView *contentView = [self.dataController viewForHeaderAtIndexPath:indexPath];
+        if (contentView.superview != reusableView) {
+            for (UIView *view in reusableView.subviews) {
+                [view removeFromSuperview];
+            }
+
+            [reusableView addSubview:contentView];
+        }
+    }
+    
+    return reusableView;
+}
+
+#pragma mark - UICollectionViewDelegate
+
+- (void)collectionView:(UICollectionView *)collectionView willDisplayCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXLogDebug(@"will display cell:%@, at index path:%@", cell, indexPath);
+}
+
+- (void)collectionView:(UICollectionView *)collectionView didEndDisplayingCell:(UICollectionViewCell *)cell forItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXLogDebug(@"Did end displaying cell:%@, at index path:%@", cell, indexPath);
+}
+
+#pragma mark - WXMultiColumnLayoutDelegate
+
+- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView insetForLayout:(UICollectionViewLayout *)collectionViewLayout
+{
+    return _padding;
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView contentWidthForLayout:(UICollectionViewLayout *)collectionViewLayout
+{
+    return self.scrollerCSSNode->style.dimensions[CSS_WIDTH];
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    CGSize itemSize = [self.dataController sizeForItemAtIndexPath:indexPath];
+    return itemSize.height;
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout heightForHeaderInSection:(NSInteger)section
+{
+    CGSize headerSize = [self.dataController sizeForHeaderAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
+    return headerSize.height;
+}
+
+- (BOOL)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout hasHeaderInSection:(NSInteger)section
+{
+    return [self.dataController hasHeaderInSection:section];
+}
+
+- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout isNeedStickyForHeaderInSection:(NSInteger)section
+{
+    return [self.dataController isStickyForHeaderAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:section]];
+}
+
+#pragma mark - WXHeaderRenderDelegate
+
+- (float)headerWidthForLayout:(WXHeaderComponent *)header
+{
+    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
+        return ((WXMultiColumnLayout *)_collectionViewlayout).computedHeaderWidth;
+    }
+    
+    return 0.0;
+}
+
+- (void)headerDidLayout:(WXHeaderComponent *)header
+{
+    WXPerformBlockOnMainThread(^{
+        [self.collectionView.collectionViewLayout invalidateLayout];
+    });
+}
+
+- (void)headerDidRemove:(WXHeaderComponent *)header
+{
+    WXPerformBlockOnMainThread(^{
+        [self performUpdatesWithCompletion:^(BOOL finished) {
+            
+        }];
+    });
+}
+
+#pragma mark - WXCellRenderDelegate
+
+- (float)containerWidthForLayout:(WXCellComponent *)cell
+{
+    if (_layoutType == WXRecyclerLayoutTypeMultiColumn) {
+        return ((WXMultiColumnLayout *)_collectionViewlayout).computedColumnWidth;
+    }
+    
+    return 0.0;
+}
+
+- (void)cellDidLayout:(WXCellComponent *)cell
+{
+    BOOL previousLayoutComplete = cell.isLayoutComplete;
+    cell.isLayoutComplete = YES;
+    WXPerformBlockOnMainThread(^{
+        if (previousLayoutComplete) {
+            [self.updateController reloadItemsAtIndexPath:[self.dataController indexPathForCell:cell]];
+        } else {
+            [self performUpdatesWithCompletion:^(BOOL finished) {
+            }];
+        }
+    });
+}
+
+- (void)cellDidRendered:(WXCellComponent *)cell
+{
+    if (WX_MONITOR_INSTANCE_PERF_IS_RECORDED(WXPTFirstScreenRender, self.weexInstance) && !self.weexInstance.onRenderProgress) {
+        return;
+    }
+    
+    NSIndexPath *indexPath = [self.dataController indexPathForCell:cell];
+    
+    UICollectionViewLayoutAttributes *attributes = [self.collectionView layoutAttributesForItemAtIndexPath:indexPath];
+    CGRect cellRect = attributes.frame;
+    if (cellRect.origin.y + cellRect.size.height >= _collectionView.frame.size.height) {
+        WX_MONITOR_INSTANCE_PERF_END(WXPTFirstScreenRender, self.weexInstance);
+    }
+    
+    if (self.weexInstance.onRenderProgress) {
+        CGRect renderRect = [_collectionView convertRect:cellRect toView:self.weexInstance.rootView];
+        self.weexInstance.onRenderProgress(renderRect);
+    }
+}
+
+- (void)cellDidRemove:(WXCellComponent *)cell
+{
+    if (cell.isLayoutComplete) {
+        WXPerformBlockOnMainThread(^{
+            [self performUpdatesWithCompletion:^(BOOL finished) {
+            }];
+        });
+    }
+}
+
+- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index
+{
+    if (cell.isLayoutComplete) {
+        WXPerformBlockOnMainThread(^{
+            [self performUpdatesWithCompletion:^(BOOL finished) {
+            }];
+        });
+    }
+}
+
+#pragma mark - Load More Event
+
+- (void)setLoadmoreretry:(NSUInteger)loadmoreretry
+{
+    if (loadmoreretry != self.loadmoreretry) {
+        _previousLoadMoreCellNumber = 0;
+    }
+    
+    [super setLoadmoreretry:loadmoreretry];
+}
+
+- (void)loadMore
+{
+    [super loadMore];
+    
+    _previousLoadMoreCellNumber = [self totalNumberOfCells];
+}
+
+- (BOOL)isNeedLoadMore
+{
+    BOOL superNeedLoadMore = [super isNeedLoadMore];
+    return superNeedLoadMore && _previousLoadMoreCellNumber != [self totalNumberOfCells];
+}
+
+- (NSUInteger)totalNumberOfCells
+{
+    NSUInteger cellNumber = 0;
+    NSUInteger sectionCount = [_collectionView numberOfSections];
+    for (int section = 0; section < sectionCount; section ++) {
+        cellNumber += [_collectionView numberOfItemsInSection:section];
+    }
+    
+    return cellNumber;
+}
+
+- (void)resetLoadmore{
+    [super resetLoadmore];
+    _previousLoadMoreCellNumber = 0;
+}
+
+#pragma mark - Private
+
+- (float)_floatValueForColumnGap:(WXLength *)gap
+{
+    if (gap.isNormal) {
+        return kRecyclerNormalColumnGap * self.weexInstance.pixelScaleFactor;
+    } else {
+        return gap.floatValue;
+    }
+}
+
+- (void)_fillPadding
+{
+    UIEdgeInsets padding = {
+        WXFloorPixelValue(self.cssNode->style.padding[CSS_TOP] + self.cssNode->style.border[CSS_TOP]),
+        WXFloorPixelValue(self.cssNode->style.padding[CSS_LEFT] + self.cssNode->style.border[CSS_LEFT]),
+        WXFloorPixelValue(self.cssNode->style.padding[CSS_BOTTOM] + self.cssNode->style.border[CSS_BOTTOM]),
+        WXFloorPixelValue(self.cssNode->style.padding[CSS_RIGHT] + self.cssNode->style.border[CSS_RIGHT])
+    };
+    
+    if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
+        _padding = padding;
+        [self setNeedsLayout];
+        
+        for (WXComponent *component in self.subcomponents) {
+            [component setNeedsLayout];
+        }
+        
+        if (_collectionView) {
+            WXPerformBlockOnMainThread(^{
+                [_collectionView.collectionViewLayout invalidateLayout];
+            });
+        }
+    }
+}
+
+- (NSArray<WXSectionDataController *> *)_sectionArrayFromComponents:(NSArray<WXComponent *> *)components
+{
+    NSMutableArray<WXSectionDataController *> *sectionArray = [NSMutableArray array];
+    NSMutableArray<WXCellComponent *> *cellArray = [NSMutableArray array];
+    WXSectionDataController *currentSection;
+    
+    for (int i = 0; i < components.count; i++) {
+        if (!currentSection) {
+            currentSection = [WXSectionDataController new];
+        }
+        
+        WXComponent* component = components[i];
+        
+        if ([component isKindOfClass:[WXHeaderComponent class]]) {
+            if (i != 0 && (currentSection.headerComponent || cellArray.count > 0)) {
+                currentSection.cellComponents = [cellArray copy];
+                [sectionArray addObject:currentSection];
+                currentSection = [WXSectionDataController new];
+                [cellArray removeAllObjects];
+            }
+            currentSection.headerComponent = (WXHeaderComponent *)component;
+        } else if ([component isKindOfClass:[WXCellComponent class]]
+                   && ((WXCellComponent *)component).isLayoutComplete) {
+            [cellArray addObject:(WXCellComponent *)component];
+        } else if ([component isKindOfClass:[WXFooterComponent class]]) {
+            currentSection.footerComponent = component;
+        } else {
+            continue;
+        }
+    }
+    
+    if (cellArray.count > 0 || currentSection.headerComponent) {
+        currentSection.cellComponents = [cellArray copy];
+        [sectionArray addObject:currentSection];
+    }
+    
+    return sectionArray;
+}
+
+- (void)fixFlicker
+{
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        // FIXME:(ง •̀_•́)ง┻━┻ Stupid scoll view, always reset content offset to zero by calling _adjustContentOffsetIfNecessary after insert cells.
+        // So if you pull down list while list is rendering, the list will be flickering.
+        // Demo:
+        // Have to hook _adjustContentOffsetIfNecessary here.
+        // Any other more elegant way?
+        NSString *a = @"ntOffsetIfNe";
+        NSString *b = @"adjustConte";
+        
+        NSString *originSelector = [NSString stringWithFormat:@"_%@%@cessary", b, a];
+        [[self class] weex_swizzle:[WXCollectionView class] Method:NSSelectorFromString(originSelector) withMethod:@selector(fixedFlickerSelector)];
+    });
+}
+
+- (void)fixedFlickerSelector
+{
+    // DO NOT delete this method.
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h
new file mode 100644
index 0000000..e1a9e70
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.h
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXSectionDataController.h"
+
+@interface WXRecyclerDataController : NSObject
+
+@property (nonatomic, strong, readonly) NSArray<WXSectionDataController *> *sections;
+
+- (void)updateData:(NSArray<WXSectionDataController *> *)newData;
+
+- (NSInteger)numberOfSections;
+
+- (NSInteger)numberOfItemsInSection:(NSInteger)section;
+
+- (UIView *)cellForItemAtIndexPath:(NSIndexPath *)indexPath;
+
+- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath;
+
+- (UIView *)viewForHeaderAtIndexPath:(NSIndexPath *)indexPath;
+
+- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath;
+
+- (BOOL)isStickyForHeaderAtIndexPath:(NSIndexPath *)indexPath;
+
+- (BOOL)hasHeaderInSection:(NSInteger)section;
+
+- (NSIndexPath *)indexPathForCell:(WXCellComponent *)cell;
+
+- (NSUInteger)indexForHeader:(WXHeaderComponent *)header;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m
new file mode 100644
index 0000000..31fb731
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerDataController.m
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXRecyclerDataController.h"
+#import "WXCellComponent.h"
+#import "NSArray+Weex.h"
+#import "WXAssert.h"
+
+@interface WXRecyclerDataController ()
+
+@property (nonatomic, strong, readwrite) NSArray<WXSectionDataController *> *sections;
+@property (nonatomic, strong, readonly) NSMapTable<WXCellComponent *, NSIndexPath*> *cellToIndexPathTable;
+@property (nonatomic, strong, readonly) NSMapTable<WXHeaderComponent *, NSNumber*> *headerToIndexTable;
+
+@end
+
+@implementation WXRecyclerDataController
+
+- (instancetype)init
+{
+    if (self = [super init]) {
+        _sections = [NSArray new];
+        _cellToIndexPathTable = [NSMapTable weakToStrongObjectsMapTable];
+        _headerToIndexTable = [NSMapTable weakToStrongObjectsMapTable];
+    }
+    
+    return self;
+}
+
+#pragma mark - Public
+
+- (void)updateData:(NSArray<WXSectionDataController *> *)newData
+{
+    WXAssertMainThread();
+    
+    [self cleanup];
+    _sections = [newData copy];
+    
+    [newData enumerateObjectsUsingBlock:^(WXSectionDataController * _Nonnull controller, NSUInteger idx, BOOL * _Nonnull stop) {
+        [controller.cellComponents enumerateObjectsUsingBlock:^(WXCellComponent * _Nonnull obj, NSUInteger idx2, BOOL * _Nonnull stop) {
+            NSIndexPath *indexPath = [NSIndexPath indexPathForItem:idx2 inSection:idx];
+            [_cellToIndexPathTable setObject:indexPath forKey:obj];
+        }];
+        if (controller.headerComponent) {
+            [_headerToIndexTable setObject:@(idx) forKey:controller.headerComponent];
+        }
+    }];
+}
+
+- (NSInteger)numberOfSections
+{
+    WXAssertMainThread();
+    return self.sections.count;
+}
+
+- (NSInteger)numberOfItemsInSection:(NSInteger)section
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:section];
+    WXAssert(sectionController, @"No section controller found for section:%ld", section);
+    
+    return [sectionController numberOfItems];
+}
+
+- (UIView *)cellForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
+    UIView *contentView = [sectionController cellForItemAtIndex:indexPath.item];
+    
+    return contentView;
+}
+
+- (CGSize)sizeForItemAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
+    return [sectionController sizeForItemAtIndex:indexPath.item];
+}
+
+- (UIView *)viewForHeaderAtIndexPath:(NSIndexPath *)indexPath;
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
+    return [sectionController viewForHeaderAtIndex:indexPath.item];
+}
+
+- (CGSize)sizeForHeaderAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
+    return [sectionController sizeForHeaderAtIndex:indexPath.item];
+}
+
+- (BOOL)hasHeaderInSection:(NSInteger)section
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:section];
+    return sectionController.headerComponent != nil;
+}
+
+- (BOOL)isStickyForHeaderAtIndexPath:(NSIndexPath *)indexPath
+{
+    WXSectionDataController *sectionController = [self dataControllerForSection:indexPath.section];
+    return [sectionController isStickyForHeaderAtIndex:indexPath.item];
+}
+
+- (NSIndexPath *)indexPathForCell:(WXCellComponent *)cell
+{
+    return [_cellToIndexPathTable objectForKey:cell];
+}
+
+- (NSUInteger)indexForHeader:(WXHeaderComponent *)header
+{
+    NSNumber *index = [_headerToIndexTable objectForKey:header];
+    return [index unsignedIntegerValue];
+}
+
+#pragma mark - Private
+
+- (WXSectionDataController *)dataControllerForSection:(NSInteger)section
+{
+    WXAssertMainThread();
+    return [self.sections wx_safeObjectAtIndex:section];
+}
+
+- (void)cleanup
+{
+    [_cellToIndexPathTable removeAllObjects];
+    [_headerToIndexTable removeAllObjects];
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h
new file mode 100644
index 0000000..b6b918d
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.h
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXSectionDataController.h"
+@class WXRecyclerUpdateController;
+
+@protocol WXRecyclerUpdateControllerDelegate <NSObject>
+
+- (void)updateController:(WXRecyclerUpdateController *)controller willPerformUpdateWithNewData:(NSArray<WXSectionDataController *> *)newData;
+
+- (void)updateController:(WXRecyclerUpdateController *)controller didPerformUpdateWithFinished:(BOOL)finished;
+
+@end
+
+@interface WXRecyclerUpdateController : NSObject
+
+@property (nonatomic, weak) id<WXRecyclerUpdateControllerDelegate> delegate;
+
+- (void)performUpdatesWithNewData:(NSArray<WXSectionDataController *> *)newData
+                          oldData:(NSArray<WXSectionDataController *> *)oldData
+                             view:(UICollectionView *)collectionView;
+
+- (void)reloadItemsAtIndexPath:(NSIndexPath *)indexPath;
+
+@end
+
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m
new file mode 100644
index 0000000..f6f9c33
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXRecyclerUpdateController.m
@@ -0,0 +1,261 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXRecyclerUpdateController.h"
+#import "WXCellComponent.h"
+#import "WXAssert.h"
+#import "WXLog.h"
+#import "WXDiffUtil.h"
+#import "NSArray+Weex.h"
+
+@interface WXRecyclerDiffResult : NSObject
+
+@property (nonatomic, strong, readonly) NSIndexSet *insertSections;
+@property (nonatomic, strong, readonly) NSIndexSet *deleteSections;
+@property (nonatomic, strong, readonly) NSIndexSet *reloadSections;
+
+@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *deleteIndexPaths;
+@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *insertIndexPaths;
+@property (nonatomic, strong, readonly) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
+
+- (BOOL)hasChanges;
+
+@end
+
+@implementation WXRecyclerDiffResult
+
+- (instancetype)initWithInsertSections:(NSIndexSet *)insertSections
+                        deleteSections:(NSIndexSet *)deletesSections
+                        reloadSections:(NSIndexSet *)reloadSections
+                      insertIndexPaths:(NSMutableSet<NSIndexPath *> *)insertIndexPaths
+                      deleteIndexPaths:(NSMutableSet<NSIndexPath *> *)deleteIndexPaths
+                      reloadIndexPaths:(NSMutableSet<NSIndexPath *> *)reloadIndexPaths
+{
+    if (self = [super init]) {
+        _insertSections = [insertSections copy];
+        _deleteSections = [deletesSections copy];
+        _reloadSections = [reloadSections copy];
+        _insertIndexPaths = [insertIndexPaths copy];
+        _deleteIndexPaths = [deleteIndexPaths copy];
+        _reloadIndexPaths = [reloadIndexPaths copy];
+    }
+    
+    return self;
+}
+
+- (BOOL)hasChanges
+{
+    return _insertSections.count > 0 || _deleteSections.count > 0 || _reloadSections.count > 0 || _insertIndexPaths.count > 0 || _deleteIndexPaths.count > 0 || _reloadIndexPaths.count > 0;
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@"<%@: %p; insert sections: %@; delete sections: %@; reload sections: %@; insert index paths: %@; delete index paths: %@; reload index paths: %@", NSStringFromClass([self class]), self,_insertSections, _deleteSections, _reloadSections, _insertIndexPaths, _deleteIndexPaths, _reloadIndexPaths];
+}
+
+@end
+
+@interface WXRecyclerUpdateController ()
+
+@property (nonatomic, copy) NSArray<WXSectionDataController *> *theNewData;
+@property (nonatomic, copy) NSArray<WXSectionDataController *> *theOldData;
+@property (nonatomic, weak) UICollectionView *collectionView;
+@property (nonatomic, strong) NSMutableSet<NSIndexPath *> *reloadIndexPaths;
+@property (nonatomic, assign) BOOL isUpdating;
+
+@end
+
+@implementation WXRecyclerUpdateController
+
+- (void)performUpdatesWithNewData:(NSArray<WXSectionDataController *> *)newData oldData:(NSArray<WXSectionDataController *> *)oldData view:(UICollectionView *)collectionView
+{
+    if (!collectionView) {
+        return;
+    }
+    
+    self.theNewData = newData;
+    self.theOldData = oldData;
+    self.collectionView = collectionView;
+    
+    [self checkUpdates];
+}
+
+- (void)reloadItemsAtIndexPath:(NSIndexPath *)indexPath
+{
+    if (!indexPath) {
+        return;
+    }
+    
+    if (!_reloadIndexPaths) {
+        _reloadIndexPaths = [NSMutableSet set];
+    }
+    
+    [_reloadIndexPaths addObject:indexPath];
+    
+    [self checkUpdates];
+}
+
+- (void)checkUpdates
+{
+    dispatch_async(dispatch_get_main_queue(), ^{
+        if (self.isUpdating) {
+            return ;
+        }
+        
+        [self performBatchUpdates];
+    });
+}
+
+- (void)performBatchUpdates
+{
+    WXAssertMainThread();
+    WXAssert(!self.isUpdating, @"Can not perform updates while an updating is being performed");
+    
+    UICollectionView *collectionView = self.collectionView;
+    if (!collectionView) {
+        return;
+    }
+    
+    NSArray<WXSectionDataController *> *newData = [self.theNewData copy];
+    NSArray<WXSectionDataController *> *oldData = [self.theOldData copy];
+
+    [self cleanup];
+    
+    WXRecyclerDiffResult *diffResult = [self diffWithNewData:newData oldData:oldData];
+    if (![diffResult hasChanges] && self.reloadIndexPaths.count == 0) {
+        return;
+    }
+    
+    void (^updates)() = [^{
+        [self.delegate updateController:self willPerformUpdateWithNewData:newData];
+        [UIView setAnimationsEnabled:NO];
+        WXLogDebug(@"UICollectionView update:%@", diffResult);
+        [self applyUpdate:diffResult toCollectionView:self.collectionView];
+    } copy];
+    
+    void (^completion)(BOOL) = [^(BOOL finished) {
+        [UIView setAnimationsEnabled:YES];
+        self.isUpdating = NO;
+        [self.delegate updateController:self didPerformUpdateWithFinished:finished];
+        [self.reloadIndexPaths removeAllObjects];
+        [self checkUpdates];
+    } copy];
+    
+    self.isUpdating = YES;
+    
+    if (!self.delegate || !collectionView.dataSource) {
+        return;
+    }
+    
+    WXLogDebug(@"Diff result:%@", diffResult);
+    [collectionView performBatchUpdates:updates completion:completion];
+}
+
+- (void)cleanup
+{
+    self.theNewData = nil;
+    self.theOldData = nil;
+}
+
+- (WXRecyclerDiffResult *)diffWithNewData:(NSArray<WXSectionDataController *> *)newData
+                              oldData:(NSArray<WXSectionDataController *> *)oldData
+{
+    NSMutableIndexSet *reloadSections = [NSMutableIndexSet indexSet];
+    NSMutableSet<NSIndexPath *> *reloadIndexPaths = [NSMutableSet set];
+    NSMutableSet<NSIndexPath *> *deleteIndexPaths = [NSMutableSet set];
+    NSMutableSet<NSIndexPath *> *insertIndexPaths = [NSMutableSet set];
+    
+    WXDiffResult *sectionDiffResult = [WXDiffUtil diffWithMinimumDistance:newData oldArray:oldData];
+    
+    WXLogDebug(@"section diff result:%@", sectionDiffResult);
+    
+    [sectionDiffResult.inserts enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
+        WXSectionDataController *newSection = [newData wx_safeObjectAtIndex:idx];
+        [newSection.cellComponents enumerateObjectsUsingBlock:^(WXCellComponent * _Nonnull obj, NSUInteger idx2, BOOL * _Nonnull stop) {
+            if (obj.isLayoutComplete) {
+                NSIndexPath *insertIndexPath = [NSIndexPath indexPathForItem:idx2 inSection:idx];
+                [insertIndexPaths addObject:insertIndexPath];
+            }
+        }];
+        WXAssert(newSection, @"No section found in  new index:%ld");
+    }];
+    
+    for (WXDiffUpdateIndex *sectionUpdate in sectionDiffResult.updates) {
+        WXSectionDataController *oldSection = [oldData wx_safeObjectAtIndex:sectionUpdate.oldIndex];
+        WXSectionDataController *newSection = [newData wx_safeObjectAtIndex:sectionUpdate.newIndex];
+        WXAssert(newSection && oldSection, @"No section found in old index:%ld, new index:%ld", sectionUpdate.oldIndex, sectionUpdate.newIndex);
+        
+        WXDiffResult *itemDiffResult = [WXDiffUtil diffWithMinimumDistance:newSection.cellComponents oldArray:oldSection.cellComponents];
+        if (![itemDiffResult hasChanges]) {
+            // header or footer need to be updated
+            [reloadSections addIndex:sectionUpdate.oldIndex];
+        } else {
+            for (WXDiffUpdateIndex *update in itemDiffResult.updates) {
+                NSIndexPath *reloadIndexPath = [NSIndexPath indexPathForItem:update.oldIndex inSection:sectionUpdate.oldIndex];
+                [reloadIndexPaths addObject:reloadIndexPath];
+            }
+            
+            [itemDiffResult.inserts enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
+                WXCellComponent *cell = [newSection.cellComponents wx_safeObjectAtIndex:idx];
+                if (cell.isLayoutComplete) {
+                    NSIndexPath *insertIndexPath = [NSIndexPath indexPathForItem:idx inSection:sectionUpdate.oldIndex];
+                    [insertIndexPaths addObject:insertIndexPath];
+                }
+            }];
+            
+            [itemDiffResult.deletes enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL * _Nonnull stop) {
+                NSIndexPath *deleteIndexPath = [NSIndexPath indexPathForItem:idx inSection:sectionUpdate.oldIndex];
+                [deleteIndexPaths addObject:deleteIndexPath];
+            }];
+        }
+        
+    }
+    
+    WXRecyclerDiffResult *result = [[WXRecyclerDiffResult alloc] initWithInsertSections:sectionDiffResult.inserts
+                                                                 deleteSections:sectionDiffResult.deletes
+                                                                 reloadSections:reloadSections
+                                                               insertIndexPaths:insertIndexPaths
+                                                               deleteIndexPaths:deleteIndexPaths
+                                                               reloadIndexPaths:reloadIndexPaths];
+    
+    return result;
+}
+
+- (void)applyUpdate:(WXRecyclerDiffResult *)diffResult toCollectionView:(UICollectionView *)collectionView
+{
+    if (!collectionView) {
+        return;
+    }
+    
+    // reload index paths should not inculde delete index paths, otherwise it will cause crash:
+    // Assertion failure in
+    // -[UICollectionView _endItemAnimationsWithInvalidationContext:tentativelyForReordering:animator:]
+    NSMutableSet *reloadIndexPaths = self.reloadIndexPaths ? [[diffResult.reloadIndexPaths setByAddingObjectsFromSet:self.reloadIndexPaths] mutableCopy]: [diffResult.reloadIndexPaths mutableCopy];
+    [reloadIndexPaths minusSet:diffResult.deleteIndexPaths];
+    
+    [collectionView deleteItemsAtIndexPaths:[diffResult.deleteIndexPaths allObjects]];
+    [collectionView insertItemsAtIndexPaths:[diffResult.insertIndexPaths allObjects]];
+    [collectionView reloadItemsAtIndexPaths:[reloadIndexPaths allObjects]];
+    
+    [collectionView deleteSections:diffResult.deleteSections];
+    [collectionView insertSections:diffResult.insertSections];
+    [collectionView reloadSections:diffResult.reloadSections];
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h
new file mode 100644
index 0000000..75cd4b1
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.h
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXDiffUtil.h"
+@class WXComponent;
+@class WXCellComponent;
+@class WXHeaderComponent;
+
+@interface WXSectionDataController : NSObject <WXDiffable>
+
+@property (nonatomic, strong) NSArray<WXCellComponent *> *cellComponents;
+@property (nonatomic, strong) WXHeaderComponent *headerComponent;
+@property (nonatomic, strong) WXComponent *footerComponent;
+
+- (NSInteger)numberOfItems;
+
+- (UIView *)cellForItemAtIndex:(NSInteger)index;
+
+- (CGSize)sizeForItemAtIndex:(NSInteger)index;
+
+- (UIView *)viewForHeaderAtIndex:(NSInteger)index;
+
+- (CGSize)sizeForHeaderAtIndex:(NSInteger)index;
+
+- (BOOL)isStickyForHeaderAtIndex:(NSInteger)index;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m
new file mode 100644
index 0000000..af1f760
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/Recycler/WXSectionDataController.m
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXSectionDataController.h"
+#import "WXCellComponent.h"
+#import "WXHeaderComponent.h"
+#import "WXAssert.h"
+
+@implementation WXSectionDataController
+
+- (NSInteger)numberOfItems
+{
+    return self.cellComponents.count;
+}
+
+- (UIView *)cellForItemAtIndex:(NSInteger)index
+{
+    WXAssertMainThread();
+    
+    WXCellComponent *cellComponent = self.cellComponents[index];
+    return cellComponent.view;
+}
+
+- (CGSize)sizeForItemAtIndex:(NSInteger)index
+{
+    WXAssertMainThread();
+    
+    WXCellComponent *cellComponent = self.cellComponents[index];
+    return cellComponent.calculatedFrame.size;
+}
+
+- (UIView *)viewForHeaderAtIndex:(NSInteger)index;
+{
+    return self.headerComponent.view;
+}
+
+- (CGSize)sizeForHeaderAtIndex:(NSInteger)index
+{
+    return self.headerComponent.calculatedFrame.size;
+}
+
+- (BOOL)isStickyForHeaderAtIndex:(NSInteger)index
+{
+    return self.headerComponent.isSticky;
+}
+
+- (NSUInteger)hash
+{
+    return [super hash];
+}
+
+- (BOOL)isEqualToWXObject:(id<WXDiffable>)object
+{
+    if ([object isKindOfClass:[WXSectionDataController class]]) {
+        WXSectionDataController *controller = (WXSectionDataController *)object;
+        BOOL headerEqual = (self.headerComponent && controller.headerComponent && self.headerComponent == controller.headerComponent) || (!self.headerComponent && !controller.headerComponent);
+        BOOL footerEqual = (self.footerComponent && controller.footerComponent && self.footerComponent == controller.footerComponent) || (!self.footerComponent && !controller.footerComponent);
+        BOOL cellEqual = self.cellComponents && controller.cellComponents && self.cellComponents.count == controller.cellComponents.count;
+        if (cellEqual) {
+            for (int i = 0; i < self.cellComponents.count; i ++) {
+                if (self.cellComponents[i] != controller.cellComponents[i]) {
+                    cellEqual = NO;
+                    break;
+                }
+            }
+        } else {
+            cellEqual = !self.cellComponents && controller.cellComponents;
+        }
+        
+        return headerEqual && footerEqual && cellEqual;
+    } else {
+        return NO;
+    }
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
index 5ebf7a0..76fb1b5 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXAComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m
index 785928f..f5320e3 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXAComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXAComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
index bf886ef..c6f5121 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <WeexSDK/WeexSDK.h>
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m
index 8dbba33..979b0e8 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCanvasComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXCanvasComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
index 2e5bf59..fbae1d1 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.h
@@ -1,20 +1,48 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
-@class WXListComponent;
+#import "WXDiffUtil.h"
+@class WXCellComponent;
 
-@interface WXCellComponent : WXComponent
+@protocol WXCellRenderDelegate <NSObject>
+
+- (float)containerWidthForLayout:(WXCellComponent *)cell;
+
+- (void)cellDidLayout:(WXCellComponent *)cell;
+
+- (void)cellDidRendered:(WXCellComponent *)cell;
+
+- (void)cellDidRemove:(WXCellComponent *)cell;
+
+- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index;
+
+@end
+
+@interface WXCellComponent : WXComponent <WXDiffable>
 
 @property (nonatomic, strong) NSString *scope;
 @property (nonatomic, assign) BOOL isRecycle;
+@property (nonatomic, assign) BOOL isLayoutComplete;
 @property (nonatomic, assign) UITableViewRowAnimation insertAnimation;
 @property (nonatomic, assign) UITableViewRowAnimation deleteAnimation;
-@property (nonatomic, weak) WXListComponent *list;
+@property (nonatomic, assign) BOOL keepScrollPosition;
+@property (nonatomic, weak) id<WXCellRenderDelegate> delegate;
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.m
index adf91a8..e579139 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCellComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSDKInstance.h"
@@ -11,10 +22,16 @@
 #import "WXCellComponent.h"
 #import "WXListComponent.h"
 #import "WXComponent_internal.h"
+#import "WXDiffUtil.h"
+
+@interface WXCellComponent ()
+
+@end
 
 @implementation WXCellComponent
 {
     NSIndexPath *_indexPathBeforeMove;
+    BOOL _isUseContainerWidth;
 }
 
 - (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
@@ -26,6 +43,7 @@
         _isRecycle = attributes[@"recycle"] ? [WXConvert BOOL:attributes[@"recycle"]] : YES;
         _insertAnimation = [WXConvert UITableViewRowAnimation:attributes[@"insertAnimation"]];
         _deleteAnimation = [WXConvert UITableViewRowAnimation:attributes[@"deleteAnimation"]];
+        _keepScrollPosition = attributes[@"keepScrollPosition"] ? [WXConvert BOOL:attributes[@"keepScrollPosition"]] : NO;
         _lazyCreateView = YES;
         _isNeedJoinLayoutSystem = NO;
     }
@@ -38,24 +56,23 @@
     
 }
 
+- (BOOL)isEqualToWXObject:(id<WXDiffable>)object
+{
+    return self == object;
+}
+
 - (void)_frameDidCalculated:(BOOL)isChanged
 {
     [super _frameDidCalculated:isChanged];
     
     if (isChanged) {
-        [self.list cellDidLayout:self];
+        [self.delegate cellDidLayout:self];
     }
 }
 
-- (WXDisplayCompletionBlock)displayCompletionBlock
+- (void)didFinishDrawingLayer:(BOOL)success
 {
-    return ^(CALayer *layer, BOOL finished) {
-        if ([super displayCompletionBlock]) {
-            [super displayCompletionBlock](layer, finished);
-        }
-        
-        [self.list cellDidRendered:self];
-    };
+    [self.delegate cellDidRendered:self];
 }
 
 - (void)updateAttributes:(NSDictionary *)attributes
@@ -75,12 +92,16 @@
     if (attributes[@"deleteAnimation"]) {
         _deleteAnimation = [WXConvert UITableViewRowAnimation:attributes[@"deleteAnimation"]];
     }
+    
+    if (attributes[@"keepScrollPosition"]) {
+        _keepScrollPosition = [WXConvert BOOL:attributes[@"keepScrollPosition"]];
+    }
 }
 
 - (void)_moveToSupercomponent:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index
 {
-    if (self.list == newSupercomponent) {
-        [self.list cell:self didMoveToIndex:index];
+    if (self.delegate == newSupercomponent) {
+        [self.delegate cell:self didMoveToIndex:index];
         [super _removeFromSupercomponent];
         [newSupercomponent _insertSubcomponent:self atIndex:index];
     } else {
@@ -92,7 +113,7 @@
 {
     [super _removeFromSupercomponent];
     
-    [self.list cellDidRemove:self];
+    [self.delegate cellDidRemove:self];
 }
 
 - (void)removeFromSuperview
@@ -102,8 +123,10 @@
 
 - (void)_calculateFrameWithSuperAbsolutePosition:(CGPoint)superAbsolutePosition gatherDirtyComponents:(NSMutableSet<WXComponent *> *)dirtyComponents
 {
-    if (isUndefined(self.cssNode->style.dimensions[CSS_WIDTH]) && self.list) {
-        self.cssNode->style.dimensions[CSS_WIDTH] = self.list.scrollerCSSNode->style.dimensions[CSS_WIDTH];
+    if (self.delegate && (isUndefined(self.cssNode->style.dimensions[CSS_WIDTH]) || _isUseContainerWidth)) {
+        self.cssNode->style.dimensions[CSS_WIDTH] = [self.delegate containerWidthForLayout:self];
+        //TODO: set _isUseContainerWidth to NO if updateStyles have width
+        _isUseContainerWidth = YES;
     }
     
     if ([self needsLayout]) {
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.h
deleted file mode 100644
index 0706eed..0000000
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-//  WXComponent+GradientColor.h
-//  Pods
-//
-//  Created by bobning on 16/12/23.
-//
-//
-
-#import <Foundation/Foundation.h>
-#import <UIKit/UIKit.h>
-#import "WXComponent.h"
-#import "WXType.h"
-
-@interface WXComponent (GradientColor)
-
-- (void)setGradientLayer;
-
-- (UIImage *)gradientColorImageFromColors:(NSArray*)colors gradientType:(WXGradientType)gradientType imgSize:(CGSize)imgSize;
-
-@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.m b/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.m
deleted file mode 100644
index e710ed0..0000000
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent+GradientColor.m
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-//  WXComponent+GradientColor.m
-//  Pods
-//
-//  Created by bobning on 16/12/23.
-//
-//
-
-#import "WXComponent+GradientColor.h"
-#import "WXComponent_internal.h"
-#import "WXConvert.h"
-
-@implementation  WXComponent (GradientColor)
-
-- (void)setGradientLayer {
-    //parse gradient-color, linear-gradient(to right, #a80077,rgba(200, 54, 54, 0.5))
-    if ([_backgroundImage hasPrefix:@"linear-gradient"] && [_backgroundImage hasSuffix:@")"] ) {
-        NSRange range = NSMakeRange(16, _backgroundImage.length - 17);
-        NSString *str = [_backgroundImage substringWithRange:range];
-        NSArray *array = [str componentsSeparatedByString:@","];
-        WXGradientType gradientType;
-        UIColor *startColor, *endColor;
-        
-        if ([array count] == 3) {
-            gradientType = [WXConvert gradientType:array[0]];
-            startColor = [WXConvert UIColor:array[1]];
-            endColor = [WXConvert UIColor:array[2]];
-        }
-        else if ([array count] > 3){
-            NSString *gradientTypeStr = array[0];
-            NSString *subStr = [str substringFromIndex:gradientTypeStr.length + 1];
-            
-            if ([subStr hasPrefix:@"rgb"]) {
-                gradientType = [WXConvert gradientType:gradientTypeStr];
-                
-                range = [subStr rangeOfString:@")"];
-                NSString *startColorStr = [subStr substringToIndex:range.location + 1];
-                NSString *endColorStr = [subStr substringFromIndex:range.location + 2];
-                startColor = [WXConvert UIColor:startColorStr];
-                endColor = [WXConvert UIColor:endColorStr];
-            }
-            else {
-                gradientType = [WXConvert gradientType:gradientTypeStr];
-                
-                startColor = [WXConvert UIColor:array[1]];
-                
-                NSString *startColorStr = array[1];
-                NSString *endColorStr = [subStr substringFromIndex:startColorStr.length + 1];
-                endColor = [WXConvert UIColor:endColorStr];
-            }
-        }
-        else {
-            return;
-        }
-    
-        __weak typeof(self) weakSelf = self;
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
-            UIImage *bgImg = [weakSelf gradientColorImageFromColors:@[startColor, endColor] gradientType:gradientType imgSize:weakSelf.view.frame.size];
-            dispatch_async(dispatch_get_main_queue(), ^{
-                weakSelf.view.backgroundColor = [UIColor colorWithPatternImage:bgImg];
-            });
-        });
-    }
-}
-
-- (UIImage *)gradientColorImageFromColors:(NSArray*)colors gradientType:(WXGradientType)gradientType imgSize:(CGSize)imgSize;{
-    NSMutableArray *array = [NSMutableArray array];
-    for(UIColor *color in colors) {
-        [array addObject:(id)color.CGColor];
-    }
-    
-    UIGraphicsBeginImageContextWithOptions(imgSize, YES, 1);
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    CGContextSaveGState(context);
-    CGColorSpaceRef colorSpace = CGColorGetColorSpace([[colors lastObject] CGColor]);
-    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFArrayRef)array, NULL);
-    CGPoint start;
-    CGPoint end;
-    switch (gradientType) {
-        case WXGradientTypeToTop:
-            start = CGPointMake(0.0, imgSize.height);
-            end = CGPointMake(0.0, 0.0);
-            break;
-        case WXGradientTypeToBottom:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(0.0, imgSize.height);
-            break;
-        case WXGradientTypeToLeft:
-            start = CGPointMake(imgSize.width, 0.0);
-            end = CGPointMake(0.0, 0.0);
-            break;
-        case WXGradientTypeToRight:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(imgSize.width, 0.0);
-            break;
-        case WXGradientTypeToTopleft:
-            start = CGPointMake(imgSize.width, imgSize.height);
-            end = CGPointMake(0.0, 0.0f);
-            break;
-        case WXGradientTypeToBottomright:
-            start = CGPointMake(0.0, 0.0);
-            end = CGPointMake(imgSize.width, imgSize.height);
-            break;
-        default:
-            break;
-    }
-    CGContextDrawLinearGradient(context, gradient, start, end, kCGGradientDrawsBeforeStartLocation | kCGGradientDrawsAfterEndLocation);
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    CGGradientRelease(gradient);
-    CGContextRestoreGState(context);
-    CGColorSpaceRelease(colorSpace);
-    UIGraphicsEndImageContext();
-    return image;
-}
-
-@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
index 83d3d44..21d510e 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXComponent_internal.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXScrollerProtocol.h"
@@ -40,6 +51,16 @@
     UIView *_view;
     CGFloat _opacity;
     WXVisibility  _visibility;
+    WXBoxShadow *_originalBoxShadow;
+    WXBoxShadow *_lastBoxShadow;
+    WXBoxShadow *_boxShadow;
+    
+    /**
+     * accessibility support
+     */
+    UIAccessibilityTraits _role; //accessibility
+    NSString * _ariaLabel; //accessibilityLabel
+    BOOL _ariaHidden; // accessibilityElementsHidden
     
     /**
      *  PseudoClass
@@ -71,8 +92,8 @@
      *  Display
      */
     CALayer *_layer;
-    BOOL _composite;
-    BOOL _compositingChild;
+    BOOL _useCompositing;
+    BOOL _isCompositingChild;
     WXThreadSafeCounter *_displayCounter;
     
     UIColor *_borderTopColor;
@@ -175,6 +196,10 @@
 
 - (void)_setupNavBarWithStyles:(NSMutableDictionary *)styles attributes:(NSMutableDictionary *)attributes;
 
+- (void)_initCompositingAttribute:(NSDictionary *)attributes;
+
+- (BOOL)_bitmapOpaqueWithSize:(CGSize)size;
+
 - (void)_updateNavBarAttributes:(NSDictionary *)attributes;
 
 - (void)_handleFirstScreenTime;
@@ -184,4 +209,9 @@
 - (void)_updatePseudoClassStyles:(NSString *)key;
 
 - (void)_restoreViewStyles;
+
+- (void)_configWXComponentA11yWithAttributes:(NSDictionary *)attributes;
+
+- (void)setGradientLayer;
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h
new file mode 100644
index 0000000..310de99
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.h
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXComponent.h"
+
+@class WXIndicatorView;
+
+@interface WXCycleSliderComponent : WXComponent
+
+- (void)setIndicatorView:(WXIndicatorView *)indicatorView;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
new file mode 100644
index 0000000..e3d9c7c
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXCycleSliderComponent.m
@@ -0,0 +1,605 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXCycleSliderComponent.h"
+#import "WXIndicatorComponent.h"
+#import "WXComponent_internal.h"
+#import "NSTimer+Weex.h"
+#import "WXSDKManager.h"
+#import "WXUtility.h"
+
+typedef NS_ENUM(NSInteger, Direction) {
+    DirectionNone = 1 << 0,
+    DirectionLeft = 1 << 1,
+    DirectionRight = 1 << 2
+};
+
+@class WXRecycleSliderView;
+@class WXIndicatorView;
+
+@protocol WXRecycleSliderViewDelegate <UIScrollViewDelegate>
+
+- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScroll:(UIScrollView *)scrollView;
+- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index;
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
+
+@end
+
+@interface WXRecycleSliderView : UIView <UIScrollViewDelegate>
+
+@property (nonatomic, strong) WXIndicatorView *indicator;
+@property (nonatomic, weak) id<WXRecycleSliderViewDelegate> delegate;
+
+@property (nonatomic, strong) UIScrollView *scrollView;
+@property (nonatomic, strong) NSMutableArray *itemViews;
+@property (nonatomic, assign) Direction direction;
+@property (nonatomic, assign) NSInteger currentIndex;
+@property (nonatomic, assign) NSInteger nextIndex;
+@property (nonatomic, assign) CGRect currentItemFrame;
+@property (nonatomic, assign) CGRect nextItemFrame;
+@property (nonatomic, assign) BOOL infinite;
+
+- (void)insertItemView:(UIView *)view atIndex:(NSInteger)index;
+- (void)removeItemView:(UIView *)view;
+
+@end
+
+@implementation WXRecycleSliderView
+
+- (id)initWithFrame:(CGRect)frame
+{
+    self = [super initWithFrame:frame];
+    if (self) {
+        _currentIndex = 0;
+        _itemViews = [[NSMutableArray alloc] init];
+        _scrollView = [[UIScrollView alloc] init];
+        _scrollView.backgroundColor = [UIColor clearColor];
+        _scrollView.delegate = self;
+        _scrollView.showsHorizontalScrollIndicator = NO;
+        _scrollView.showsVerticalScrollIndicator = NO;
+        _scrollView.scrollsToTop = NO;
+        [self addSubview:_scrollView];
+    }
+    return self;
+}
+
+- (void)layoutSubviews
+{
+    [super layoutSubviews];
+    [self resetAllViewsFrame];
+}
+
+#pragma mark Private Methods
+- (CGFloat)height {
+    return self.frame.size.height;
+}
+
+- (CGFloat)width {
+    return self.frame.size.width;
+}
+
+- (UIView *)getItemAtIndex:(NSInteger)index
+{
+    if (self.itemViews.count > index) {
+        return [self.itemViews objectAtIndex:index];
+    }else{
+        return nil;
+    }
+}
+
+- (void)setCurrentIndex:(NSInteger)currentIndex
+{
+    if (currentIndex >= _itemViews.count || currentIndex < 0) {
+        currentIndex = 0;
+    }
+    _currentIndex = currentIndex;
+    if (_infinite) {
+        if (_direction == DirectionRight) {
+            self.nextItemFrame = CGRectMake(0, 0, self.width, self.height);
+            self.nextIndex = self.currentIndex - 1;
+            if (self.nextIndex < 0)
+            {
+                self.nextIndex = _itemViews.count - 1;
+            }
+        }else if (_direction == DirectionLeft) {
+            self.nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
+            self.nextIndex = (self.currentIndex + 1) % _itemViews.count;
+        }else {
+            self.nextIndex = (self.currentIndex + 1) % _itemViews.count;
+        }
+        [self resetAllViewsFrame];
+    } else {
+        [_scrollView setContentOffset:CGPointMake(_currentIndex * self.width, 0) animated:YES];
+    }
+    [self resetIndicatorPoint];
+    if (self.delegate && [self.delegate respondsToSelector:@selector(recycleSliderView:didScrollToItemAtIndex:)]) {
+        [self.delegate recycleSliderView:self didScrollToItemAtIndex:_currentIndex];
+    }
+}
+
+- (void)resetIndicatorPoint
+{
+    [self.indicator setPointCount:self.itemViews.count];
+    [self.indicator setCurrentPoint:_currentIndex];
+}
+
+#pragma mark  Scroll & Frames
+- (void)setDirection:(Direction)direction {
+    if (_direction == direction) return;
+    _direction = direction;
+    if (_direction == DirectionNone) return;
+    if (_direction == DirectionRight) {
+        self.nextItemFrame = CGRectMake(0, 0, self.width, self.height);
+        self.nextIndex = self.currentIndex - 1;
+        if (self.nextIndex < 0)
+        {
+            self.nextIndex = _itemViews.count - 1;
+        }
+        UIView *view = [self getItemAtIndex:_nextIndex];
+        if (view) {
+            view.frame = _nextItemFrame;
+        }
+    }else if (_direction == DirectionLeft){
+        self.nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
+        self.nextIndex = (self.currentIndex + 1) % _itemViews.count;
+        UIView *view = [self getItemAtIndex:_nextIndex];
+        if (view) {
+            view.frame = _nextItemFrame;
+        }
+    }
+}
+
+- (void)resetAllViewsFrame
+{
+    if (_infinite && _itemViews.count > 1) {
+        self.scrollView.frame = CGRectMake(0, 0, self.width, self.height);
+        self.scrollView.contentOffset = CGPointMake(self.width, 0);
+        if (self.itemViews.count > 1) {
+            self.scrollView.contentSize = CGSizeMake(self.width * 3, 0);
+        } else {
+            self.scrollView.contentSize = CGSizeZero;
+        }
+        _currentItemFrame = CGRectMake(self.width, 0, self.width, self.height);
+        for (int i = 0; i < self.itemViews.count; i++) {
+            UIView *view = [self.itemViews objectAtIndex:i];
+            if (i != self.currentIndex && i != self.nextIndex) {
+                view.frame = CGRectMake(self.frame.size.width * 3, 0, self.width, self.height);;
+            }
+        }
+        [self getItemAtIndex:_currentIndex].frame = _currentItemFrame;
+        if (_itemViews.count == 2) {
+            _nextItemFrame = CGRectMake(self.width * 2, 0, self.width, self.height);
+            [self getItemAtIndex:_nextIndex].frame = _nextItemFrame;
+        }
+    } else {
+        self.scrollView.frame = self.bounds;
+        self.scrollView.contentSize = CGSizeMake(self.width * _itemViews.count, self.height);
+        self.scrollView.contentOffset = CGPointMake(_currentIndex * self.width, 0);
+        for (int i = 0; i < _itemViews.count; i ++) {
+            UIView *view = [_itemViews objectAtIndex:i];
+            view.frame = CGRectMake(i * self.width, 0, self.width, self.height);
+        }
+        [self.scrollView setContentOffset:CGPointMake(_currentIndex * self.width, 0) animated:NO];
+    }
+    [self resetIndicatorPoint];
+}
+
+- (void)nextPage {
+    if (_itemViews.count > 1) {
+        if (_infinite) {
+            [self.scrollView setContentOffset:CGPointMake(self.width * 2, 0) animated:YES];
+        } else {
+            _currentIndex += 1;
+            if (_currentIndex - 1 < _itemViews.count) {
+                [self.scrollView setContentOffset:CGPointMake(_currentIndex * self.width, 0) animated:YES];
+            }
+        }
+    }
+}
+
+- (void)resetScrollView {
+    if (self.scrollView.contentOffset.x / self.width == 1)
+    {
+        return;
+    }
+    [self setCurrentIndex:self.nextIndex];
+    self.scrollView.contentOffset = CGPointMake(self.width, 0);
+}
+
+#pragma mark Public Methods
+
+- (void)setIndicator:(WXIndicatorView *)indicator
+{
+    _indicator = indicator;
+    [_indicator setPointCount:self.itemViews.count];
+    [_indicator setCurrentPoint:_currentIndex];
+}
+
+- (void)insertItemView:(UIView *)view atIndex:(NSInteger)index
+{
+    if (![self.itemViews containsObject:view]) {
+        view.tag = self.itemViews.count;
+        if (index < 0) {
+            [self.itemViews addObject:view];
+        } else {
+            [self.itemViews insertObject:view atIndex:index];
+        }
+    }
+    
+    if (![self.scrollView.subviews containsObject:view]) {
+        if (index < 0) {
+            [self.scrollView addSubview:view];
+        } else {
+            [self.scrollView insertSubview:view atIndex:index];
+        }
+    }
+    [self layoutSubviews];
+    [self setCurrentIndex:_currentIndex];
+}
+
+- (void)removeItemView:(UIView *)view
+{
+    if ([self.itemViews containsObject:view]) {
+        [self.itemViews removeObject:view];
+    }
+    
+    if ([self.scrollView.subviews containsObject:view]) {
+        [view removeFromSuperview];
+    }
+    [self layoutSubviews];
+    [self setCurrentIndex:_currentIndex];
+}
+
+#pragma mark ScrollView Delegate
+
+- (void)scrollViewDidScroll:(UIScrollView *)scrollView
+{
+    if (_infinite) {
+        CGFloat offX = scrollView.contentOffset.x;
+        self.direction = offX > self.width ? DirectionLeft : offX < self.width ? DirectionRight : DirectionNone;
+    }
+    if (self.delegate && [self.delegate respondsToSelector:@selector(recycleSliderView:didScroll:)]) {
+        [self.delegate recycleSliderView:self didScroll:self.scrollView];
+    }
+}
+
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
+{
+    if (self.delegate && [self.delegate respondsToSelector:@selector(scrollViewWillBeginDragging:)]) {
+        [self.delegate scrollViewWillBeginDragging:self.scrollView];
+    }
+}
+
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
+{
+    if (self.delegate && [self.delegate respondsToSelector:@selector(scrollViewDidEndDragging: willDecelerate:)]) {
+        [self.delegate scrollViewDidEndDragging:self.scrollView willDecelerate:decelerate];
+    }
+}
+
+- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
+    if (_infinite) {
+        [self resetScrollView];
+    } else {
+        NSInteger index = _scrollView.contentOffset.x / self.width;
+        [self setCurrentIndex:index];
+    }
+}
+
+- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
+    if (_infinite) {
+        [self resetScrollView];
+    } else {
+        NSInteger index = _scrollView.contentOffset.x / self.width;
+        [self setCurrentIndex:index];
+    }
+}
+
+@end
+
+@interface WXCycleSliderComponent () <WXRecycleSliderViewDelegate,WXIndicatorComponentDelegate>
+
+@property (nonatomic, strong) WXRecycleSliderView *recycleSliderView;
+@property (nonatomic, strong) NSTimer *autoTimer;
+@property (nonatomic, assign) NSInteger currentIndex;
+@property (nonatomic, assign) BOOL  autoPlay;
+@property (nonatomic, assign) NSUInteger interval;
+@property (nonatomic, assign) NSInteger index;
+@property (nonatomic, assign) CGFloat lastOffsetXRatio;
+@property (nonatomic, assign) CGFloat offsetXAccuracy;
+@property (nonatomic, assign) BOOL  sliderChangeEvent;
+@property (nonatomic, assign) BOOL  sliderScrollEvent;
+@property (nonatomic, assign) BOOL  sliderScrollStartEvent;
+@property (nonatomic, assign) BOOL  sliderScrollEndEvent;
+@property (nonatomic, assign) BOOL  sliderStartEventFired;
+@property (nonatomic, strong) NSMutableArray *childrenView;
+@property (nonatomic, assign) BOOL scrollable;
+@property (nonatomic, assign) BOOL infinite;
+
+@end
+
+@implementation WXCycleSliderComponent
+
+- (void) dealloc
+{
+    [self _stopAutoPlayTimer];
+}
+
+- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+{
+    if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
+        _sliderChangeEvent = NO;
+        _sliderScrollEvent = NO;
+        _interval = 3000;
+        _childrenView = [NSMutableArray new];
+        _lastOffsetXRatio = 0;
+        
+        if (attributes[@"autoPlay"]) {
+            _autoPlay = [WXConvert BOOL:attributes[@"autoPlay"]];
+        }
+        
+        if (attributes[@"interval"]) {
+            _interval = [WXConvert NSInteger:attributes[@"interval"]];
+        }
+        
+        if (attributes[@"index"]) {
+            _index = [WXConvert NSInteger:attributes[@"index"]];
+        }
+        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
+        if (attributes[@"offsetXAccuracy"]) {
+            _offsetXAccuracy = [WXConvert CGFloat:attributes[@"offsetXAccuracy"]];
+        }
+        _infinite = attributes[@"infinite"] ? [WXConvert BOOL:attributes[@"infinite"]] : YES;
+        self.cssNode->style.flex_direction = CSS_FLEX_DIRECTION_ROW;
+    }
+    return self;
+}
+
+- (UIView *)loadView
+{
+    return [[WXRecycleSliderView alloc] init];
+}
+
+- (void)viewDidLoad
+{
+    [super viewDidLoad];
+    
+    _recycleSliderView = (WXRecycleSliderView *)self.view;
+    _recycleSliderView.delegate = self;
+    _recycleSliderView.scrollView.pagingEnabled = YES;
+    _recycleSliderView.exclusiveTouch = YES;
+    _recycleSliderView.scrollView.scrollEnabled = _scrollable;
+    _recycleSliderView.infinite = _infinite;
+    if (_autoPlay) {
+        [self _startAutoPlayTimer];
+    } else {
+        [self _stopAutoPlayTimer];
+    }
+}
+
+- (void)layoutDidFinish
+{
+    _recycleSliderView.currentIndex = _index;
+}
+
+- (void)viewDidUnload
+{
+    [_childrenView removeAllObjects];
+}
+
+- (void)insertSubview:(WXComponent *)subcomponent atIndex:(NSInteger)index
+{
+    if (subcomponent->_positionType == WXPositionTypeFixed) {
+        [self.weexInstance.rootView addSubview:subcomponent.view];
+        return;
+    }
+    
+    // use _lazyCreateView to forbid component like cell's view creating
+    if(_lazyCreateView) {
+        subcomponent->_lazyCreateView = YES;
+    }
+    
+    if (!subcomponent->_lazyCreateView || (self->_lazyCreateView && [self isViewLoaded])) {
+        UIView *view = subcomponent.view;
+        
+        if(index < 0) {
+            [self.childrenView addObject:view];
+        }
+        else {
+            [self.childrenView insertObject:view atIndex:index];
+        }
+        
+        WXRecycleSliderView *recycleSliderView = (WXRecycleSliderView *)self.view;
+        if ([view isKindOfClass:[WXIndicatorView class]]) {
+            ((WXIndicatorComponent *)subcomponent).delegate = self;
+            [recycleSliderView addSubview:view];
+            return;
+        }
+        
+        subcomponent.isViewFrameSyncWithCalculated = NO;
+        
+        if (index == -1) {
+            [recycleSliderView insertItemView:view atIndex:index];
+        } else {
+            NSInteger offset = 0;
+            for (int i = 0; i < [self.childrenView count]; ++i) {
+                if (index == i) break;
+                
+                if ([self.childrenView[i] isKindOfClass:[WXIndicatorView class]]) {
+                    offset++;
+                }
+            }
+            [recycleSliderView insertItemView:view atIndex:index - offset];
+        }
+        [recycleSliderView layoutSubviews];
+    }
+}
+
+- (void)willRemoveSubview:(WXComponent *)component
+{
+    UIView *view = component.view;
+    
+    if(self.childrenView && [self.childrenView containsObject:view]) {
+        [self.childrenView removeObject:view];
+    }
+    
+    WXRecycleSliderView *recycleSliderView = (WXRecycleSliderView *)_view;
+    [recycleSliderView removeItemView:view];
+    [recycleSliderView setCurrentIndex:0];
+}
+
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+    if (attributes[@"autoPlay"]) {
+        _autoPlay = [WXConvert BOOL:attributes[@"autoPlay"]];
+        if (_autoPlay) {
+            [self _startAutoPlayTimer];
+        } else {
+            [self _stopAutoPlayTimer];
+        }
+    }
+    
+    if (attributes[@"interval"]) {
+        _interval = [WXConvert NSInteger:attributes[@"interval"]];
+        [self _stopAutoPlayTimer];
+        
+        if (_autoPlay) {
+            [self _startAutoPlayTimer];
+        } 
+    }
+    
+    if (attributes[@"index"]) {
+        _index = [WXConvert NSInteger:attributes[@"index"]];
+        self.currentIndex = _index;
+        self.recycleSliderView.currentIndex = _index;
+    }
+    
+    if (attributes[@"scrollable"]) {
+        _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
+        ((WXRecycleSliderView *)self.view).scrollView.scrollEnabled = _scrollable;
+    }
+    
+    if (attributes[@"offsetXAccuracy"]) {
+        _offsetXAccuracy = [WXConvert CGFloat:attributes[@"offsetXAccuracy"]];
+    }
+    if (attributes[@"infinite"]) {
+        _infinite = [WXConvert BOOL:attributes[@"infinite"]];
+    }
+}
+
+- (void)addEvent:(NSString *)eventName
+{
+    if ([eventName isEqualToString:@"change"]) {
+        _sliderChangeEvent = YES;
+    }
+    if ([eventName isEqualToString:@"scroll"]) {
+        _sliderScrollEvent = YES;
+    }
+}
+
+- (void)removeEvent:(NSString *)eventName
+{
+    if ([eventName isEqualToString:@"change"]) {
+        _sliderChangeEvent = NO;
+    }
+    if ([eventName isEqualToString:@"scroll"]) {
+        _sliderScrollEvent = NO;
+    }
+}
+
+#pragma mark WXIndicatorComponentDelegate Methods
+
+-(void)setIndicatorView:(WXIndicatorView *)indicatorView
+{
+    NSAssert(_recycleSliderView, @"");
+    [_recycleSliderView setIndicator:indicatorView];
+}
+
+#pragma mark Private Methods
+
+- (void)_startAutoPlayTimer
+{
+    if (!self.autoTimer || ![self.autoTimer isValid]) {
+        __weak __typeof__(self) weakSelf = self;
+        self.autoTimer = [NSTimer wx_scheduledTimerWithTimeInterval:_interval/1000.0f block:^() {
+            [weakSelf _autoPlayOnTimer];
+        } repeats:YES];
+        [[NSRunLoop currentRunLoop] addTimer:self.autoTimer forMode:NSRunLoopCommonModes];
+    }
+}
+
+- (void)_stopAutoPlayTimer
+{
+    if (self.autoTimer && [self.autoTimer isValid]) {
+        [self.autoTimer invalidate];
+        self.autoTimer = nil;
+    }
+}
+
+- (void)_autoPlayOnTimer
+{
+    if (!_infinite && (_currentIndex == _recycleSliderView.itemViews.count - 1)) {
+        [self _stopAutoPlayTimer];
+    }else {
+        [self.recycleSliderView nextPage];
+    }
+}
+
+#pragma mark ScrollView Delegate
+
+- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScroll:(UIScrollView *)scrollView
+{
+    if (_sliderScrollEvent) {
+        CGFloat width = scrollView.frame.size.width;
+        CGFloat XDeviation = 0;
+        if (_infinite) {
+            XDeviation = - (scrollView.contentOffset.x - width);
+        } else {
+            XDeviation = - (scrollView.contentOffset.x - width * _currentIndex);
+        }
+        CGFloat offsetXRatio = (XDeviation / width);
+        if (fabs(offsetXRatio - _lastOffsetXRatio) >= _offsetXAccuracy) {
+            _lastOffsetXRatio = offsetXRatio;
+            [self fireEvent:@"scroll" params:@{@"offsetXRatio":[NSNumber numberWithFloat:offsetXRatio]} domChanges:nil];
+        }
+    }
+}
+
+- (void)recycleSliderView:(WXRecycleSliderView *)recycleSliderView didScrollToItemAtIndex:(NSInteger)index
+{
+    self.currentIndex = index;
+    if (_sliderChangeEvent) {
+        [self fireEvent:@"change" params:@{@"index":@(index)} domChanges:@{@"attrs": @{@"index": @(index)}}];
+    }
+}
+
+- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
+{
+    [self _stopAutoPlayTimer];
+}
+
+- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
+{
+    if (_autoPlay) {
+        [self _startAutoPlayTimer];
+    }
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
index 677eae2..c290e29 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m
index c07f1c4..1a17b09 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXDivComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDivComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h
new file mode 100644
index 0000000..f9559d8
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.h
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXComponent.h"
+#import "WXTextComponentProtocol.h"
+#import "WXDatePickerManager.h"
+
+@interface WXEditComponent : WXComponent<WXDatePickerManagerDelegate,UITextViewDelegate,UITextFieldDelegate>
+
+//attribute
+@property (nonatomic, strong) UIColor *placeholderColor;
+@property (nonatomic, strong) NSString *placeholderString;
+@property (nonatomic, strong) UILabel *placeHolderLabel;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.m
new file mode 100644
index 0000000..1f77355
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXEditComponent.m
@@ -0,0 +1,819 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXEditComponent.h"
+#import "WXConvert.h"
+#import "WXUtility.h"
+#import "WXSDKInstance.h"
+#import "WXSDKInstance_private.h"
+#import "WXDefine.h"
+#import "WXAssert.h"
+#import "WXComponent_internal.h"
+#import "WXComponent+PseudoClassManagement.h"
+
+@interface WXEditComponent()
+
+//@property (nonatomic, strong) WXTextInputView *inputView;
+@property (nonatomic, strong) WXDatePickerManager *datePickerManager;
+@property (nonatomic, strong) NSDictionary *attr;
+//attribute
+@property (nonatomic) NSNumber *maxLength;
+@property (nonatomic) NSString * value;
+@property (nonatomic) BOOL autofocus;
+@property(nonatomic) UIReturnKeyType returnKeyType;
+@property (nonatomic) BOOL disabled;
+@property (nonatomic, copy) NSString *inputType;
+@property (nonatomic) NSUInteger rows;
+
+//style
+@property (nonatomic) WXPixelType fontSize;
+@property (nonatomic) WXTextStyle fontStyle;
+@property (nonatomic) CGFloat fontWeight;
+@property (nonatomic, strong) NSString *fontFamily;
+@property (nonatomic, strong) UIColor *colorForStyle;
+@property (nonatomic)NSTextAlignment textAlignForStyle;
+
+//event
+@property (nonatomic) BOOL inputEvent;
+@property (nonatomic) BOOL clickEvent;
+@property (nonatomic) BOOL focusEvent;
+@property (nonatomic) BOOL blurEvent;
+@property (nonatomic) BOOL changeEvent;
+@property (nonatomic) BOOL returnEvent;
+@property (nonatomic) BOOL keyboardEvent;
+@property (nonatomic, strong) NSString *changeEventString;
+@property (nonatomic, assign) CGSize keyboardSize;
+
+@end
+
+@implementation WXEditComponent
+{
+    UIEdgeInsets _border;
+    UIEdgeInsets _padding;
+}
+
+WX_EXPORT_METHOD(@selector(focus))
+WX_EXPORT_METHOD(@selector(blur))
+WX_EXPORT_METHOD(@selector(setSelectionRange:selectionEnd:))
+WX_EXPORT_METHOD(@selector(getSelectionRange:))
+
+- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+{
+    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
+    if (self) {
+        _inputEvent = NO;
+        _focusEvent = NO;
+        _blurEvent = NO;
+        _changeEvent = NO;
+        _returnEvent = NO;
+        _clickEvent = NO;
+        _keyboardEvent = NO;
+        // handle attributes
+        _autofocus = [attributes[@"autofocus"] boolValue];
+        _disabled = [attributes[@"disabled"] boolValue];
+        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
+        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
+        if(attributes[@"type"]) {
+            _inputType = [WXConvert NSString:attributes[@"type"]];
+            _attr = attributes;
+        }
+        if (attributes[@"maxlength"]) {
+            _maxLength = [NSNumber numberWithUnsignedInteger:[attributes[@"maxlength"] integerValue]];
+        }
+        if (attributes[@"returnKeyType"]) {
+            _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
+        }
+        if (attributes[@"rows"]) {
+            _rows = [attributes[@"rows"] integerValue];
+        } else {
+            _rows = 2;
+        }
+        
+        // handle styles
+        if (styles[@"color"]) {
+            _colorForStyle = [WXConvert UIColor:styles[@"color"]];
+        }
+        if (styles[@"fontSize"]) {
+            _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
+        }
+        if (styles[@"fontWeight"]) {
+            _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
+        }
+        if (styles[@"fontStyle"]) {
+            _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
+        }
+        if (styles[@"fontFamily"]) {
+            _fontFamily = styles[@"fontFamily"];
+        }
+        if (styles[@"textAlign"]) {
+            _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
+        }
+        if (styles[@"placeholderColor"]) {
+            _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
+        }else {
+            _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
+        }
+    }
+    
+    return self;
+}
+
+#pragma mark - lifeCircle
+
+- (void)viewDidLoad
+{
+    UIView * view = self.view;
+    if ([view isKindOfClass:[UITextField class]]){
+        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:)
+                                                     name:UITextFieldTextDidChangeNotification
+                                                   object:view];
+    }
+    _padding = UIEdgeInsetsZero;
+    _border = UIEdgeInsetsZero;
+    self.userInteractionEnabled = YES;
+    [self setType];
+    [self setAutofocus:_autofocus];
+    [self setTextFont];
+    [self setPlaceholderAttributedString];
+    [self setTextAlignment:_textAlignForStyle];
+    [self setTextColor:_colorForStyle];
+    [self setText:_value];
+    [self setEnabled:!_disabled];
+    [self setRows:_rows];
+    [self setReturnKeyType:_returnKeyType];
+    [self updatePattern];
+    
+    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard)];
+    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
+    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 0, 44)];
+    toolbar.items = [NSArray arrayWithObjects:space, barButton, nil];
+    
+    self.inputAccessoryView = toolbar;
+    [self handlePseudoClass];
+}
+
+- (void)viewWillLoad
+{
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(keyboardWasShown:)
+                                                 name:UIKeyboardWillShowNotification
+                                               object:nil];
+    
+    [[NSNotificationCenter defaultCenter] addObserver:self
+                                             selector:@selector(keyboardWillHide:)
+                                                 name:UIKeyboardWillHideNotification
+                                               object:nil];
+}
+
+- (void)dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
+
+-(void)focus
+{
+    if(self.view) {
+        [self.view becomeFirstResponder];
+    }
+}
+
+-(void)blur
+{
+    if(self.view) {
+        [self.view resignFirstResponder];
+    }
+}
+
+-(void)setSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
+{
+    if(selectionStart>self.text.length || selectionEnd>self.text.length) {
+        return;
+    }
+    [self.view becomeFirstResponder];
+    [self setEditSelectionRange:selectionStart selectionEnd:selectionEnd];
+}
+
+-(void)getSelectionRange:(WXCallback)callback
+{
+    NSDictionary *res = [self getEditSelectionRange];
+    if(callback) {
+        callback(res);
+    }
+}
+
+
+#pragma mark - Overwrite Method
+-(NSString *)text
+{
+    return @"";
+}
+
+- (void)setText:(NSString *)text
+{
+}
+
+-(void)setTextColor:(UIColor *)color
+{
+}
+
+-(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
+{
+}
+
+-(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
+{
+}
+
+-(void)setEnabled:(BOOL)enabled
+{
+}
+
+-(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
+{
+}
+
+-(void)setInputAccessoryView:(UIView *)inputAccessoryView
+{
+}
+
+-(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
+{
+}
+
+-(NSDictionary *)getEditSelectionRange
+{
+    return @{};
+}
+
+-(void)setKeyboardType:(UIKeyboardType)keyboardType
+{
+}
+
+-(void)setSecureTextEntry:(BOOL)secureTextEntry
+{
+}
+
+-(void)setEditPadding:(UIEdgeInsets)padding
+{
+}
+
+-(void)setEditBorder:(UIEdgeInsets)border
+{
+}
+
+-(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:(UIFont *)font
+{
+}
+
+-(void)setFont:(UIFont *)font
+{
+}
+
+-(void)setRows:(NSUInteger)rows
+{
+}
+
+#pragma mark - Add Event
+- (void)addEvent:(NSString *)eventName
+{
+    if ([eventName isEqualToString:@"input"]) {
+        _inputEvent = YES;
+    }
+    if ([eventName isEqualToString:@"focus"]) {
+        _focusEvent = YES;
+    }
+    if ([eventName isEqualToString:@"blur"]) {
+        _blurEvent = YES;
+    }
+    if ([eventName isEqualToString:@"change"]) {
+        _changeEvent = YES;
+    }
+    if ([eventName isEqualToString:@"return"]) {
+        _returnEvent = YES;
+    }
+    if ([eventName isEqualToString:@"click"]) {
+        _clickEvent = YES;
+    }
+    if ([eventName isEqualToString:@"keyboard"]) {
+        _keyboardEvent = YES;
+    }
+}
+
+#pragma Remove Event
+
+-(void)removeEvent:(NSString *)eventName
+{
+    if ([eventName isEqualToString:@"input"]) {
+        _inputEvent = NO;
+    }
+    if ([eventName isEqualToString:@"focus"]) {
+        _focusEvent = NO;
+    }
+    if ([eventName isEqualToString:@"blur"]) {
+        _blurEvent = NO;
+    }
+    if ([eventName isEqualToString:@"change"]) {
+        _changeEvent = NO;
+    }
+    if ([eventName isEqualToString:@"return"]) {
+        _returnEvent = NO;
+    }
+    if ([eventName isEqualToString:@"click"]) {
+        _clickEvent = NO;
+    }
+    if ([eventName isEqualToString:@"keyboard"]) {
+        _keyboardEvent = NO;
+    }
+}
+
+#pragma mark - upate attributes
+
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+    _attr = attributes;
+    if (attributes[@"type"]) {
+        _inputType = [WXConvert NSString:attributes[@"type"]];
+        [self setType];
+    }
+    if (attributes[@"autofocus"]) {
+        self.autofocus = [attributes[@"autofocus"] boolValue];
+    }
+    if (attributes[@"disabled"]) {
+        _disabled = [attributes[@"disabled"] boolValue];
+        [self setEnabled:!_disabled];
+    }
+    if (attributes[@"maxlength"]) {
+        _maxLength = [NSNumber numberWithInteger:[attributes[@"maxlength"] integerValue]];
+    }
+    if (attributes[@"placeholder"]) {
+        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
+        [self setPlaceholderAttributedString];
+    }
+    if (attributes[@"value"]) {
+        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
+        if (_maxLength && [_value length] > [_maxLength integerValue]&& [_maxLength integerValue] >= 0) {
+            _value = [_value substringToIndex:([_maxLength integerValue])];
+        }
+        [self setText:_value];
+    }
+    if (attributes[@"returnKeyType"]) {
+        _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
+        [self setReturnKeyType:_returnKeyType];
+    }
+    if (attributes[@"rows"]) {
+        _rows = [attributes[@"rows"] integerValue];
+        [self setRows:_rows];
+    } else {
+        _rows = 2;
+        [self setRows:_rows];
+    }
+}
+
+#pragma mark - upate styles
+
+- (void)updateStyles:(NSDictionary *)styles
+{
+    if (styles[@"color"]) {
+        _colorForStyle = [WXConvert UIColor:styles[@"color"]];
+        [self setTextColor:_colorForStyle];
+    }
+    if (styles[@"fontSize"]) {
+        _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
+    }
+    if (styles[@"fontWeight"]) {
+        _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
+    }
+    if (styles[@"fontStyle"]) {
+        _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
+    }
+    if (styles[@"fontFamily"]) {
+        _fontFamily = [WXConvert NSString:styles[@"fontFamily"]];
+    }
+    [self setTextFont];
+    
+    if (styles[@"textAlign"]) {
+        _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
+        [self setTextAlignment:_textAlignForStyle] ;
+    }
+    if (styles[@"placeholderColor"]) {
+        _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
+    }else {
+        _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
+    }
+    [self setPlaceholderAttributedString];
+    [self updatePattern];
+}
+
+-(void)updatePattern
+{
+    UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
+    if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
+        [self setPadding:padding];
+    }
+    
+    UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
+    if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
+        [self setBorder:border];
+    }
+}
+
+- (CGSize (^)(CGSize))measureBlock
+{
+    __weak typeof(self) weakSelf = self;
+    return ^CGSize (CGSize constrainedSize) {
+        
+        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:nil];
+        //TODO:more elegant way to use max and min constrained size
+        if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_WIDTH])) {
+            computedSize.width = MAX(computedSize.width, weakSelf.cssNode->style.minDimensions[CSS_WIDTH]);
+        }
+        
+        if (!isnan(weakSelf.cssNode->style.maxDimensions[CSS_WIDTH])) {
+            computedSize.width = MIN(computedSize.width, weakSelf.cssNode->style.maxDimensions[CSS_WIDTH]);
+        }
+        
+        if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_HEIGHT])) {
+            computedSize.height = MAX(computedSize.height, weakSelf.cssNode->style.minDimensions[CSS_HEIGHT]);
+        }
+        
+        if (!isnan(weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT])) {
+            computedSize.height = MIN(computedSize.height, weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT]);
+        }
+        
+        return (CGSize) {
+            WXCeilPixelValue(computedSize.width),
+            WXCeilPixelValue(computedSize.height)
+        };
+    };
+}
+
+#pragma mark WXDatePickerManagerDelegate
+
+-(void)fetchDatePickerValue:(NSString *)value
+{
+    self.text = value;
+    if (_changeEvent) {
+        if (![[self text] isEqualToString:_changeEventString]) {
+            [self fireEvent:@"change" params:@{@"value":[self text]} domChanges:@{@"attrs":@{@"value":[self text]}}];
+        }
+    }
+}
+
+#pragma mark UITextFieldDelegate
+
+- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
+    if([self isDateType])
+    {
+        [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
+        _changeEventString = [textField text];
+        [_datePickerManager show];
+        return NO;
+    }
+    return  YES;
+}
+
+#pragma mark UITextFieldDelegate
+
+- (void)textFieldDidBeginEditing:(UITextField *)textField
+{
+    _changeEventString = [textField text];
+    if (_focusEvent) {
+        [self fireEvent:@"focus" params:nil];
+    }
+    [self handlePseudoClass];
+}
+
+- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
+{
+    if (_maxLength) {
+        NSUInteger oldLength = [textField.text length];
+        NSUInteger replacementLength = [string length];
+        NSUInteger rangeLength = range.length;
+        
+        NSUInteger newLength = oldLength - rangeLength + replacementLength;
+        
+        return newLength <= [_maxLength integerValue] ;
+    }
+    return YES;
+}
+
+- (void)textFieldDidEndEditing:(UITextField *)textField
+{
+    if (_changeEvent) {
+        if (![[textField text] isEqualToString:_changeEventString]) {
+            [self fireEvent:@"change" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
+        }
+    }
+    if (_blurEvent) {
+        [self fireEvent:@"blur" params:nil];
+    }
+    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
+        [self recoveryPseudoStyles:self.styles];
+    }
+}
+
+- (BOOL)textFieldShouldReturn:(UITextField *)textField
+{
+    if (_returnEvent) {
+        NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
+        [self fireEvent:@"return" params:@{@"value":[textField text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textField text]}}];
+    }
+    return YES;
+}
+
+- (void)textFiledEditChanged:(NSNotification *)notifi
+{
+    if (_inputEvent) {
+        UITextField *textField = (UITextField *)notifi.object;
+        // bind each other , the key must be attrs
+        [self fireEvent:@"input" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
+    }
+}
+
+- (void)setViewMovedUp:(BOOL)movedUp
+{
+    UIView *rootView = self.weexInstance.rootView;
+    CGRect rect = self.weexInstance.frame;
+    CGRect rootViewFrame = rootView.frame;
+    CGRect inputFrame = [self.view.superview convertRect:self.view.frame toView:rootView];
+    if (movedUp) {
+        CGFloat offset = inputFrame.origin.y-(rootViewFrame.size.height-_keyboardSize.height-inputFrame.size.height);
+        if (offset > 0) {
+            rect = (CGRect){
+                .origin.x = 0.f,
+                .origin.y = -offset,
+                .size = rootViewFrame.size
+            };
+        }
+    }
+    self.weexInstance.rootView.frame = rect;
+}
+
+#pragma mark textview Delegate
+- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
+{
+    if([self isDateType])
+    {
+        [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
+        _changeEventString = [textView text];
+        [_datePickerManager show];
+        return NO;
+    }
+    return  YES;
+}
+
+- (void)textViewDidBeginEditing:(UITextView *)textView
+{
+    _changeEventString = [textView text];
+    if (_focusEvent) {
+        [self fireEvent:@"focus" params:nil];
+    }
+    if (_clickEvent) {
+        [self fireEvent:@"click" params:nil];
+    }
+    [textView becomeFirstResponder];
+    [self handlePseudoClass];
+}
+
+- (void)textViewDidChange:(UITextView *)textView
+{
+    if(textView.text && [textView.text length] > 0) {
+        self.placeHolderLabel.text = @"";
+    }else{
+        [self setPlaceholderAttributedString];
+    }
+    if (_inputEvent) {
+        [self fireEvent:@"input" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
+    }
+}
+
+- (void)textViewDidEndEditing:(UITextView *)textView
+{
+    if (![textView.text length]) {
+        [self setPlaceholderAttributedString];
+    }
+    if (_changeEvent) {
+        if (![[textView text] isEqualToString:_changeEventString]) {
+            [self fireEvent:@"change" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
+        }
+    }
+    if (_blurEvent) {
+        [self fireEvent:@"blur" params:nil];
+    }
+    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
+        [self recoveryPseudoStyles:self.styles];
+    }
+}
+
+- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
+{
+    if ([text isEqualToString:@"\n"]) {
+        if (_returnEvent) {
+            NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
+            [self fireEvent:@"return" params:@{@"value":[textView text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textView text]}}];
+        }
+    }
+    
+    if (_maxLength) {
+        NSUInteger oldLength = [textView.text length];
+        NSUInteger replacementLength = [text length];
+        NSUInteger rangeLength = range.length;
+        NSUInteger newLength = oldLength - rangeLength + replacementLength;
+        return newLength <= [_maxLength integerValue] ;
+    }
+    
+    return YES;
+}
+
+#pragma mark private method
+
+- (BOOL)isDateType
+{
+    if([_inputType isEqualToString:@"date"] || [_inputType isEqualToString:@"time"])
+        return YES;
+    return NO;
+}
+
+- (void)setPlaceholderAttributedString
+{
+    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_placeholderString];
+    [attributedString addAttribute:NSForegroundColorAttributeName value:_placeholderColor range:NSMakeRange(0, _placeholderString.length)];
+    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
+    [self setAttributedPlaceholder:attributedString font:font];
+}
+
+- (void)setTextFont
+{
+    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
+    [self setFont:font];
+}
+
+- (void)setAutofocus:(BOOL)b
+{
+    if (b) {
+        if([self isDateType])
+        {
+            [_datePickerManager show];
+        }else
+        {
+            [self.view becomeFirstResponder];
+        }
+    } else {
+        if([self isDateType])
+        {
+            [_datePickerManager hide];
+        }else
+        {
+            [self.view resignFirstResponder];
+        }
+    }
+}
+
+- (void)setType
+{
+    [self setKeyboardType:UIKeyboardTypeDefault];
+    [self setSecureTextEntry:NO];
+    if ([_inputType isEqualToString:@"text"]) {
+        [self setKeyboardType:UIKeyboardTypeDefault];
+    }else if ([_inputType isEqualToString:@"password"]) {
+        [self setSecureTextEntry:YES];
+    }else if ([_inputType isEqualToString:@"tel"]) {
+        [self setKeyboardType:UIKeyboardTypePhonePad];
+    }else if ([_inputType isEqualToString:@"email"]) {
+        [self setKeyboardType:UIKeyboardTypeEmailAddress];
+    }else if ([_inputType isEqualToString:@"url"]) {
+        [self setKeyboardType:UIKeyboardTypeURL];
+    }else if ([_inputType isEqualToString:@"number"]) {
+        [self setKeyboardType:UIKeyboardTypeNumbersAndPunctuation];
+    }else if ([self isDateType]) {
+        if (!_datePickerManager) {
+            _datePickerManager = [[WXDatePickerManager alloc] init];
+            _datePickerManager.delegate = self;
+        }
+        [_datePickerManager updateDatePicker:_attr];
+    }
+}
+
+- (void)setPadding:(UIEdgeInsets)padding
+{
+    _padding = padding;
+    [self setEditPadding:padding];
+}
+
+- (void)setBorder:(UIEdgeInsets)border
+{
+    _border = border;
+    [self setEditBorder:border];
+}
+
+#pragma mark update touch styles
+-(void)handlePseudoClass
+{
+    NSMutableDictionary *styles = [NSMutableDictionary new];
+    NSMutableDictionary *recordStyles = [NSMutableDictionary new];
+    if(_disabled){
+        recordStyles = [self getPseudoClassStylesByKeys:@[@"disabled"]];
+        [styles addEntriesFromDictionary:recordStyles];
+    }else {
+        recordStyles = [NSMutableDictionary new];
+        recordStyles = [self getPseudoClassStylesByKeys:@[@"enabled"]];
+        [styles addEntriesFromDictionary:recordStyles];
+    }
+    if ([self.view isFirstResponder]){
+        recordStyles = [NSMutableDictionary new];
+        recordStyles = [self getPseudoClassStylesByKeys:@[@"focus"]];
+        [styles addEntriesFromDictionary:recordStyles];
+    }
+    NSString *disabledStr = @"enabled";
+    if (_disabled){
+        disabledStr = @"disabled";
+    }
+    if ([self.view isFirstResponder]) {
+        NSString *focusStr = @"focus";
+        recordStyles = [NSMutableDictionary new];
+        recordStyles = [self getPseudoClassStylesByKeys:@[focusStr,disabledStr]];
+        [styles addEntriesFromDictionary:recordStyles];
+    }
+    [self updatePseudoClassStyles:styles];
+}
+
+#pragma mark keyboard
+- (void)keyboardWasShown:(NSNotification*)notification
+{
+    if(![self.view isFirstResponder]) {
+        return;
+    }
+    CGRect begin = [[[notification userInfo] objectForKey:@"UIKeyboardFrameBeginUserInfoKey"] CGRectValue];
+    
+    CGRect end = [[[notification userInfo] objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
+    if(begin.size.height <= 44) {
+        return;
+    }
+    _keyboardSize = end.size;
+    UIView * rootView = self.weexInstance.rootView;
+    CGRect screenRect = [[UIScreen mainScreen] bounds];
+    CGRect keyboardRect = (CGRect){
+        .origin.x = 0,
+        .origin.y = CGRectGetMaxY(screenRect) - _keyboardSize.height - 54,
+        .size = _keyboardSize
+    };
+    CGRect inputFrame = [self.view.superview convertRect:self.view.frame toView:rootView];
+    if (keyboardRect.origin.y - inputFrame.size.height <= inputFrame.origin.y) {
+        [self setViewMovedUp:YES];
+        self.weexInstance.isRootViewFrozen = YES;
+    }
+    
+    if (_keyboardEvent) {
+        [self fireEvent:@"keyboard" params:@{ @"isShow": @YES }];
+    }
+}
+
+- (void)keyboardWillHide:(NSNotification*)notification
+{
+    if (![self.view isFirstResponder]) {
+        return;
+    }
+    UIView * rootView = self.weexInstance.rootView;
+    if (!CGRectEqualToRect(self.weexInstance.frame, rootView.frame)) {
+        [self setViewMovedUp:NO];
+        self.weexInstance.isRootViewFrozen = NO;
+    }
+    if (_keyboardEvent) {
+        [self fireEvent:@"keyboard" params:@{ @"isShow": @NO }];
+    }
+}
+
+- (void)closeKeyboard
+{
+    [self.view resignFirstResponder];
+}
+
+#pragma mark -reset color
+- (void)resetStyles:(NSArray *)styles
+{
+    if ([styles containsObject:@"color"]) {
+        [self setTextColor:[UIColor blackColor]];
+    }
+    if ([styles containsObject:@"fontSize"]) {
+        _fontSize = WX_TEXT_FONT_SIZE;
+        [self setTextFont];
+    }
+}
+@end
+
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
index 02858da..25a71ba 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
index 2ad100b..f8e9466 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXEmbedComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXEmbedComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h
new file mode 100644
index 0000000..903ddc2
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.h
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <WeexSDK/WeexSDK.h>
+
+@interface WXFooterComponent : WXComponent
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m
new file mode 100644
index 0000000..82e2fdd
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXFooterComponent.m
@@ -0,0 +1,24 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXFooterComponent.h"
+
+@implementation WXFooterComponent
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h
new file mode 100644
index 0000000..16a8451
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.h
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <WeexSDK/WeexSDK.h>
+@class WXHeaderComponent;
+
+@protocol WXHeaderRenderDelegate <NSObject>
+
+- (float)headerWidthForLayout:(WXHeaderComponent *)header;
+
+- (void)headerDidLayout:(WXHeaderComponent *)header;
+
+- (void)headerDidRemove:(WXHeaderComponent *)header;
+
+@end
+
+@interface WXHeaderComponent : WXComponent
+
+@property (nonatomic, weak) id<WXHeaderRenderDelegate> delegate;
+@property (nonatomic, assign, readonly) BOOL isSticky;
+@property (nonatomic, assign, readonly) BOOL keepScrollPosition;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.m
new file mode 100644
index 0000000..dbfe3dc
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Component/WXHeaderComponent.m
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXHeaderComponent.h"
+#import "WXComponent_internal.h"
+
+@implementation WXHeaderComponent
+{
+    BOOL _isUseContainerWidth;
+}
+
+- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+{
+    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
+    
+    if (self) {
+        _async = YES;
+        _isNeedJoinLayoutSystem = NO;
+        _keepScrollPosition = attributes[@"keepScrollPosition"] ? [WXConvert BOOL:attributes[@"keepScrollPosition"]] : NO;
+    }
+    
+    return self;
+}
+
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+    if (attributes[@"keepScrollPosition"]) {
+        _keepScrollPosition = [WXConvert BOOL:attributes[@"keepScrollPosition"]];
+    }
+}
+
+- (BOOL)isSticky
+{
+    return _positionType == WXPositionTypeSticky;
+}
+
+- (void)_frameDidCalculated:(BOOL)isChanged
+{
+    [super _frameDidCalculated:isChanged];
+    
+    if (isChanged) {
+        [self.delegate headerDidLayout:self];
+    }
+}
+
+- (void)_removeFromSupercomponent
+{
+    [super _removeFromSupercomponent];
+    
+    [self.delegate headerDidRemove:self];
+}
+
+- (void)_calculateFrameWithSuperAbsolutePosition:(CGPoint)superAbsolutePosition gatherDirtyComponents:(NSMutableSet<WXComponent *> *)dirtyComponents
+{
+    if (self.delegate && (isUndefined(self.cssNode->style.dimensions[CSS_WIDTH]) || _isUseContainerWidth)) {
+        self.cssNode->style.dimensions[CSS_WIDTH] = [self.delegate headerWidthForLayout:self];
+        //TODO: set _isUseContainerWidth to NO if updateStyles have width
+        _isUseContainerWidth = YES;
+    }
+    
+    if ([self needsLayout]) {
+        layoutNode(self.cssNode, CSS_UNDEFINED, CSS_UNDEFINED, CSS_DIRECTION_INHERIT);
+        if ([WXLog logLevel] >= WXLogLevelDebug) {
+            print_css_node(self.cssNode, CSS_PRINT_LAYOUT | CSS_PRINT_STYLE | CSS_PRINT_CHILDREN);
+        }
+    }
+    
+    [super _calculateFrameWithSuperAbsolutePosition:superAbsolutePosition gatherDirtyComponents:dirtyComponents];
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
index 749bd17..3016645 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.h
@@ -1,13 +1,24 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
 
 @interface WXImageComponent : WXComponent
 
-@end
\ No newline at end of file
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
index afa5ed6..0e9d4e9 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXImageComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXImageComponent.h"
@@ -14,6 +25,8 @@
 #import "WXType.h"
 #import "WXConvert.h"
 #import "WXURLRewriteProtocol.h"
+#import "WXRoundedRect.h"
+#import "UIBezierPath+Weex.h"
 
 @interface WXImageView : UIImageView
 
@@ -94,6 +107,7 @@
             NSString *matchString = [filter substringWithRange:matchRange];
             if (matchString && matchString.length > 0) {
                 _blurRadius = [matchString doubleValue];
+                [self updateImage];
             }
         }
     }
@@ -153,42 +167,37 @@
     imageView.clipsToBounds = YES;
     imageView.exclusiveTouch = YES;
     
+    [self _clipsToBounds];
+    
     [self updateImage];
     
 }
 
-- (WXDisplayBlock)displayBlock
+- (BOOL)needsDrawRect
 {
-    if ([self isViewLoaded]) {
-        // if has a image view, image is setted by image view, displayBlock is not needed
+    if (_isCompositingChild) {
+        return YES;
+    } else {
+        return NO;
+    }
+}
+
+- (UIImage *)drawRect:(CGRect)rect;
+{
+    if (!self.image) {
+        [self updateImage];
         return nil;
     }
     
-    __weak typeof(self) weakSelf = self;
-    return ^UIImage *(CGRect bounds, BOOL(^isCancelled)(void)) {
-        if (isCancelled()) {
-            return nil;
-        }
-        
-        if (!weakSelf.image) {
-            [weakSelf updateImage];
-            return nil;
-        }
-        
-        if (isCancelled && isCancelled()) {
-            return nil;
-        }
-        
-        UIGraphicsBeginImageContextWithOptions(bounds.size, self.layer.opaque, 1.0);
-        
-        [weakSelf.image drawInRect:bounds];
-        
-        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-        
-        UIGraphicsEndImageContext();
-        
-        return image;
-    };
+    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
+
+    WXRadii *radii = borderRect.radii;    
+    if ([radii hasBorderRadius]) {
+        CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
+        UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:rect topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
+        [bezierPath addClip];
+    }
+    return self.image;
 }
 
 - (void)viewWillUnload
@@ -198,6 +207,15 @@
     _image = nil;
 }
 
+- (void)_frameDidCalculated:(BOOL)isChanged
+{
+    [super _frameDidCalculated:isChanged];
+    
+    if ([self isViewLoaded] && isChanged) {
+        [self _clipsToBounds];
+    }
+}
+
 - (void)setImageSrc:(NSString*)src
 {
     if (![src isEqualToString:_imageSrc]) {
@@ -261,6 +279,9 @@
                     ((UIImageView *)strongSelf.view).image = image;
                     weakSelf.imageDownloadFinish = YES;
                     [self readyToRender];
+                } else if (strongSelf->_isCompositingChild) {
+                    strongSelf->_image = image;
+                    weakSelf.imageDownloadFinish = YES;
                 }
             });
         }];
@@ -301,6 +322,10 @@
                         strongSelf.imageDownloadFinish = YES;
                         ((UIImageView *)strongSelf.view).image = image;
                         [strongSelf readyToRender];
+                    } else if (strongSelf->_isCompositingChild) {
+                        strongSelf.imageDownloadFinish = YES;
+                        strongSelf->_image = image;
+                        [strongSelf setNeedsDisplay];
                     }
                 });
             }];
@@ -334,9 +359,24 @@
     return imageLoader;
 }
 
-- (BOOL)_needsDrawBorder
+- (void)_clipsToBounds
 {
-    return NO;
+    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:self.view.bounds topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
+    // here is computed radii, do not use original style
+    WXRadii *radii = borderRect.radii;
+    
+    if ([radii radiusesAreEqual]) {
+        return;
+    }
+    
+    CGFloat topLeft = radii.topLeft, topRight = radii.topRight, bottomLeft = radii.bottomLeft, bottomRight = radii.bottomRight;
+    
+    // clip to border radius
+    UIBezierPath *bezierPath = [UIBezierPath wx_bezierPathWithRoundedRect:self.view.bounds topLeft:topLeft topRight:topRight bottomLeft:bottomLeft bottomRight:bottomRight];
+    
+    CAShapeLayer *shapeLayer = [CAShapeLayer layer];
+    shapeLayer.path = bezierPath.CGPath;
+    self.layer.mask = shapeLayer;
 }
 
 #ifdef UITEST
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
index faeae40..f95080c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
@@ -28,6 +39,14 @@
 @end
 
 
+@protocol WXIndicatorComponentDelegate <NSObject>
+
+-(void)setIndicatorView:(WXIndicatorView *)indicatorView;
+
+@end
+
 @interface WXIndicatorComponent : WXComponent
 
+@property (nonatomic, weak) id<WXIndicatorComponentDelegate> delegate;
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m
index 5b2b858..c9bb13d 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXIndicatorComponent.m
@@ -1,15 +1,24 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXIndicatorComponent.h"
-#import "WXSliderComponent.h"
 #import "WXConvert.h"
-#import "WXSliderNeighborComponent.h"
 #import "WXSDKInstance.h"
 
 @implementation WXIndicatorView
@@ -158,13 +167,13 @@
     _indicatorView.lightColor = _itemSelectedColor;
     _indicatorView.pointSize = _itemSize;
     
-    WXComponent *parent = self.supercomponent;
-    if([parent isKindOfClass:[WXSliderComponent class]] || [parent isKindOfClass:[WXSliderNeighborComponent class]]) {
-        WXSliderComponent *parentSlider = (WXSliderComponent *)parent;
-        [parentSlider setIndicatorView:_indicatorView];
-    }
-    else {
-         NSAssert(NO, @"");
+    
+}
+
+- (void)layoutDidFinish
+{
+    if (self.delegate && [self.delegate respondsToSelector:@selector(setIndicatorView:)]) {
+        [self.delegate setIndicatorView:_indicatorView];
     }
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
index 007f502..f2b75fa 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.h
@@ -1,25 +1,24 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXScrollerComponent.h"
 
-@class WXCellComponent;
-@class WXHeaderComponent;
 @interface WXListComponent : WXScrollerComponent
 
-- (void)cellDidRemove:(WXCellComponent *)cell;
-
-- (void)cellDidLayout:(WXCellComponent *)cell;
-
-- (void)headerDidLayout:(WXHeaderComponent *)header;
-
-- (void)cellDidRendered:(WXCellComponent *)cell;
-
-- (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index;
-
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
index 4ab6b2c..e1a9d54 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXListComponent.m
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXListComponent.h"
 #import "WXCellComponent.h"
+#import "WXHeaderComponent.h"
 #import "WXComponent.h"
 #import "WXComponent_internal.h"
 #import "NSArray+Weex.h"
@@ -52,53 +64,6 @@
 
 @end
 
-@interface WXHeaderComponent : WXComponent
-
-@property (nonatomic, weak) WXListComponent *list;
-
-@end
-
-@implementation WXHeaderComponent
-
-//TODO: header remove->need reload
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    
-    if (self) {
-        _async = YES;
-        _isNeedJoinLayoutSystem = NO;
-    }
-    
-    return self;
-}
-
-- (void)_frameDidCalculated:(BOOL)isChanged
-{
-    [super _frameDidCalculated:isChanged];
-    
-    if (isChanged) {
-        [self.list headerDidLayout:self];
-    }
-}
-
-- (void)_calculateFrameWithSuperAbsolutePosition:(CGPoint)superAbsolutePosition gatherDirtyComponents:(NSMutableSet<WXComponent *> *)dirtyComponents
-{
-    if (isUndefined(self.cssNode->style.dimensions[CSS_WIDTH]) && self.list) {
-        self.cssNode->style.dimensions[CSS_WIDTH] = self.list.scrollerCSSNode->style.dimensions[CSS_WIDTH];
-    }
-    
-    if ([self needsLayout]) {
-        layoutNode(self.cssNode, CSS_UNDEFINED, CSS_UNDEFINED, CSS_DIRECTION_INHERIT);
-        if ([WXLog logLevel] >= WXLogLevelDebug) {
-            print_css_node(self.cssNode, CSS_PRINT_LAYOUT | CSS_PRINT_STYLE | CSS_PRINT_CHILDREN);
-        }
-    }
-    
-    [super _calculateFrameWithSuperAbsolutePosition:superAbsolutePosition gatherDirtyComponents:dirtyComponents];
-}
-
-@end
 
 @interface WXSection : NSObject<NSCopying>
 
@@ -133,7 +98,7 @@
 }
 @end
 
-@interface WXListComponent () <UITableViewDataSource, UITableViewDelegate>
+@interface WXListComponent () <UITableViewDataSource, UITableViewDelegate, WXCellRenderDelegate, WXHeaderRenderDelegate>
 
 @end
 
@@ -145,17 +110,19 @@
     NSMutableArray<WXSection *> *_sections;
     // Only accessed on main thread
     NSMutableArray<WXSection *> *_completedSections;
-    
     NSUInteger _previousLoadMoreRowNumber;
+    
+    BOOL _isUpdating;
+    NSMutableArray<void(^)()> *_updates;
+    NSTimeInterval _reloadInterval;
 }
 
 - (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
 {
     if (self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance]) {
-        
         _sections = [NSMutableArray array];
         _completedSections = [NSMutableArray array];
-        
+        _reloadInterval = attributes[@"reloadInterval"] ? [WXConvert CGFloat:attributes[@"reloadInterval"]]/1000 : 0;
         [self fixFlicker];
     }
     
@@ -196,6 +163,15 @@
     _tableView.dataSource = nil;
 }
 
+- (void)updateAttributes:(NSDictionary *)attributes
+{
+    [super updateAttributes:attributes];
+    
+    if (attributes[@"reloadInterval"]) {
+        _reloadInterval = [WXConvert CGFloat:attributes[@"reloadInterval"]] / 1000;
+    }
+}
+
 - (void)setContentSize:(CGSize)contentSize
 {
     // Do Nothing
@@ -231,7 +207,7 @@
     contentOffsetY += cellRect.origin.y;
     contentOffsetY += offset * self.weexInstance.pixelScaleFactor;
     
-    if (contentOffsetY > _tableView.contentSize.height - _tableView.frame.size.height) {
+    if (_tableView.contentSize.height >= _tableView.frame.size.height && contentOffsetY > _tableView.contentSize.height - _tableView.frame.size.height) {
         contentOffset.y = _tableView.contentSize.height - _tableView.frame.size.height;
     } else {
         contentOffset.y = contentOffsetY;
@@ -246,9 +222,9 @@
 - (void)_insertSubcomponent:(WXComponent *)subcomponent atIndex:(NSInteger)index
 {
     if ([subcomponent isKindOfClass:[WXCellComponent class]]) {
-        ((WXCellComponent *)subcomponent).list = self;
+        ((WXCellComponent *)subcomponent).delegate = self;
     } else if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-        ((WXHeaderComponent *)subcomponent).list = self;
+        ((WXHeaderComponent *)subcomponent).delegate = self;
     } else if (![subcomponent isKindOfClass:[WXRefreshComponent class]]
                && ![subcomponent isKindOfClass:[WXLoadingComponent class]]
                && subcomponent->_positionType != WXPositionTypeFixed) {
@@ -265,23 +241,61 @@
     }
     
     NSIndexPath *indexPath = [self indexPathForSubIndex:index];
-    if (_sections.count <= indexPath.section) {
-        WXSection *section = [WXSection new];
+    
+    if ([subcomponent isKindOfClass:[WXHeaderComponent class]] || _sections.count <= indexPath.section) {
+        // conditions to insert section: insert a header or insert first cell of table view
+        // this will be updated by recycler's update controller in the future
+        WXSection *insertSection = [WXSection new];
+        BOOL keepScrollPosition = NO;
         if ([subcomponent isKindOfClass:[WXHeaderComponent class]]) {
-            section.header = (WXHeaderComponent*)subcomponent;
+            WXHeaderComponent *header = (WXHeaderComponent*)subcomponent;
+            insertSection.header = header;
+            keepScrollPosition = header.keepScrollPosition;
         }
-        //TODO: consider insert header at middle
-        [_sections addObject:section];
-        NSUInteger index = [_sections indexOfObject:section];
-        NSIndexSet *indexSet = [NSIndexSet indexSetWithIndex:index];
-        WXSection *completedSection = [section copy];
+        
+        NSUInteger insertIndex = indexPath.section;
+        WXSection *reloadSection;
+        if (insertIndex > 0 && insertIndex <= _sections.count
+            && [subcomponent isKindOfClass:[WXHeaderComponent class]]) {
+            // insert a header in the middle, one section may divide into two
+            // so the original section need to be reloaded
+            NSIndexPath *indexPathBeforeHeader = [self indexPathForSubIndex:index - 1];
+            if (_sections[insertIndex - 1].rows.count != 0 && indexPathBeforeHeader.row < _sections[insertIndex - 1].rows.count - 1) {
+                reloadSection = _sections[insertIndex - 1];
+                NSArray *rowsToSeparate = reloadSection.rows;
+                insertSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(indexPathBeforeHeader.row + 1, rowsToSeparate.count - indexPathBeforeHeader.row - 1)] mutableCopy];
+                reloadSection.rows = [[rowsToSeparate subarrayWithRange:NSMakeRange(0, indexPathBeforeHeader.row + 1)]  mutableCopy];
+            }
+        }
+    
+        [_sections insertObject:insertSection atIndex:insertIndex];
+        WXSection *completedInsertSection = [insertSection copy];
+        WXSection *completedReloadSection;
+        if (reloadSection) {
+            completedReloadSection = [reloadSection copy];
+        }
         
         [self.weexInstance.componentManager _addUITask:^{
-            [_completedSections addObject:completedSection];
-            WXLogDebug(@"Insert section:%ld",  (unsigned long)[_completedSections indexOfObject:completedSection]);
+            WXLogDebug(@"Insert section:%ld", (unsigned long)insertIndex);
+            
             [UIView performWithoutAnimation:^{
-                [_tableView insertSections:indexSet withRowAnimation:UITableViewRowAnimationNone];
+                [_tableView beginUpdates];
+                
+                [_completedSections insertObject:completedInsertSection atIndex:insertIndex];
+                if (completedReloadSection) {
+                    WXLogDebug(@"Reload section:%lu", insertIndex - 1);
+                    _completedSections[insertIndex - 1] = completedReloadSection;
+                }
+                
+                [self _insertTableViewSectionAtIndex:insertIndex keepScrollPosition:keepScrollPosition animation:UITableViewRowAnimationNone];
+                
+                if (completedReloadSection) {
+                    [_tableView reloadSections:[NSIndexSet indexSetWithIndex:insertIndex - 1] withRowAnimation:UITableViewRowAnimationNone];
+                }
+                
+                [_tableView endUpdates];
             }];
+            
         }];
     }
 }
@@ -295,16 +309,75 @@
     }
 }
 
+#pragma mark - WXHeaderRenderDelegate
+
+- (float)headerWidthForLayout:(WXHeaderComponent *)cell
+{
+    return self.scrollerCSSNode->style.dimensions[CSS_WIDTH];
+}
+
 - (void)headerDidLayout:(WXHeaderComponent *)header
 {
     [self.weexInstance.componentManager _addUITask:^{
         // trigger section header update
-        [_tableView beginUpdates];
-        [_tableView endUpdates];
+        [UIView performWithoutAnimation:^{
+            [_tableView beginUpdates];
+            
+            NSUInteger reloadIndex = [self indexForHeader:header sections:_completedSections];
+            [_tableView reloadSections:[NSIndexSet indexSetWithIndex:reloadIndex] withRowAnimation:UITableViewRowAnimationNone];
+            
+            [_tableView endUpdates];
+        }];
     }];
-    
 }
 
+- (void)headerDidRemove:(WXHeaderComponent *)header
+{
+    NSUInteger deleteIndex = [self indexForHeader:header sections:_sections];
+    // this will be updated by recycler's update controller in the future
+    WXSection *deleteSection = _sections[deleteIndex];
+    WXSection *reloadSection;
+    if (deleteIndex > 0 && deleteSection.rows.count > 0) {
+        // delete a header in the middle, two sections merge into one
+        // so the one section need to be reloaded
+        reloadSection = _sections[deleteIndex - 1];
+        reloadSection.rows = [[reloadSection.rows arrayByAddingObjectsFromArray:deleteSection.rows] mutableCopy];
+    }
+    
+    [_sections removeObjectAtIndex:deleteIndex];
+    WXSection *completedReloadSection;
+    if (reloadSection) {
+        completedReloadSection = [reloadSection copy];
+    }
+    BOOL keepScrollPosition = header.keepScrollPosition;
+    
+    [self.weexInstance.componentManager _addUITask:^{
+        WXLogDebug(@"delete section:%ld", deleteIndex);
+        [_completedSections removeObjectAtIndex:deleteIndex];
+        if (completedReloadSection) {
+            WXLogDebug(@"Reload section:%ld", deleteIndex - 1);
+            _completedSections[deleteIndex - 1] = completedReloadSection;
+        }
+        
+        [UIView performWithoutAnimation:^{
+            [_tableView beginUpdates];
+            [self _deleteTableViewSectionAtIndex:deleteIndex keepScrollPosition:keepScrollPosition animation:UITableViewRowAnimationNone];
+            if (completedReloadSection) {
+                [_tableView reloadSections:[NSIndexSet indexSetWithIndex:deleteIndex - 1] withRowAnimation:UITableViewRowAnimationNone];
+            }
+            
+            [_tableView endUpdates];
+        }];
+        
+    }];
+}
+
+#pragma mark - WXCellRenderDelegate
+
+- (float)containerWidthForLayout:(WXCellComponent *)cell
+{
+    return self.scrollerCSSNode->style.dimensions[CSS_WIDTH];
+}
 
 - (void)cellDidRemove:(WXCellComponent *)cell
 {
@@ -319,12 +392,10 @@
         WXLogDebug(@"Delete cell:%@ at indexPath:%@", cell.ref, indexPath);
         if (cell.deleteAnimation == UITableViewRowAnimationNone) {
             [UIView performWithoutAnimation:^{
-                [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
-                [self handleAppear];
+                [self _deleteTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:UITableViewRowAnimationNone];
             }];
         } else {
-            [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:cell.deleteAnimation];
-            [self handleAppear];
+            [self _deleteTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:cell.deleteAnimation];
         }
     }];
 }
@@ -343,6 +414,10 @@
     WXAssert(section, @"no section found for section number:%ld", sectionNum);
     NSMutableArray *completedSections;
     BOOL isReload = [section.rows containsObject:cell];
+    if (!isReload && row > [section.rows count]) {
+        // protect crash when row out of bounds
+        return ;
+    }
     if (!isReload) {
         [section.rows insertObject:cell atIndex:row];
         // deep copy
@@ -355,12 +430,10 @@
             _completedSections = completedSections;
             if (cell.insertAnimation == UITableViewRowAnimationNone) {
                 [UIView performWithoutAnimation:^{
-                    [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];
-                    [self handleAppear];
+                    [self _insertTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:UITableViewRowAnimationNone];
                 }];
             } else {
-                [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:cell.insertAnimation];
-                [self handleAppear];
+                [self _insertTableViewCellAtIndexPath:indexPath keepScrollPosition:cell.keepScrollPosition animation:cell.insertAnimation];
             }
         } else {
             WXLogInfo(@"Reload cell:%@ at indexPath:%@", cell.ref, indexPath);
@@ -397,7 +470,6 @@
         CGRect renderRect = [_tableView convertRect:cellRect toView:self.weexInstance.rootView];
         self.weexInstance.onRenderProgress(renderRect);
     }
-
 }
 
 - (void)cell:(WXCellComponent *)cell didMoveToIndex:(NSUInteger)index
@@ -410,17 +482,52 @@
     [self insertCell:cell forIndexPath:toIndexPath withSections:_sections];
     
     [self.weexInstance.componentManager _addUITask:^{
-        [self removeCellForIndexPath:fromIndexPath withSections:_completedSections];
-        [self insertCell:cell forIndexPath:toIndexPath withSections:_completedSections];
-        [UIView performWithoutAnimation:^{
-            [_tableView beginUpdates];
-            [_tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
-            [self handleAppear];
-            [_tableView endUpdates];
-        }];
+        if (_reloadInterval > 0) {
+            // use [UITableView reloadData] to do batch updates, will move to recycler's update controller
+            __weak typeof(self) weakSelf = self;
+            if (!_updates) {
+                _updates = [NSMutableArray array];
+            }
+            [_updates addObject:^{
+                __strong typeof(weakSelf) strongSelf = weakSelf;
+                [strongSelf removeCellForIndexPath:fromIndexPath withSections:strongSelf->_completedSections];
+                [strongSelf insertCell:cell forIndexPath:toIndexPath withSections:strongSelf->_completedSections];
+            }];
+            
+            [self checkReloadData];
+        } else {
+            [self removeCellForIndexPath:fromIndexPath withSections:_completedSections];
+            [self insertCell:cell forIndexPath:toIndexPath withSections:_completedSections];
+            [UIView performWithoutAnimation:^{
+                [_tableView beginUpdates];
+                [_tableView moveRowAtIndexPath:fromIndexPath toIndexPath:toIndexPath];
+                [self handleAppear];
+                [_tableView endUpdates];
+            }];
+        }
     }];
 }
 
+- (void)checkReloadData
+{
+    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(_reloadInterval * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+        if (_isUpdating || _updates.count == 0) {
+            return ;
+        }
+        
+        _isUpdating = YES;
+        NSArray *updates = [_updates copy];
+        [_updates removeAllObjects];
+        for (void(^update)() in updates) {
+            update();
+        }
+        [_tableView reloadData];
+        _isUpdating = NO;
+        
+        [self checkReloadData];
+    });
+}
+
 - (void)addStickyComponent:(WXComponent *)sticky
 {
     
@@ -515,6 +622,8 @@
     
     [cellView.contentView addSubview:cell.view];
     
+    [cellView setAccessibilityIdentifier:cell.view.accessibilityIdentifier];
+    
     WXLogDebug(@"Created cell:%@ view:%@ cellView:%@ at indexPath:%@", cell.ref, cell.view, cellView, indexPath);
     return cellView;
 }
@@ -652,6 +761,82 @@
     return [NSIndexPath indexPathForRow:row inSection:section];
 }
 
+- (void)_performUpdates:(void(^)())updates withKeepScrollPosition:(BOOL)keepScrollPosition adjustmentBlock:(CGFloat(^)(NSIndexPath *topVisibleCell))adjustmentBlock
+{
+    CGFloat adjustment = 0;
+    
+    // keep the scroll position when inserting or deleting sections/rows by adjusting the content offset
+    if (keepScrollPosition) {
+        NSIndexPath *top = _tableView.indexPathsForVisibleRows.firstObject;
+        adjustment = adjustmentBlock(top);
+    }
+    
+    updates();
+    
+    if (keepScrollPosition) {
+        CGPoint afterContentOffset = _tableView.contentOffset;
+        CGPoint newContentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + adjustment);
+        _tableView.contentOffset = newContentOffset;
+    }
+    
+    [self handleAppear];
+}
+
+- (void)_insertTableViewSectionAtIndex:(NSUInteger)section keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
+{
+    [self _performUpdates:^{
+        [_tableView insertSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:animation];
+    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
+        if (section <= top.section) {
+            return [self tableView:_tableView heightForHeaderInSection:section];
+        } else {
+            return 0.0;
+        }
+    }];
+}
+
+- (void)_deleteTableViewSectionAtIndex:(NSUInteger)section keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
+{
+    [self _performUpdates:^{
+        [_tableView deleteSections:[NSIndexSet indexSetWithIndex:section] withRowAnimation:animation];
+    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
+        if (section <= top.section) {
+            return [self tableView:_tableView heightForHeaderInSection:section];
+        } else {
+            return 0.0;
+        }
+    }];
+}
+
+- (void)_insertTableViewCellAtIndexPath:(NSIndexPath *)indexPath keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
+{
+    [self _performUpdates:^{
+        [_tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:animation];
+    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
+        if ([indexPath compare:top] <= 0) {
+            return [self tableView:_tableView heightForRowAtIndexPath:indexPath];
+        } else {
+            return 0.0;
+        }
+    }];
+}
+
+- (void)_deleteTableViewCellAtIndexPath:(NSIndexPath *)indexPath keepScrollPosition:(BOOL)keepScrollPosition animation:(UITableViewRowAnimation)animation
+{
+    if (!indexPath) {
+        return ;
+    }
+    [self _performUpdates:^{
+        [_tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:animation];
+    } withKeepScrollPosition:keepScrollPosition adjustmentBlock:^CGFloat(NSIndexPath *top) {
+        if ([indexPath compare:top] <= 0) {
+            return [self tableView:_tableView heightForRowAtIndexPath:indexPath];
+        } else {
+            return 0.0;
+        }
+    }];
+}
+
 - (void)fixFlicker
 {
     static dispatch_once_t onceToken;
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
index 6a78b04..daafa1e 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
@@ -14,4 +25,4 @@
 - (void)loading;
 - (BOOL)displayState;
 
-@end
\ No newline at end of file
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.m
index 88a75ae..66bf08c 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXLoadingComponent.m
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
  /**
  * Created by Weex.
  * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
@@ -70,19 +88,6 @@
     if (!_displayState) {
         [_indicator.view setHidden:YES];
     }
-    [self.view setFrame: (CGRect){
-        .size = self.calculatedFrame.size,
-        .origin.x = self.calculatedFrame.origin.x,
-        .origin.y = self.view.frame.origin.y + CGRectGetHeight(self.calculatedFrame)
-    }];
-}
-
-- (void)layoutDidFinish {
-    [self.view setFrame: (CGRect){
-        .size = self.calculatedFrame.size,
-        .origin.x = self.calculatedFrame.origin.x,
-        .origin.y = self.view.frame.origin.y + CGRectGetHeight(self.calculatedFrame)
-    }];
 }
 
 - (void)addEvent:(NSString *)eventName
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h b/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
index a8017c8..1329284 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m b/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m
index fc6cff5..3affb2b 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXLoadingIndicator.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXLoadingIndicator.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
index 0081f31..a2c2b31 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.h
@@ -1,16 +1,27 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
 
-#define  DISTANCE_Y             @"dy"
-#define  PULLING_DISTANCE       @"pullingDistance"
-#define  VIEW_HEIGHT            @"viewHeight"
+#define  REFRESH_DISTANCE_Y                 @"dy"
+#define  REFRESH_PULLINGDISTANCE            @"pullingDistance"
+#define  REFRESH_VIEWHEIGHT              @"viewHeight"
 
 @interface WXRefreshComponent : WXComponent
 
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.m
index c60bbe5..67d2602 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXRefreshComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXRefreshComponent.h"
@@ -48,14 +59,19 @@
 - (void)viewDidLoad
 {
      _initFinished = YES;
+    
+    if (!_displayState) {
+        [_indicator.view setHidden:YES];
+    }
+}
+
+- (void)layoutDidFinish
+{
     [self.view setFrame: (CGRect) {
         .size = self.calculatedFrame.size,
         .origin.x = self.calculatedFrame.origin.x,
         .origin.y = self.view.frame.origin.y - CGRectGetHeight(self.calculatedFrame)
     }];
-    if (!_displayState) {
-        [_indicator.view setHidden:YES];
-    }
 }
 
 - (void)viewWillUnload
@@ -141,6 +157,7 @@
         [_indicator stop];
     }
     [scrollerProtocol setContentOffset:offset animated:YES];
+  
 }
 
 - (BOOL)displayState
@@ -148,10 +165,4 @@
     return _displayState;
 }
 
-- (void)setFrame:(CGRect)frame
-{
-    CGRect rect = frame;
-    rect.origin.y = 0 - frame.size.height;
-}
-
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
index 248d03a..39bf0d7 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXScrollerProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
index c418dc5..65987aa 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXScrollerComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXScrollerComponent.h"
@@ -318,6 +329,7 @@
 - (void)scrollToComponent:(WXComponent *)component withOffset:(CGFloat)offset animated:(BOOL)animated
 {
     UIScrollView *scrollView = (UIScrollView *)self.view;
+
     CGPoint contentOffset = scrollView.contentOffset;
     CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
     
@@ -325,7 +337,7 @@
         CGFloat contentOffetX = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].x;
         contentOffetX += offset * scaleFactor;
         
-        if (contentOffetX > scrollView.contentSize.width - scrollView.frame.size.width) {
+        if (scrollView.contentSize.width >= scrollView.frame.size.width && contentOffetX > scrollView.contentSize.width - scrollView.frame.size.width) {
             contentOffset.x = scrollView.contentSize.width - scrollView.frame.size.width;
         } else {
             contentOffset.x = contentOffetX;
@@ -334,7 +346,7 @@
         CGFloat contentOffetY = [component.supercomponent.view convertPoint:component.view.frame.origin toView:self.view].y;
         contentOffetY += offset * scaleFactor;
         
-        if (contentOffetY > scrollView.contentSize.height - scrollView.frame.size.height) {
+        if (scrollView.contentSize.height >= scrollView.frame.size.height && contentOffetY > scrollView.contentSize.height - scrollView.frame.size.height) {
             contentOffset.y = scrollView.contentSize.height - scrollView.frame.size.height;
         } else {
             contentOffset.y = contentOffetY;
@@ -423,26 +435,27 @@
         _direction = @"down";
     } else if(_lastContentOffset.y < scrollView.contentOffset.y) {
         _direction = @"up";
+        [self handleLoadMore];
     }
-    if (scrollView.dragging) {
-        [_refreshComponent pullingdown:@{
-            DISTANCE_Y: @(fabs(scrollView.contentOffset.y - _lastContentOffset.y)),
-            PULLING_DISTANCE: @(scrollView.contentOffset.y),
-            @"type":@"pullingdown"
-            }];
-    }
+   
     _lastContentOffset = scrollView.contentOffset;
+    
+    CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
+    [_refreshComponent pullingdown:@{
+             REFRESH_DISTANCE_Y: @(fabs((scrollView.contentOffset.y - _lastContentOffset.y)/scaleFactor)),
+             REFRESH_VIEWHEIGHT: @(_refreshComponent.view.frame.size.height/scaleFactor),
+             REFRESH_PULLINGDISTANCE: @(scrollView.contentOffset.y/scaleFactor),
+             @"type":@"pullingdown"
+    }];
 
     // check sticky
     [self adjustSticky];
-    [self handleLoadMore];
     [self handleAppear];
     
     if (self.onScroll) {
         self.onScroll(scrollView);
     }
     if (_scrollEvent) {
-        CGFloat scaleFactor = self.weexInstance.pixelScaleFactor;
         NSDictionary *contentSizeData = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithFloat:scrollView.contentSize.width / scaleFactor],@"width",[NSNumber numberWithFloat:scrollView.contentSize.height / scaleFactor],@"height", nil];
         //contentOffset values are replaced by (-contentOffset.x,-contentOffset.y) ,in order to be consistent with Android client.
         NSDictionary *contentOffsetData = [[NSDictionary alloc] initWithObjectsAndKeys:[NSNumber numberWithFloat:-scrollView.contentOffset.x / scaleFactor],@"x",[NSNumber numberWithFloat:-scrollView.contentOffset.y / scaleFactor],@"y", nil];
@@ -462,12 +475,15 @@
 - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
 {
     UIEdgeInsets inset = [scrollView contentInset];
-    if ([_refreshComponent displayState]) {
-        inset.top = _refreshComponent.view.frame.size.height;
-    }
-    else {
-        inset.top = 0;
-    }
+    
+//  currently only set contentInset when loading
+//    if ([_refreshComponent displayState]) {
+//        inset.top = _refreshComponent.view.frame.size.height;
+//    }
+//    else {
+//        inset.top = 0;
+//    }
+    
     if ([_loadingComponent displayState]) {
         inset.bottom = _loadingComponent.view.frame.size.height;
     } else {
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.h
index 6a223e3..9d5071b 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
index b79844d..1077bc8 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSliderComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSliderComponent.h"
@@ -20,8 +31,9 @@
 
 - (void)sliderView:(WXSliderView *)sliderView sliderViewDidScroll:(UIScrollView *)scrollView;
 - (void)sliderView:(WXSliderView *)sliderView didScrollToItemAtIndex:(NSInteger)index;
-- (void)sliderView:(WXSliderView *)sliderView scrollViewDidStartScroll:(UIScrollView *)scrollView;
-- (void)sliderView:(WXSliderView *)sliderView scrollViewDidStopScroll:(UIScrollView *)scrollView;
+
+@optional
+- (void)sliderView:(WXSliderView *)sliderView scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView;
 
 @end
 
@@ -33,12 +45,12 @@
 @property (nonatomic, strong) UIScrollView *scrollView;
 @property (nonatomic, strong) NSMutableArray *itemViews;
 @property (nonatomic, assign) NSInteger currentIndex;
-@property (nonatomic, assign) BOOL isStartScroll;
 
 - (UIScrollView *)scrollView;
 - (void)insertItemView:(UIView *)view atIndex:(NSInteger)index;
 - (void)removeItemView:(UIView *)view;
 - (void)scroll2ItemView:(NSInteger)index animated:(BOOL)animated;
+- (void)layoutItemViews;
 - (void)loadData;
 
 @end
@@ -72,7 +84,7 @@
     if (_scrollView) {
         _scrollView.delegate = nil;
     }
-    [NSObject cancelPreviousPerformRequestsWithTarget:self];
+    //[NSObject cancelPreviousPerformRequestsWithTarget:self];
 }
 
 - (void)setIndicator:(WXIndicatorView *)indicator
@@ -157,6 +169,11 @@
     }
 }
 
+- (void)layoutItemViews {
+    [self _resortItemViews];
+    [self _resetItemFrames];
+}
+
 - (void)loadData
 {
     self.scrollView.frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
@@ -168,8 +185,7 @@
 #pragma mark Private Methods
 
 - (void)_configSubViews {
-    [self _resortItemViews];
-    [self _resetItemFrames];
+    [self layoutItemViews];
     [self _scroll2Center];
     [self _resetItemCountLessThanOrEqualToTwo];
     [self setNeedsLayout];
@@ -233,7 +249,8 @@
 {
     if (self.itemViews.count > 2) {
         UIView *itemView = [self.itemViews objectAtIndex:[self _centerItemIndex]];
-        [self.scrollView scrollRectToVisible:itemView.frame animated:NO];
+        //[self.scrollView scrollRectToVisible:itemView.frame animated:NO];
+        [self.scrollView setContentOffset:CGPointMake(itemView.frame.origin.x, itemView.frame.origin.y) animated:NO];
     }
 }
 
@@ -291,9 +308,6 @@
     if (self.delegate && [self.delegate respondsToSelector:@selector(sliderView:sliderViewDidScroll:)]) {
         [self.delegate sliderView:self sliderViewDidScroll:self.scrollView];
     }
-    [NSObject cancelPreviousPerformRequestsWithTarget:self];
-    //ensure that the end of scroll is fired.
-    [self performSelector:@selector(scrollViewDidEndScrollingAnimation:) withObject:nil afterDelay:0.3];
 }
 
 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
@@ -313,15 +327,15 @@
 // called when setContentOffset/scrollRectVisible:animated: finishes. called from the performselector in scrollViewDidScroll if not animating.
 -(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
 {
-    if (self.delegate && [self.delegate respondsToSelector:@selector(sliderView:scrollViewDidStopScroll:)]) {
-        [self.delegate sliderView:self scrollViewDidStopScroll:scrollView];
+    if (self.delegate && [self.delegate respondsToSelector:@selector(sliderView:scrollViewDidEndScrollingAnimation:)]) {
+        [self.delegate sliderView:self scrollViewDidEndScrollingAnimation:scrollView];
     }
 }
 
 
 @end
 
-@interface WXSliderComponent ()<WXSliderViewDelegate>
+@interface WXSliderComponent () <WXSliderViewDelegate,WXIndicatorComponentDelegate>
 
 @property (nonatomic, strong) WXSliderView *sliderView;
 @property (nonatomic, strong) NSTimer *autoTimer;
@@ -333,10 +347,6 @@
 @property (nonatomic, assign) CGFloat offsetXAccuracy;
 @property (nonatomic, assign) BOOL  sliderChangeEvent;
 @property (nonatomic, assign) BOOL  sliderScrollEvent;
-@property (nonatomic, assign) BOOL  sliderScrollStartEvent;
-@property (nonatomic, assign) BOOL  sliderScrollStopEvent;
-@property (nonatomic, assign) BOOL  sliderScrollCancelEvent;
-@property (nonatomic, assign) BOOL  sliderStartEventFired;
 @property (nonatomic, strong) NSMutableArray *childrenView;
 @property (nonatomic, assign) BOOL scrollable;
 
@@ -371,7 +381,7 @@
         }
         
         _scrollable = attributes[@"scrollable"] ? [WXConvert BOOL:attributes[@"scrollable"]] : YES;
-
+        
         if (attributes[@"offsetXAccuracy"]) {
             _offsetXAccuracy = [WXConvert CGFloat:attributes[@"offsetXAccuracy"]];
         }
@@ -437,6 +447,7 @@
         
         WXSliderView *sliderView = (WXSliderView *)self.view;
         if ([view isKindOfClass:[WXIndicatorView class]]) {
+            ((WXIndicatorComponent *)subcomponent).delegate = self;
             [sliderView addSubview:view];
             return;
         }
@@ -492,14 +503,15 @@
         
         if (_autoPlay) {
             [self _startAutoPlayTimer];
-        } 
+        }
     }
     
     if (attributes[@"index"]) {
         _index = [attributes[@"index"] integerValue];
         
         self.currentIndex = _index;
-        [_sliderView scroll2ItemView:self.currentIndex animated:YES];
+        self.sliderView.currentIndex = _index;
+        [self.sliderView layoutItemViews];
     }
     
     if (attributes[@"scrollable"]) {
@@ -520,15 +532,6 @@
     if ([eventName isEqualToString:@"scroll"]) {
         _sliderScrollEvent = YES;
     }
-    if ([eventName isEqualToString:@"scrollstart"]) {
-        _sliderScrollStartEvent = YES;
-    }
-    if ([eventName isEqualToString:@"scrollstop"]) {
-        _sliderScrollStopEvent = YES;
-    }
-    if ([eventName isEqualToString:@"dragcancel"]) {
-        _sliderScrollCancelEvent = YES;
-    }
 }
 
 - (void)removeEvent:(NSString *)eventName
@@ -539,18 +542,9 @@
     if ([eventName isEqualToString:@"scroll"]) {
         _sliderScrollEvent = NO;
     }
-    if ([eventName isEqualToString:@"scrollstart"]) {
-        _sliderScrollStartEvent = NO;
-    }
-    if ([eventName isEqualToString:@"scrollstop"]) {
-        _sliderScrollStopEvent = NO;
-    }
-    if ([eventName isEqualToString:@"dragcancel"]) {
-        _sliderScrollCancelEvent = NO;
-    }
 }
 
-#pragma mark Public Methods
+#pragma mark WXIndicatorComponentDelegate Methods
 
 -(void)setIndicatorView:(WXIndicatorView *)indicatorView
 {
@@ -582,7 +576,7 @@
 - (void)_autoPlayOnTimer
 {
     WXSliderView *sliderView = (WXSliderView *)self.view;
-
+    
     int indicatorCnt = 0;
     for (int i = 0; i < [self.childrenView count]; ++i) {
         if ([self.childrenView[i] isKindOfClass:[WXIndicatorView class]]) {
@@ -612,9 +606,6 @@
             [self fireEvent:@"scroll" params:@{@"offsetXRatio":[NSNumber numberWithFloat:offsetXRatio]} domChanges:nil];
         }
     }
-    if (!_sliderStartEventFired) {
-        [self sliderView:sliderView scrollViewDidStartScroll:scrollView];
-    }
 }
 
 - (void)sliderView:(WXSliderView *)sliderView didScrollToItemAtIndex:(NSInteger)index
@@ -625,29 +616,6 @@
     }
 }
 
-- (void)sliderView:(WXSliderView *)sliderView scrollViewDidStartScroll:(UIScrollView *)scrollView
-{
-    if (_sliderScrollStartEvent) {
-        [self fireEvent:@"scrollstart" params:nil domChanges:nil];
-    }
-    _sliderStartEventFired = YES;
-}
-
-- (void)sliderView:(WXSliderView *)sliderView scrollViewDidStopScroll:(UIScrollView *)scrollView
-{
-    if (_sliderScrollStopEvent) {
-        [self fireEvent:@"scrollstop" params:nil domChanges:nil];
-    }
-    _sliderStartEventFired = NO;
-}
-
-- (void)sliderView:(WXSliderView *)sliderView scrollViewDidCancelDraging:(UIScrollView *)scrollView
-{
-    if (_sliderScrollCancelEvent) {
-        [self fireEvent:@"dragcancel" params:nil domChanges:nil];
-    }
-}
-
 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
 {
     [self _stopAutoPlayTimer];
@@ -658,13 +626,6 @@
     if (_autoPlay) {
         [self _startAutoPlayTimer];
     }
-    //DidEndDragging and index is not changed mean that cancel dragging
-    CGFloat width = scrollView.frame.size.width;
-    CGFloat XDeviation = scrollView.frame.origin.x - (scrollView.contentOffset.x - width);
-    CGFloat offsetXRatio = (XDeviation / width);
-    if (fabs(offsetXRatio) < 0.5) {
-        [self sliderView:self.sliderView scrollViewDidCancelDraging:self.sliderView.scrollView];
-    }
 }
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
index eb350d9..81b75fa 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -28,6 +39,7 @@
 };
 
 @class WXSliderNeighborView;
+@class WXIndicatorView;
 
 @protocol WXSliderNeighborDelegate <NSObject>
 @optional
@@ -64,5 +76,7 @@
 
 @interface WXSliderNeighborComponent : WXComponent<WXSliderNeighborDelegate, WXSliderNeighborDataSource>
 
+- (void)setIndicatorView:(WXIndicatorView *_Nonnull)indicatorView;
+
 @end
 
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.m
index ccc47f9..17bcda3 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSliderNeighborComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSliderNeighborComponent.h"
@@ -1377,7 +1388,7 @@
 
 @end
 
-@interface WXSliderNeighborComponent() {
+@interface WXSliderNeighborComponent () <WXIndicatorComponentDelegate>{
     WXPixelType neighborSpace;
     CGFloat neighborAlpha;
     CGFloat neighborScale;
@@ -1487,6 +1498,7 @@
         
         WXSliderNeighborView *sliderView = (WXSliderNeighborView *)self.view;
         if ([view isKindOfClass:[WXIndicatorView class]]) {
+            ((WXIndicatorComponent *)subcomponent).delegate = self;
             [sliderView addSubview:view];
             return;
         }
@@ -1586,6 +1598,8 @@
     }
 }
 
+#pragma mark WXIndicatorComponentDelegate Methods
+
 - (void)setIndicatorView:(WXIndicatorView *)indicatorView
 {
     NSAssert(_sliderView, @"");
@@ -1748,7 +1762,6 @@
         __strong typeof(self) strongSelf = weakSelf;
         if (strongSelf) {
             currentView.alpha = 1.0;
-            
             if (fabs(strongSelf->currentItemScale) > CGFLOAT_MIN) {
                 transfrom = CGAffineTransformConcat(transfrom,CGAffineTransformMakeScale(strongSelf->currentItemScale, strongSelf->currentItemScale));
             }
@@ -1758,7 +1771,7 @@
                 strongSelf->neighborScale = DEFAULT_NEIGHBOR_ITEM_SCALE;
             }
             
-            CGFloat tx = 0.5*_itemRect.size.width*((1-self->neighborScale)+(1-0.9))-self->neighborSpace;
+            CGFloat tx = 0.5*_itemRect.size.width*((1-self->neighborScale)+(1-self->currentItemScale))-self->neighborSpace;
             transfrom = CGAffineTransformConcat(transfrom, CGAffineTransformMakeScale(strongSelf->neighborScale, strongSelf->neighborScale));
             nextView.transform = CGAffineTransformConcat(transfrom,  CGAffineTransformMakeTranslation(-tx, 0));
             lastView.transform = CGAffineTransformConcat(transfrom,  CGAffineTransformMakeTranslation(tx, 0));
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
index f3f0634..53ec72a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.m
index e673797..6ab6ef4 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXSwitchComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSwitchComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
index fbaa7f9..1bd51d8 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.h
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
-#import "WXComponent.h"
+#import <Foundation/Foundation.h>
+#import "WXEditComponent.h"
 
-@interface WXTextAreaComponent : WXComponent<UITextViewDelegate>
+@interface WXTextAreaComponent : WXEditComponent
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
index 4245174..36eb2ad 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextAreaComponent.m
@@ -1,382 +1,66 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXTextAreaComponent.h"
 #import "WXUtility.h"
-#import "WXConvert.h"
-#import "WXComponent_internal.h"
-#import "WXView.h"
-#import "WXAssert.h"
-#import "WXSDKInstance.h"
-#import "WXComponent+PseudoClassManagement.h"
+#import "WXComponent+Layout.h"
 
+#define CorrectX 4 //textview fill text 4 pixel from left. so placeholderlabel have 4 pixel too
+#define CorrectY 8 // textview fill text 8 pixel from top
 typedef UITextView WXTextAreaView;
 
 @interface WXTextAreaComponent()
+
 @property (nonatomic, strong) WXTextAreaView *textView;
-@property (nonatomic, strong) UILabel *placeholder;
-
-//attribute
-@property (nonatomic, strong) UIColor *placeholderColor;
-@property (nonatomic, strong) NSString *placeholderString;
-@property (nonatomic, strong) UILabel *placeHolderLabel;
-@property (nonatomic) BOOL autofocus;
-@property (nonatomic) BOOL disabled;
-@property (nonatomic, strong)NSString *textValue;
-@property(nonatomic) UIReturnKeyType returnKeyType;
 @property (nonatomic) NSUInteger rows;
-//style
-
-@property (nonatomic) WXPixelType fontSize;
-@property (nonatomic) WXTextStyle fontStyle;
-@property (nonatomic) CGFloat fontWeight;
-@property (nonatomic, strong) NSString *fontFamily;
-@property (nonatomic, strong) UIColor *color;
-@property (nonatomic) NSTextAlignment textAlign;
-
-//event
-@property (nonatomic) BOOL inputEvent;
-@property (nonatomic) BOOL focusEvent;
-@property (nonatomic) BOOL blurEvent;
-@property (nonatomic) BOOL changeEvent;
-@property (nonatomic) BOOL returnEvent;
-@property (nonatomic) BOOL clickEvent;
-@property (nonatomic, strong) NSString *changeEventString;
-@property (nonatomic, assign) CGSize keyboardSize;
 
 @end
 
 @implementation WXTextAreaComponent {
     UIEdgeInsets _border;
     UIEdgeInsets _padding;
-    NSTextStorage* _textStorage;
 }
 
-WX_EXPORT_METHOD(@selector(focus))
-WX_EXPORT_METHOD(@selector(blur))
-WX_EXPORT_METHOD(@selector(setSelectionRange:selectionEnd:))
-WX_EXPORT_METHOD(@selector(getSelectionRange:))
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
+-(void)viewDidLoad
 {
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _inputEvent = NO;
-        _focusEvent = NO;
-        _blurEvent = NO;
-        _changeEvent = NO;
-        _clickEvent = NO;
-        _returnEvent = NO;
-        _padding = UIEdgeInsetsZero;
-        _border = UIEdgeInsetsZero;
-        
-        if (attributes[@"autofocus"]) {
-            _autofocus = [attributes[@"autofocus"] boolValue];
-        }
-        if (attributes[@"rows"]) {
-            _rows = [attributes[@"rows"] integerValue];
-        } else {
-            _rows = 2;
-        }
-        if (attributes[@"disabled"]) {
-            _disabled = [attributes[@"disabled"] boolValue];
-        }
-        if (attributes[@"placeholder"]) {
-            NSString *placeHolder = [WXConvert NSString:attributes[@"placeholder"]];
-            if (placeHolder) {
-                _placeholderString = placeHolder;
-            }
-        }
-        if (attributes[@"returnKeyType"]) {
-            _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        }
-        if (!_placeholderString) {
-            _placeholderString = @"";
-        }
-        if (styles[@"placeholderColor"]) {
-            _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-        }else {
-            _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-        }
-        if (attributes[@"value"]) {
-            NSString * value = [WXConvert NSString:attributes[@"value"]];
-            if (value) {
-                _textValue = value;
-                if([value length] > 0) {
-                    _placeHolderLabel.text = @"";
-                }
-            }
-        }
-        if (styles[@"color"]) {
-            _color = [WXConvert UIColor:styles[@"color"]];
-        }
-        if (styles[@"fontSize"]) {
-            _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-        }
-        if (styles[@"fontWeight"]) {
-            _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-        }
-        if (styles[@"fontStyle"]) {
-            _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-        }
-        if (styles[@"fontFamily"]) {
-            _fontFamily = styles[@"fontFamily"];
-        }
-        if (styles[@"textAlign"]) {
-            _textAlign = [WXConvert NSTextAlignment:styles[@"textAlign"]] ;
-        }
+    _padding = UIEdgeInsetsZero;
+    _border = UIEdgeInsetsZero;
+    if (self.placeholderString) {
+        self.placeHolderLabel = [[UILabel alloc] init];
+        self.placeHolderLabel.numberOfLines = 0;
+        [_textView addSubview:self.placeHolderLabel];
     }
-    
-    return self;
-}
-
-- (void)viewWillLoad
-{
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWasShown:)
-                                                 name:UIKeyboardWillShowNotification
-                                               object:nil];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWillHide:)
-                                                 name:UIKeyboardWillHideNotification
-                                               object:nil];
-}
-
-- (void)dealloc
-{
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    _textView.delegate = self;
+    [_textView setNeedsDisplay];
+    [_textView setClipsToBounds:YES];
+    [super viewDidLoad];
 }
 
 - (void)viewWillUnload
 {
     _textView = nil;
 }
+
 - (UIView *)loadView
 {
-    return [[WXTextAreaView alloc] init];
-}
-- (void)viewDidLoad
-{
-    _textView = (WXTextAreaView*)self.view;
-    [self setEnabled];
-    [self setAutofocus];
-    if (_placeholderString) {
-        _placeHolderLabel = [[UILabel alloc] init];
-        _placeHolderLabel.numberOfLines = 0;
-        [_textView addSubview:_placeHolderLabel];
-    }
-    [self setPlaceholderAttributedString];
-    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard)];
-    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 0, 44)];
-    toolbar.items = [NSArray arrayWithObjects:space, barButton, nil];
-    
-    _textView.inputAccessoryView = toolbar;
-    
-    if (_textValue && [_textValue length]>0) {
-        _textView.text = _textValue;
-        _placeHolderLabel.text = @"";
-    }else {
-        _textView.text = @"";
-    }
-    _textView.delegate = self;
-    
-    if (_color) {
-        [_textView setTextColor:_color];
-    }
-    [_textView setTextAlignment:_textAlign];
-    [self setTextFont];
-    _padding = UIEdgeInsetsZero;
-    _border = UIEdgeInsetsZero;
-    [self updatePattern];
-    [_textView setReturnKeyType:_returnKeyType];
-    
-    [_textView setNeedsDisplay];
-    [_textView setClipsToBounds:YES];
-    [self handlePseudoClass];
-}
-
-- (void)focus
-{
-    if (self.textView) {
-        [self.textView becomeFirstResponder];
-    }
-}
-
-- (void)blur
-{
-    if (self.textView) {
-        [self.textView resignFirstResponder];
-    }
-}
-
--(void)setSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
-{
-    if(selectionStart>self.textView.text.length || selectionEnd>self.textView.text.length) {
-        return;
-    }
-    [self.textView becomeFirstResponder];
-    UITextPosition *startPos =  [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionStart];
-    UITextPosition *endPos = [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionEnd];
-    UITextRange *textRange = [self.textView textRangeFromPosition:startPos
-                                                        toPosition:endPos];
-    self.textView.selectedTextRange = textRange;
-}
-
--(void)getSelectionRange:(WXCallback)callback
-{
-    NSInteger selectionStart = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.start];
-    NSInteger selectionEnd = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.end];
-    NSDictionary *res = @{@"selectionStart":@(selectionStart),@"selectionEnd":@(selectionEnd)};
-    callback(res);
-}
-
-#pragma mark - add-remove Event
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = YES;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = YES;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = YES;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = YES;
-    }
-    if ([eventName isEqualToString:@"click"]) {
-        _clickEvent = YES;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = YES;
-    }
-}
-
--(void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = NO;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = NO;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = NO;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = NO;
-    }
-    if ([eventName isEqualToString:@"click"]) {
-        _clickEvent = NO;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = NO;
-    }
-}
-
-#pragma mark - upate attributes
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    if (attributes[@"autofocus"]) {
-        _autofocus = [attributes[@"autofocus"] boolValue];
-        [self setAutofocus];
-    }
-    if (attributes[@"disabled"]) {
-        _disabled = [attributes[@"disabled"] boolValue];
-        [self setEnabled];
-    }
-    if (attributes[@"placeholder"]) {
-        _placeholderString = attributes[@"placeholder"];
-        [self setPlaceholderAttributedString];
-    }
-    if (attributes[@"value"]) {
-        NSString * value = [WXConvert NSString:attributes[@"value"]];
-        if (value) {
-            _textValue = value;
-            _textView.text = _textValue;
-            if([value length] > 0) {
-                _placeHolderLabel.text = @"";
-            }
-        }
-    }
-    if (attributes[@"returnKeyType"]) {
-        _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        [_textView setReturnKeyType:_returnKeyType];
-    }
-}
-
-#pragma mark - upate styles
-- (void)updateStyles:(NSDictionary *)styles
-{
-    if (styles[@"color"]) {
-        _color = [WXConvert UIColor:styles[@"color"]];
-        [_textView setTextColor:_color];
-    }
-    if (styles[@"fontSize"]) {
-        _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-    if (styles[@"fontWeight"]) {
-        _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-    }
-    if (styles[@"fontStyle"]) {
-        _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-    }
-    if (styles[@"fontFamily"]) {
-        _fontFamily = styles[@"fontFamily"];
-    }
-    
-    [self setTextFont];
-    
-    if (styles[@"textAlign"]) {
-        _textAlign = [WXConvert NSTextAlignment:styles[@"textAlign"]] ;
-        [_textView setTextAlignment:_textAlign];
-    }
-    if (styles[@"placeholderColor"]) {
-        _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-    }else {
-        _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-    }
-    [self setPlaceholderAttributedString];
-    [self updatePattern];
-}
-
-#pragma mark update touch styles
-- (void)handlePseudoClass
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    NSMutableDictionary *recordStyles = [NSMutableDictionary new];
-    if(_disabled){
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"disabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }else {
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"enabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    if ([_textView isFirstResponder]){
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"focus"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    NSString *disabledStr = @"enabled";
-    if (_disabled){
-        disabledStr = @"disabled";
-    }
-    if ([_textView isFirstResponder]) {
-        NSString *focusStr = @"focus";
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[focusStr,disabledStr]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    [self updatePseudoClassStyles:styles];
+    _textView = [[WXTextAreaView alloc] init];
+    return _textView;
 }
 
 #pragma mark measure frame
@@ -385,9 +69,8 @@
     __weak typeof(self) weakSelf = self;
     return ^CGSize (CGSize constrainedSize) {
         
-        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:[UIFont systemFontSize]]}];
-        computedSize.height = computedSize.height * _rows;
-        //TODO:more elegant way to use max and min constrained size
+        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:weakSelf.textView.font.pointSize]}];
+        computedSize.height = _rows? computedSize.height *weakSelf.rows + (CorrectY + CorrectY/2):0;
         if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_WIDTH])) {
             computedSize.width = MAX(computedSize.width, weakSelf.cssNode->style.minDimensions[CSS_WIDTH]);
         }
@@ -411,214 +94,136 @@
     };
 }
 
-#pragma mark textview Delegate
-- (void)textViewDidBeginEditing:(UITextView *)textView
+#pragma mark -Overwrite method
+-(NSString *)text
 {
-    _changeEventString = [textView text];
-    if (_focusEvent) {
-        [self fireEvent:@"focus" params:nil];
-    }
-    if (_clickEvent) {
-        [self fireEvent:@"click" params:nil];
-    }
-    [textView becomeFirstResponder];
-    [self handlePseudoClass];
+    return _textView.text;
 }
 
-- (void)textViewDidChange:(UITextView *)textView
+- (void)setText:(NSString *)text
 {
-    if(textView.text && [textView.text length] > 0) {
-        _placeHolderLabel.text = @"";
-    }else{
-        [self setPlaceholderAttributedString];
-    }
-    if (_inputEvent) {
-        [self fireEvent:@"input" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
+    _textView.text = text;
+    if ([text length] >0) {
+        self.placeHolderLabel.text = @"";
     }
 }
 
-- (void)textViewDidEndEditing:(UITextView *)textView
+-(void)setTextColor:(UIColor *)color
 {
-    if (![textView.text length]) {
-        [self setPlaceholderAttributedString];
-    }
-    if (_changeEvent) {
-        if (![[textView text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[textView text]} domChanges:@{@"attrs":@{@"value":[textView text]}}];
-        }
-    }
-    if (_blurEvent) {
-        [self fireEvent:@"blur" params:nil];
-    }
-    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
-        [self recoveryPseudoStyles:self.styles];
-    }
+    [_textView setTextColor:color];
 }
 
-- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
+-(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
 {
-    if ([text isEqualToString:@"\n"]) {
-        if (_returnEvent) {
-            NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
-            [self fireEvent:@"return" params:@{@"value":[textView text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textView text]}}];
-        }
-    }
-    return YES;
+    [_textView setTextAlignment:textAlignForStyle];
 }
 
-#pragma mark - private method
-- (void)setPlaceholderAttributedString
+-(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
 {
-    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_placeholderString];
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    if (_placeholderColor) {
-        [attributedString addAttribute:NSForegroundColorAttributeName value:_placeholderColor range:NSMakeRange(0, _placeholderString.length)];
-        [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, _placeholderString.length)];
-    }
-    _placeHolderLabel.backgroundColor = [UIColor clearColor];
-    CGRect expectedLabelSize = [attributedString boundingRectWithSize:(CGSize){self.view.frame.size.width, CGFLOAT_MAX}
-                                               options:NSStringDrawingUsesLineFragmentOrigin
-                                               context:nil];
-    
-    _placeHolderLabel.clipsToBounds = NO;
-    CGRect newFrame = _placeHolderLabel.frame;
-    newFrame.size.height = ceil(expectedLabelSize.size.height);
-    newFrame.size.width = _textView.frame.size.width;
-    newFrame.origin.x = 4; // the cursor origin.x
-    newFrame.origin.y = 7; // the cursor origin.y
-    _placeHolderLabel.frame = newFrame;
-    _placeHolderLabel.attributedText = attributedString;
+    [_textView setUserInteractionEnabled:userInteractionEnabled];
 }
 
-- (void)updatePattern
+-(void)setEnabled:(BOOL)enabled
 {
-    UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
-    if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
-        [self setPadding:padding];
-    }
-    
-    UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
-    if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
-        [self setBorder:border];
-    }
+    _textView.editable = enabled;
+    _textView.selectable = enabled;
 }
 
-- (void)setPadding:(UIEdgeInsets)padding
+-(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
+{
+    [_textView setReturnKeyType:returnKeyType];
+}
+
+-(void)setInputAccessoryView:(UIView *)inputAccessoryView
+{
+    [_textView setInputAccessoryView:inputAccessoryView];
+}
+
+-(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
+{
+    [self.textView becomeFirstResponder];
+    UITextPosition *startPos =  [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionStart];
+    UITextPosition *endPos = [self.textView positionFromPosition:self.textView.beginningOfDocument offset:selectionEnd];
+    UITextRange *textRange = [self.textView textRangeFromPosition:startPos
+                                                       toPosition:endPos];
+    self.textView.selectedTextRange = textRange;
+}
+
+-(NSDictionary *)getEditSelectionRange
+{
+    NSInteger selectionStart = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.start];
+    NSInteger selectionEnd = [self.textView offsetFromPosition:self.textView.beginningOfDocument toPosition:self.textView.selectedTextRange.end];
+    NSDictionary *res = @{@"selectionStart":@(selectionStart),@"selectionEnd":@(selectionEnd)};
+    return res;
+}
+
+-(void)setKeyboardType:(UIKeyboardType)keyboardType
+{
+    [_textView setKeyboardType:keyboardType];
+}
+
+-(void)setSecureTextEntry:(BOOL)secureTextEntry
+{
+    [_textView setSecureTextEntry:secureTextEntry];
+}
+
+-(void)setEditPadding:(UIEdgeInsets)padding
 {
     _padding = padding;
     [self _updateTextContentInset];
 }
 
-- (void)setBorder:(UIEdgeInsets)border
+-(void)setEditBorder:(UIEdgeInsets)border
 {
     _border = border;
     [self _updateTextContentInset];
 }
 
+-(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:(UIFont *)font
+{
+    if (self.placeholderColor) {
+        [attributedString addAttribute:NSForegroundColorAttributeName value:self.placeholderColor range:NSMakeRange(0, self.placeholderString.length)];
+        [attributedString addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, self.placeholderString.length)];
+    }
+    self.placeHolderLabel.backgroundColor = [UIColor clearColor];
+    CGRect expectedLabelSize = [attributedString boundingRectWithSize:(CGSize){self.view.frame.size.width, CGFLOAT_MAX}
+                                                              options:NSStringDrawingUsesLineFragmentOrigin
+                                                              context:nil];
+    
+    self.placeHolderLabel.clipsToBounds = NO;
+    CGRect newFrame = self.placeHolderLabel.frame;
+    newFrame.size.height = ceil(expectedLabelSize.size.height);
+    newFrame.size.width = _textView.frame.size.width- CorrectX*2;
+    newFrame.origin.x = CorrectX; // the cursor origin.x
+    self.placeHolderLabel.frame = newFrame;
+    self.placeHolderLabel.attributedText = attributedString;
+}
+
+-(void)setFont:(UIFont *)font
+{
+    [_textView setFont:font];
+}
+
+-(void)setRows:(NSUInteger)rows
+{
+    _rows = rows;
+    [self setNeedsLayout];
+}
+
+#pragma mark -Private Method
 - (void)_updateTextContentInset
 {
     [_textView setTextContainerInset:UIEdgeInsetsMake(_padding.top + _border.top,
                                                       _padding.left + _border.left,
                                                       _padding.bottom + _border.bottom,
                                                       _border.right + _border.right)];
-}
-
-- (void)setAutofocus
-{
-    if (_autofocus) {
-        [_textView becomeFirstResponder];
-    } else {
-        [_textView resignFirstResponder];
-    }
-}
-
-- (void)setTextFont
-{
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    [_textView setFont:font];
-}
-
-- (void)setEnabled
-{
-    _textView.editable = !(_disabled);
-    _textView.selectable = !(_disabled);
-}
-
-#pragma mark keyboard
-- (void)keyboardWasShown:(NSNotification*)notification
-{
-    if(![_textView isFirstResponder]) {
-        return;
-    }
-    CGRect begin = [[[notification userInfo] objectForKey:@"UIKeyboardFrameBeginUserInfoKey"] CGRectValue];
     
-    CGRect end = [[[notification userInfo] objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
-    if(begin.size.height <= 44) {
-        return;
-    }
-    _keyboardSize = end.size;
-    UIView * rootView = self.weexInstance.rootView;
-    CGRect screenRect = [[UIScreen mainScreen] bounds];
-    CGRect keyboardRect = (CGRect){
-        .origin.x = 0,
-        .origin.y = CGRectGetMaxY(screenRect) - _keyboardSize.height - 54,
-        .size = _keyboardSize
-    };
-    CGRect textAreaFrame = [_textView.superview convertRect:_textView.frame toView:rootView];
-    if (keyboardRect.origin.y - textAreaFrame.size.height <= textAreaFrame.origin.y) {
-        [self setViewMovedUp:YES];
-        self.weexInstance.isRootViewFrozen = YES;
-    }
-}
-
-- (void)keyboardWillHide:(NSNotification*)notification
-{
-    if (![_textView isFirstResponder]) {
-        return;
-    }
-    UIView * rootView = self.weexInstance.rootView;
-    if (!CGRectEqualToRect(self.weexInstance.frame, rootView.frame)) {
-        [self setViewMovedUp:NO];
-        self.weexInstance.isRootViewFrozen = NO;
-    }
-}
-
-- (void)closeKeyboard
-{
-    [_textView resignFirstResponder];
-}
-
-#pragma mark method
-- (void)setViewMovedUp:(BOOL)movedUp
-{
-    UIView *rootView = self.weexInstance.rootView;
-    CGRect rect = self.weexInstance.frame;
-    CGRect rootViewFrame = rootView.frame;
-    CGRect textAreaFrame = [_textView.superview convertRect:_textView.frame toView:rootView];
-    if (movedUp) {
-        CGFloat offset = textAreaFrame.origin.y-(rootViewFrame.size.height-_keyboardSize.height-textAreaFrame.size.height);
-        if (offset > 0) {
-            rect = (CGRect){
-                .origin.x = 0.f,
-                .origin.y = -offset,
-                .size = rootViewFrame.size
-            };
-        }
-    }
-    self.weexInstance.rootView.frame = rect;
-}
-
-#pragma mark -reset color
-- (void)resetStyles:(NSArray *)styles
-{
-    if ([styles containsObject:@"color"]) {
-        _color = [UIColor blackColor];
-        [_textView setTextColor:[UIColor blackColor]];
-    }
-    if ([styles containsObject:@"fontSize"]) {
-        _fontSize = WX_TEXT_FONT_SIZE;
-        [self setTextFont];
-    }
+    //when textview update, placeHolderLabel update too
+    CGRect newFrame = self.placeHolderLabel.frame;
+    newFrame.size.width = self.textView.frame.size.width - (_padding.left + _border.left) -CorrectX*2;
+    newFrame.origin.x = CorrectX + _padding.left + _border.left; // the cursor origin.x
+    newFrame.origin.y = _padding.top + _border.top;
+    self.placeHolderLabel.frame = newFrame;
 }
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
index 72dd3ab..e993366 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.h
@@ -1,13 +1,26 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
 
 @interface WXTextComponent : WXComponent
 
++ (void)setRenderUsingCoreText:(BOOL)usingCoreText;
+- (BOOL)useCoreText;
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
index 4148515..56c158a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXTextComponent.h"
@@ -15,11 +26,10 @@
 #import "WXRuleManager.h"
 #import "WXDefine.h"
 #import <pthread/pthread.h>
+#import <CoreText/CoreText.h>
 
 @interface WXText : UIView
-
 @property (nonatomic, strong) NSTextStorage *textStorage;
-
 @end
 
 @implementation WXText
@@ -42,37 +52,6 @@
     return [WXLayer class];
 }
 
-- (UIImage *)drawTextWithBounds:(CGRect)bounds padding:(UIEdgeInsets)padding
-{
-    if (bounds.size.width <=0 || bounds.size.height <= 0) {
-        return nil;
-    }
-    UIGraphicsBeginImageContextWithOptions(bounds.size, self.layer.opaque, WXScreenScale());
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    
-    if ([self.wx_component _needsDrawBorder]) {
-        [self.wx_component _drawBorderWithContext:context size:bounds.size];
-    } else {
-        WXPerformBlockOnMainThread(^{
-            [self.wx_component _resetNativeBorderRadius];
-        });
-    }
-    NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
-    NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
-    
-    CGRect textFrame = UIEdgeInsetsInsetRect(bounds, padding);
-    NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
-    
-    [layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:textFrame.origin];
-    [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:textFrame.origin];
-    
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    
-    UIGraphicsEndImageContext();
-    
-    return image;
-}
-
 - (void)setTextStorage:(NSTextStorage *)textStorage
 {
     if (_textStorage != textStorage) {
@@ -91,11 +70,28 @@
 
 - (NSString *)accessibilityValue
 {
-    return _textStorage.string;
+    if (self.wx_component) {
+        if (self.wx_component->_ariaLabel) {
+            return self.wx_component->_ariaLabel;
+        }
+    }
+    if (![(WXTextComponent*)self.wx_component useCoreText]) {
+        return _textStorage.string;
+    }
+    return [(WXTextComponent*)self.wx_component valueForKey:@"_text"];
 }
 
 @end
 
+static BOOL textRenderUsingCoreText = NO;
+
+NSString *const WXTextTruncationToken = @"\u2026";
+CGFloat WXTextDefaultLineThroughWidth = 1.2;
+
+@interface WXTextComponent()
+@property (nonatomic, assign) NSString *useCoreTextAttr;
+@end
+
 @implementation WXTextComponent
 {
     UIEdgeInsets _border;
@@ -114,16 +110,18 @@
     WXTextDecoration _textDecoration;
     NSString *_textOverflow;
     CGFloat _lineHeight;
-    
-   
-    pthread_mutex_t _textStorageMutex;
-    pthread_mutexattr_t _textStorageMutexAttr;
+    CGFloat _letterSpacing;
+    BOOL _truncationLine; // support trunk tail
 }
 
-static BOOL _isUsingTextStorageLock = NO;
-+ (void)useTextStorageLock:(BOOL)isUsingTextStorageLock
++ (void)setRenderUsingCoreText:(BOOL)usingCoreText
 {
-    _isUsingTextStorageLock = isUsingTextStorageLock;
+    textRenderUsingCoreText = usingCoreText;
+}
+
++ (BOOL)textRenderUsingCoreText
+{
+    return textRenderUsingCoreText;
 }
 
 - (instancetype)initWithRef:(NSString *)ref
@@ -135,10 +133,11 @@
 {
     self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
     if (self) {
-        if (_isUsingTextStorageLock) {
-            pthread_mutexattr_init(&_textStorageMutexAttr);
-            pthread_mutexattr_settype(&_textStorageMutexAttr, PTHREAD_MUTEX_RECURSIVE);
-            pthread_mutex_init(&_textStorageMutex, &_textStorageMutexAttr);
+        // just for coretext and textkit render replacement
+        if ([attributes objectForKey:@"coretext"]) {
+            _useCoreTextAttr = [WXConvert NSString:attributes[@"coretext"]];
+        } else {
+            _useCoreTextAttr = nil;
         }
         
         [self fillCSSStyles:styles];
@@ -148,16 +147,30 @@
     return self;
 }
 
-- (void)dealloc
+- (BOOL)useCoreText
 {
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_destroy(&_textStorageMutex);
-        pthread_mutexattr_destroy(&_textStorageMutexAttr);
+    if (WX_SYS_VERSION_LESS_THAN(@"10.0")) {
+        // there is something wrong with coreText drawing lineHeight, trying to fix this, or anyone who can help me to fix this.
+        return NO;
     }
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    
+    if ([_useCoreTextAttr isEqualToString:@"yes"]) {
+        return YES;
+    }
+    if ([_useCoreTextAttr isEqualToString:@"false"]) {
+        return NO;
+    }
+    
+    if ([WXTextComponent textRenderUsingCoreText]) {
+        return YES;
+    }
+    return NO;
 }
 
-
+- (void)dealloc
+{
+    [[NSNotificationCenter defaultCenter] removeObserver:self];
+}
 
 #define WX_STYLE_FILL_TEXT(key, prop, type, needLayout)\
 do {\
@@ -195,6 +208,7 @@
     WX_STYLE_FILL_TEXT(textDecoration, textDecoration, WXTextDecoration, YES)
     WX_STYLE_FILL_TEXT(textOverflow, textOverflow, NSString, NO)
     WX_STYLE_FILL_TEXT_PIXEL(lineHeight, lineHeight, YES)
+    WX_STYLE_FILL_TEXT_PIXEL(letterSpacing, letterSpacing, YES)
     
     UIEdgeInsets padding = {
         WXFloorPixelValue(self.cssNode->style.padding[CSS_TOP] + self.cssNode->style.border[CSS_TOP]),
@@ -221,13 +235,7 @@
 
 - (void)setNeedsRepaint
 {
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_lock(&_textStorageMutex);
-    }
     _textStorage = nil;
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_unlock(&_textStorageMutex);
-    }
 }
 
 #pragma mark - Subclass
@@ -239,12 +247,12 @@
 
 - (void)viewDidLoad
 {
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_lock(&_textStorageMutex);
+    BOOL useCoreText = NO;
+    if ([self.view.wx_component isKindOfClass:NSClassFromString(@"WXTextComponent")] && [self.view.wx_component respondsToSelector:@selector(useCoreText)]) {
+        useCoreText = [(WXTextComponent*)self.view.wx_component useCoreText];
     }
-    ((WXText *)self.view).textStorage = _textStorage;
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_unlock(&_textStorageMutex);
+    if (!useCoreText) {
+        ((WXText *)self.view).textStorage = _textStorage;
     }
     [self setNeedsDisplay];
 }
@@ -254,37 +262,39 @@
     return [[WXText alloc] init];
 }
 
-- (WXDisplayBlock)displayBlock
+- (BOOL)needsDrawRect
 {
-    WXText *textView = ((WXText *)self.view);
-    return ^UIImage *(CGRect bounds, BOOL(^isCancelled)(void)) {
-        if (isCancelled()) {
-            return nil;
-        }
-        if (_isUsingTextStorageLock) {
-            pthread_mutex_lock(&_textStorageMutex);
-        }
-        
-        UIImage *image = [textView drawTextWithBounds:bounds padding:_padding];
-        
-        if (_isUsingTextStorageLock) {
-            pthread_mutex_unlock(&_textStorageMutex);
-        }
-        
-        return image;
-    };
+    return YES;
+}
+
+- (UIImage *)drawRect:(CGRect)rect;
+{
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    if (_isCompositingChild) {
+        [self drawTextWithContext:context bounds:rect padding:_padding view:nil];
+    } else {
+        WXText *textView = (WXText *)_view;
+        [self drawTextWithContext:context bounds:rect padding:_padding view:textView];
+    }
+    
+    return nil;
 }
 
 - (CGSize (^)(CGSize))measureBlock
 {
     __weak typeof(self) weakSelf = self;
     return ^CGSize (CGSize constrainedSize) {
-        NSTextStorage *textStorage = [weakSelf textStorageWithWidth:constrainedSize.width];
-        
-        NSLayoutManager *layoutManager = textStorage.layoutManagers.firstObject;
-        NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
-        CGSize computedSize = [layoutManager usedRectForTextContainer:textContainer].size;
-        
+        CGSize computedSize = CGSizeZero;
+        NSTextStorage *textStorage = nil;
+        if (![self useCoreText]) {
+            textStorage = [weakSelf textStorageWithWidth:constrainedSize.width];
+            NSLayoutManager *layoutManager = textStorage.layoutManagers.firstObject;
+            NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
+            computedSize = [layoutManager usedRectForTextContainer:textContainer].size;
+        } else {
+            computedSize = [weakSelf calculateTextHeightWithWidth:constrainedSize.width];
+        }
+    
         //TODO:more elegant way to use max and min constrained size
         if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_WIDTH])) {
             computedSize.width = MAX(computedSize.width, weakSelf.cssNode->style.minDimensions[CSS_WIDTH]);
@@ -301,7 +311,7 @@
         if (!isnan(weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT])) {
             computedSize.height = MIN(computedSize.height, weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT]);
         }
-        if ([WXUtility isBlankString:textStorage.string]) {
+        if (textStorage && [WXUtility isBlankString:textStorage.string]) {
             //  if the text value is empty or nil, then set the height is 0.
             computedSize.height = 0;
         }
@@ -314,6 +324,7 @@
 }
 
 #pragma mark Text Building
+
 - (NSString *)text
 {
     return _text;
@@ -334,6 +345,82 @@
     });
 }
 
+- (NSMutableAttributedString *)buildCTAttributeString {
+    
+    NSString *string = [self text] ?: @"";
+    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:string];
+    if (_color) {
+        [attributedString addAttribute:NSForegroundColorAttributeName value:_color range:NSMakeRange(0, string.length)];
+    }
+    
+    if (_fontFamily) {
+        NSString * keyPath = [NSString stringWithFormat:@"%@.tempSrc", _fontFamily];
+        NSString * fontSrc = [[[WXRuleManager sharedInstance] getRule:@"fontFace"] valueForKeyPath:keyPath];
+        keyPath = [NSString stringWithFormat:@"%@.localSrc", _fontFamily];
+        NSString * fontLocalSrc = [[[WXRuleManager sharedInstance] getRule:@"fontFace"] valueForKeyPath:keyPath];
+        //custom localSrc is cached
+        if (!fontLocalSrc && fontSrc) {
+            // if use custom font, when the custom font download finish, refresh text.
+            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(repaintText:) name:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil];
+        }
+    }
+    
+    // set font
+    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor useCoreText:[self useCoreText]];
+    CTFontRef ctFont = CTFontCreateWithName((__bridge CFStringRef)font.fontName,
+                                           font.pointSize,
+                                           NULL);
+    if (ctFont) {
+        [attributedString addAttribute:(id)kCTFontAttributeName value:(__bridge id)(ctFont) range:NSMakeRange(0, string.length)];
+    }
+    
+    if(_textDecoration == WXTextDecorationUnderline){
+        [attributedString addAttribute:(id)kCTUnderlineStyleAttributeName value:@(kCTUnderlinePatternSolid | kCTUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
+    } else if(_textDecoration == WXTextDecorationLineThrough){
+        [attributedString addAttribute:NSStrikethroughStyleAttributeName value:@(NSUnderlinePatternSolid | NSUnderlineStyleSingle) range:NSMakeRange(0, string.length)];
+    }
+    
+    NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
+    
+    if (_textAlign) {
+        paragraphStyle.alignment = _textAlign;
+    }
+    
+    // set default lineBreakMode
+    paragraphStyle.lineBreakMode = NSLineBreakByCharWrapping;
+    _truncationLine = NO;
+    if (_textOverflow && [_textOverflow length] > 0) {
+        if (_lines && [_textOverflow isEqualToString:@"ellipsis"])
+            _truncationLine = YES;
+    }
+    
+    if (_lineHeight) {
+        paragraphStyle.maximumLineHeight = _lineHeight;
+        paragraphStyle.minimumLineHeight = _lineHeight;
+    }
+    if (_lineHeight || _textAlign || [_textOverflow length] > 0) {
+        [attributedString addAttribute:NSParagraphStyleAttributeName
+                                 value:paragraphStyle
+                                 range:(NSRange){0, attributedString.length}];
+    }
+    
+    if (_letterSpacing) {
+        [attributedString addAttribute:NSKernAttributeName value:@(_letterSpacing) range:(NSRange){0, attributedString.length}];
+    }
+    
+    if ([self adjustLineHeight]) {
+        if (_lineHeight > font.lineHeight) {
+            [attributedString addAttribute:NSBaselineOffsetAttributeName
+                                     value:@((_lineHeight - font.lineHeight)/ 2)
+                                     range:(NSRange){0, attributedString.length}];
+        }
+    }
+    
+    CFRelease(ctFont);
+    
+    return attributedString;
+}
+
 - (NSAttributedString *)buildAttributeString
 {
     NSString *string = [self text] ?: @"";
@@ -398,7 +485,7 @@
 
 - (BOOL)adjustLineHeight
 {
-    return YES;
+    return ![self useCoreText];
 }
 
 - (NSTextStorage *)textStorageWithWidth:(CGFloat)width
@@ -430,14 +517,7 @@
     [layoutManager ensureLayoutForTextContainer:textContainer];
     
     _textStorageWidth = width;
-    
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_lock(&_textStorageMutex);
-    }
     _textStorage = textStorage;
-    if (_isUsingTextStorageLock) {
-        pthread_mutex_unlock(&_textStorageMutex);
-    }
     
     return textStorage;
 }
@@ -445,16 +525,14 @@
 - (void)syncTextStorageForView
 {
     CGFloat width = self.calculatedFrame.size.width - (_padding.left + _padding.right);
-    NSTextStorage *textStorage = [self textStorageWithWidth:width];
-    
+    NSTextStorage *textStorage = nil;
+    if (![self useCoreText]) {
+        textStorage = [self textStorageWithWidth:width];
+    }
     [self.weexInstance.componentManager  _addUITask:^{
         if ([self isViewLoaded]) {
-            if (_isUsingTextStorageLock) {
-                pthread_mutex_lock(&_textStorageMutex);
-            }
-            ((WXText *)self.view).textStorage = textStorage;
-            if (_isUsingTextStorageLock) {
-                pthread_mutex_unlock(&_textStorageMutex);
+            if (![self useCoreText]) {
+                ((WXText *)self.view).textStorage = textStorage;
             }
             [self readyToRender]; // notify super component
             [self setNeedsDisplay];
@@ -486,6 +564,324 @@
     [self syncTextStorageForView];
 }
 
+- (void)drawTextWithContext:(CGContextRef)context bounds:(CGRect)bounds padding:(UIEdgeInsets)padding view:(WXText *)view
+{
+    if (bounds.size.width <= 0 || bounds.size.height <= 0) {
+        return;
+    }
+    
+    if ([self _needsDrawBorder]) {
+        [self _drawBorderWithContext:context size:bounds.size];
+    } else {
+        WXPerformBlockOnMainThread(^{
+            [self _resetNativeBorderRadius];
+        });
+    }
+    if (![self useCoreText]) {
+        NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
+        NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
+        
+        CGRect textFrame = UIEdgeInsetsInsetRect(bounds, padding);
+        NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
+        
+        [layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:textFrame.origin];
+        [layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:textFrame.origin];
+    } else {
+        CGRect textFrame = UIEdgeInsetsInsetRect(bounds, padding);
+        // sufficient height for text to draw, or frame lines will be empty
+        textFrame.size.height = bounds.size.height * 2;
+        CGContextSaveGState(context);
+        //flip the coordinate system
+        CGContextSetTextMatrix(context, CGAffineTransformIdentity);
+        CGContextTranslateCTM(context, 0, textFrame.size.height);
+        CGContextScaleCTM(context, 1.0, -1.0);
+        
+        NSMutableAttributedString * attributedStringCopy = [self buildCTAttributeString];
+        //add path
+        CGPathRef cgPath = NULL;
+        cgPath = CGPathCreateWithRect(textFrame, NULL);
+        CTFramesetterRef framesetter = NULL;
+        framesetter = CTFramesetterCreateWithAttributedString((CFTypeRef)attributedStringCopy);
+        CTFrameRef _coreTextFrameRef = NULL;
+        if (_coreTextFrameRef) {
+            CFRelease(_coreTextFrameRef);
+        }
+        _coreTextFrameRef = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), cgPath, NULL);
+        CFRelease(framesetter);
+        framesetter = NULL;
+        CFArrayRef ctLines = NULL;
+        ctLines = CTFrameGetLines(_coreTextFrameRef);
+        CFIndex lineCount = CFArrayGetCount(ctLines);
+        NSMutableArray * mutableLines = [NSMutableArray new];
+        CGPoint lineOrigins[lineCount];
+        NSUInteger rowCount = 0;
+        BOOL needTruncation = NO;
+        CTLineRef ctTruncatedLine = NULL;
+        CTFrameGetLineOrigins(_coreTextFrameRef, CFRangeMake(0, 0), lineOrigins);
+        for (CFIndex lineIndex = 0;(!_lines || _lines > lineIndex) && lineIndex < lineCount; lineIndex ++) {
+            CTLineRef lineRef = NULL;
+            lineRef = CFArrayGetValueAtIndex(ctLines, lineIndex);
+            if (!lineRef) {
+                break;
+            }
+            CGPoint lineOrigin = lineOrigins[lineIndex];
+            lineOrigin.x += padding.left;
+            lineOrigin.y -= padding.top;
+            CGContextSetTextPosition(context, lineOrigin.x, lineOrigin.y);
+            CFArrayRef runs = CTLineGetGlyphRuns(lineRef);
+            [mutableLines addObject:(__bridge id _Nonnull)(lineRef)];
+            // lineIndex base 0
+            rowCount = lineIndex + 1;
+            if (_lines > 0 && _truncationLine) {
+                if (_truncationLine && rowCount > _lines) {
+                    needTruncation = YES;
+                    do {
+                        NSUInteger lastRow = [mutableLines count];
+                        if (lastRow < rowCount) {
+                           break;
+                        }
+                        [mutableLines removeLastObject];
+                    } while (1);
+
+                }
+            }
+            if (_lines > 0 && _truncationLine) {
+                if (rowCount >= _lines &&!needTruncation && (CTLineGetStringRange(lineRef).length + CTLineGetStringRange(lineRef).location) < attributedStringCopy.length) {
+                    needTruncation = YES;
+                }
+            }
+            
+            if (needTruncation) {
+                ctTruncatedLine = [self buildTruncatedLineWithRuns:runs lines:mutableLines path:cgPath];
+                if (ctTruncatedLine) {
+                    CFArrayRef truncatedRuns = CTLineGetGlyphRuns(ctTruncatedLine);
+                    [self drawTextWithRuns:truncatedRuns context:context lineOrigin:lineOrigin];
+                    CFRelease(ctTruncatedLine);
+                    ctTruncatedLine = NULL;
+                    continue;
+                }
+            }else {
+                [self drawTextWithRuns:runs context:context lineOrigin:lineOrigin];
+            }
+        }
+        
+        [mutableLines removeAllObjects];
+        CGPathRelease(cgPath);
+        CFRelease(_coreTextFrameRef);
+        _coreTextFrameRef = NULL;
+        cgPath = NULL;
+        CGContextRestoreGState(context);
+    }
+}
+
+- (void)drawTextWithRuns:(CFArrayRef)runs context:(CGContextRef)context lineOrigin:(CGPoint)lineOrigin
+{
+    for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runs); runIndex ++) {
+        CTRunRef run = NULL;
+        run = CFArrayGetValueAtIndex(runs, runIndex);
+        CTRunDraw(run, context, CFRangeMake(0, 0));
+        CFDictionaryRef attr = NULL;
+        attr = CTRunGetAttributes(run);
+        CFIndex glyphCount = CTRunGetGlyphCount(run);
+        if (glyphCount <= 0) continue;
+        
+        NSUnderlineStyle strikethrough = (NSUnderlineStyle)CFDictionaryGetValue(attr, NSStrikethroughStyleAttributeName);
+        
+        if (strikethrough) {
+            // draw strikethrough
+            [self drawLineThroughWithRun:runs context:context index:runIndex origin:lineOrigin];
+        }
+    }
+}
+
+- (CTLineRef)buildTruncatedLineWithRuns:(CFArrayRef)runs lines:(NSMutableArray*)mutableLines path:(CGPathRef)cgPath
+{
+    NSAttributedString * truncationToken = nil;
+    CTLineRef ctTruncatedLine = NULL;
+    CTLineRef lastLine = (__bridge CTLineRef)(mutableLines.lastObject);
+   
+    CFArrayRef lastLineRuns = CTLineGetGlyphRuns(lastLine);
+    NSUInteger lastLineRunCount = CFArrayGetCount(lastLineRuns);
+    
+    CTLineRef truncationTokenLine = NULL;
+    NSMutableDictionary *attrs = nil;
+    if (lastLineRunCount > 0) {
+        CTRunRef run = CFArrayGetValueAtIndex(runs, lastLineRunCount - 1);
+        attrs = (id)CTRunGetAttributes(run);
+        attrs = attrs ? attrs.mutableCopy : [NSMutableDictionary new];
+        CTFontRef font = (__bridge CTFontRef)(attrs[(id)kCTFontAttributeName]);
+        CGFloat fontSize = font ? CTFontGetSize(font):32 * self.weexInstance.pixelScaleFactor;
+        UIFont * uiFont = [UIFont systemFontOfSize:fontSize];
+        if (uiFont) {
+            font = CTFontCreateWithName((__bridge CFStringRef)uiFont.fontName, uiFont.pointSize, NULL);
+        }
+        if (font) {
+            attrs[(id)kCTFontAttributeName] = (__bridge id)(font);
+            uiFont = nil;
+            CFRelease(font);
+        }
+        CGColorRef color = (__bridge CGColorRef)(attrs[(id)kCTForegroundColorAttributeName]);
+        if (color && CFGetTypeID(color) == CGColorGetTypeID() && CGColorGetAlpha(color) == 0) {
+            [attrs removeObjectForKey:(id)kCTForegroundColorAttributeName];
+        }
+        
+        attrs = attrs?:[NSMutableDictionary new];
+        truncationToken = [[NSAttributedString alloc] initWithString:WXTextTruncationToken attributes:attrs];
+        truncationTokenLine = CTLineCreateWithAttributedString((CFAttributedStringRef)truncationToken);
+    }
+    
+    if (truncationTokenLine) {
+        // default truncationType is kCTLineTruncationEnd
+        CTLineTruncationType truncationType = kCTLineTruncationEnd;
+        NSAttributedString *attributedString = [self buildCTAttributeString];
+        NSAttributedString * lastLineText = [attributedString attributedSubstringFromRange: WXNSRangeFromCFRange(CTLineGetStringRange(lastLine))];
+        NSMutableAttributedString *mutableLastLineText = lastLineText.mutableCopy;
+        [mutableLastLineText appendAttributedString:truncationToken];
+        CTLineRef ctLastLineExtend = CTLineCreateWithAttributedString((__bridge CFAttributedStringRef)mutableLastLineText);
+        if (ctLastLineExtend) {
+            CGRect cgPathRect = CGRectZero;
+            CGFloat truncatedWidth = 0;
+            if (CGPathIsRect(cgPath, &cgPathRect)) {
+                truncatedWidth = cgPathRect.size.width;
+            }
+            ctTruncatedLine = CTLineCreateTruncatedLine(ctLastLineExtend, truncatedWidth, truncationType, truncationTokenLine);
+            CFRelease(ctLastLineExtend);
+            ctLastLineExtend = NULL;
+            CFRelease(truncationTokenLine);
+            truncationTokenLine = NULL;
+        }
+    }
+    
+    return ctTruncatedLine;
+}
+
+- (void)drawLineThroughWithRun:(CFArrayRef)runs context:(CGContextRef)context index:(CFIndex)runIndex origin:(CGPoint)lineOrigin
+{
+    CFRetain(runs);
+    CGContextRetain(context);
+    
+    CGContextSaveGState(context);
+    CGFloat xHeight = 0, underLinePosition = 0, lineThickness = 0;
+    CTRunRef run = CFArrayGetValueAtIndex(runs, runIndex);
+    WXTextGetRunsMaxMetric(runs, &xHeight, &underLinePosition, &lineThickness);
+    
+    CGPoint strikethroughStart;
+    strikethroughStart.x =  lineOrigin.x - underLinePosition;
+    strikethroughStart.y = lineOrigin.y + xHeight/2;
+    CGPoint runPosition = CGPointZero;
+    CTRunGetPositions(run, CFRangeMake(0, 1), &runPosition);
+    strikethroughStart.x = lineOrigin.x + runPosition.x;
+    CGContextSetLineWidth(context, WXTextDefaultLineThroughWidth);
+    double length = CTRunGetTypographicBounds(run, CFRangeMake(0, 0), NULL, NULL, NULL);
+    CGContextMoveToPoint(context, strikethroughStart.x, strikethroughStart.y);
+    CGContextAddLineToPoint(context, strikethroughStart.x + length, strikethroughStart.y);
+    CGContextStrokePath(context);
+    
+    CGContextRestoreGState(context);
+    CFRelease(runs);
+    CGContextRelease(context);
+}
+
+- (CGSize)calculateTextHeightWithWidth:(CGFloat)aWidth
+{
+    if (isnan(aWidth)) {
+        aWidth = CGFLOAT_MAX;
+    }
+    
+    CGFloat totalHeight = 0;
+    CGSize suggestSize = CGSizeZero;
+    NSAttributedString * attributedStringCpy = [self buildCTAttributeString];
+    CTFramesetterRef framesetterRef = NULL;
+    framesetterRef = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attributedStringCpy);
+        
+    suggestSize = CTFramesetterSuggestFrameSizeWithConstraints(framesetterRef, CFRangeMake(0, attributedStringCpy.length), NULL, CGSizeMake(aWidth, MAXFLOAT), NULL);
+        
+    CGMutablePathRef path = NULL;
+    path = CGPathCreateMutable();
+        // sufficient height to draw text
+    CGPathAddRect(path, NULL, CGRectMake(0, 0, aWidth, suggestSize.height * 10));
+        
+    CTFrameRef frameRef = NULL;
+    frameRef = CTFramesetterCreateFrame(framesetterRef, CFRangeMake(0, attributedStringCpy.length), path, NULL);
+        
+    CFRelease(framesetterRef);
+    CGPathRelease(path);
+    framesetterRef = NULL;
+    
+    CFArrayRef lines = NULL;
+    lines = CTFrameGetLines(frameRef);
+    CFIndex lineCount = CFArrayGetCount(lines);
+    CGFloat ascent = 0;
+    CGFloat descent = 0;
+    CGFloat leading = 0;
+    
+    // height = ascent + descent + lineCount*leading
+    // ignore linespaing
+    NSUInteger actualLineCount = 0;
+    for (CFIndex lineIndex = 0; (!_lines|| lineIndex < _lines) && lineIndex < lineCount; lineIndex ++)
+    {
+        CTLineRef lineRef = NULL;
+        lineRef = CFArrayGetValueAtIndex(lines, lineIndex);
+        CTLineGetTypographicBounds(lineRef, &ascent, &descent, &leading);
+        totalHeight += ascent + descent;
+        actualLineCount ++;
+    }
+    
+    totalHeight = totalHeight + actualLineCount * leading;
+    CFRelease(frameRef);
+    
+    return CGSizeMake(suggestSize.width, totalHeight);
+}
+
+static void WXTextGetRunsMaxMetric(CFArrayRef runs, CGFloat *xHeight, CGFloat *underlinePosition, CGFloat *lineThickness)
+{
+    CFRetain(runs);
+    CGFloat maxXHeight = 0;
+    CGFloat maxUnderlinePos = 0;
+    CGFloat maxLineThickness = 0;
+    for (NSUInteger index = 0, runsCount = CFArrayGetCount(runs); index < runsCount; index ++) {
+        CTRunRef run = CFArrayGetValueAtIndex(runs, index);
+        CFDictionaryRef attrs = CTRunGetAttributes(run);
+        if (attrs) {
+            CTFontRef font = CFDictionaryGetValue(attrs, kCTFontAttributeName);
+            if (font) {
+                CGFloat xHeight = CTFontGetXHeight(font);
+                if (xHeight > maxXHeight) {
+                    maxXHeight = xHeight;
+                }
+                
+                CGFloat underlinePos = CTFontGetUnderlinePosition(font);
+                if (underlinePos < maxUnderlinePos) {
+                    maxUnderlinePos = underlinePos;
+                }
+                
+                CGFloat lineThickness = CTFontGetUnderlineThickness(font);
+                if (lineThickness > maxLineThickness) {
+                    maxLineThickness = lineThickness;
+                }
+            }
+        }
+    }
+    
+    if (xHeight) {
+        *xHeight = maxXHeight;
+    }
+    
+    if (underlinePosition) {
+        *underlinePosition = maxUnderlinePos;
+    }
+    
+    if (lineThickness) {
+        *lineThickness = maxLineThickness;
+    }
+    
+    CFRelease(runs);
+}
+                                                                                                                                       
+NS_INLINE NSRange WXNSRangeFromCFRange(CFRange range) {
+    return NSMakeRange(range.location, range.length);
+}
+
 #ifdef UITEST
 - (NSString *)description
 {
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
index 5749135..a1b4504 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.h
@@ -1,15 +1,24 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
-#import "WXComponent.h"
-#import "WXTextComponentProtocol.h"
-#import "WXDatePickerManager.h"
+#import <Foundation/Foundation.h>
+#import "WXEditComponent.h"
 
-@interface WXTextInputComponent : WXComponent<WXTextComponentProtocol, UITextFieldDelegate,WXDatePickerManagerDelegate>
-
+@interface WXTextInputComponent : WXEditComponent
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
index c0b3dc6..a9fd3a2 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTextInputComponent.m
@@ -1,20 +1,23 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXTextInputComponent.h"
-#import "WXConvert.h"
-#import "WXUtility.h"
-#import "WXSDKInstance.h"
-#import "WXSDKInstance_private.h"
-#import "WXDefine.h"
-#import "WXAssert.h"
-#import "WXComponent_internal.h"
-#import "WXComponent+PseudoClassManagement.h"
 
 @interface WXTextInputView : UITextField
 @property (nonatomic, assign) UIEdgeInsets border;
@@ -57,105 +60,10 @@
 @interface WXTextInputComponent()
 
 @property (nonatomic, strong) WXTextInputView *inputView;
-@property (nonatomic, strong) WXDatePickerManager *datePickerManager;
-@property (nonatomic, strong) NSDictionary *attr;
-//attribute
-@property (nonatomic, strong) UIColor *placeholderColor;
-@property (nonatomic, strong) NSString *placeholderString;
-@property (nonatomic) NSNumber *maxLength;
-@property (nonatomic) NSString * value;
-@property (nonatomic) BOOL autofocus;
-@property(nonatomic) UIReturnKeyType returnKeyType;
-@property (nonatomic) BOOL disabled;
-@property (nonatomic, copy) NSString *inputType;
-//style
-@property (nonatomic) WXPixelType fontSize;
-@property (nonatomic) WXTextStyle fontStyle;
-@property (nonatomic) CGFloat fontWeight;
-@property (nonatomic, strong) NSString *fontFamily;
-@property (nonatomic, strong) UIColor *colorForStyle;
-@property (nonatomic)NSTextAlignment textAlignForStyle;
-
-//event
-@property (nonatomic) BOOL inputEvent;
-@property (nonatomic) BOOL focusEvent;
-@property (nonatomic) BOOL blurEvent;
-@property (nonatomic) BOOL changeEvent;
-@property (nonatomic) BOOL returnEvent;
-@property (nonatomic, strong) NSString *changeEventString;
-@property (nonatomic, assign) CGSize keyboardSize;
 
 @end
 
 @implementation WXTextInputComponent
-{
-    UIEdgeInsets _border;
-    UIEdgeInsets _padding;
-    NSTextStorage* _textStorage;
-}
-
-@synthesize border = _border;
-@synthesize padding = _padding;
-@synthesize textStorage = _textStorage;
-
-WX_EXPORT_METHOD(@selector(focus))
-WX_EXPORT_METHOD(@selector(blur))
-WX_EXPORT_METHOD(@selector(setSelectionRange:selectionEnd:))
-WX_EXPORT_METHOD(@selector(getSelectionRange:))
-
-- (instancetype)initWithRef:(NSString *)ref type:(NSString *)type styles:(NSDictionary *)styles attributes:(NSDictionary *)attributes events:(NSArray *)events weexInstance:(WXSDKInstance *)weexInstance
-{
-    self = [super initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:weexInstance];
-    if (self) {
-        _inputEvent = NO;
-        _focusEvent = NO;
-        _blurEvent = NO;
-        _changeEvent = NO;
-        _returnEvent = NO;
-        // handle attributes
-        _autofocus = [attributes[@"autofocus"] boolValue];
-        _disabled = [attributes[@"disabled"] boolValue];
-        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
-        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
-        if(attributes[@"type"]) {
-            _inputType = [WXConvert NSString:attributes[@"type"]];
-            _attr = attributes;
-        }
-        if (attributes[@"maxlength"]) {
-            _maxLength = [NSNumber numberWithUnsignedInteger:[attributes[@"maxlength"] integerValue]];
-        }
-        if (attributes[@"returnKeyType"]) {
-            _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        }
-        
-        // handle styles
-        if (styles[@"color"]) {
-            _colorForStyle = [WXConvert UIColor:styles[@"color"]];
-        }
-        if (styles[@"fontSize"]) {
-            _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-        }
-        if (styles[@"fontWeight"]) {
-            _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-        }
-        if (styles[@"fontStyle"]) {
-            _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-        }
-        if (styles[@"fontFamily"]) {
-            _fontFamily = styles[@"fontFamily"];
-        }
-        if (styles[@"textAlign"]) {
-            _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
-        }
-        if (styles[@"placeholderColor"]) {
-            _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-        }else {
-            _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-        }
-    }
-    
-    return self;
-}
 
 - (UIView *)loadView
 {
@@ -163,510 +71,88 @@
     return _inputView;
 }
 
-#pragma mark - lifeCircle
-
-- (void)viewDidLoad
+-(void)viewDidLoad
 {
-    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textFiledEditChanged:)
-                                                 name:UITextFieldTextDidChangeNotification
-                                               object:_inputView];
-    _padding = UIEdgeInsetsZero;
-    _border = UIEdgeInsetsZero;
+    [super viewDidLoad];
     _inputView.delegate = self;
-    _inputView.userInteractionEnabled = YES;
-    [self setType];
-    _inputView.text = _value;
-    [self setAutofocus:_autofocus];
-    [self setTextFont];
-    [self setPlaceholderAttributedString];
-    [_inputView setTextAlignment:_textAlignForStyle];
-    [_inputView setTextColor:_colorForStyle];
-    [_inputView setText:_value];
-    [_inputView setEnabled:!_disabled];
-    [_inputView setReturnKeyType:_returnKeyType];
-    [self updatePattern];
-    
-    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeKeyboard)];
-    UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 0, 44)];
-    toolbar.items = [NSArray arrayWithObjects:space, barButton, nil];
-    
-    _inputView.inputAccessoryView = toolbar;
-    [self handlePseudoClass];
 }
 
-- (void)viewWillLoad
+# pragma mark - overwrite method
+-(NSString *)text
 {
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWasShown:)
-                                                 name:UIKeyboardWillShowNotification
-                                               object:nil];
-    
-    [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(keyboardWillHide:)
-                                                 name:UIKeyboardWillHideNotification
-                                               object:nil];
+    return _inputView.text;
+}
+- (void)setText:(NSString *)text
+{
+    _inputView.text = text;
+}
+-(void)setTextColor:(UIColor *)color
+{
+    _inputView.textColor = color;
 }
 
-- (void)dealloc
+-(void)setTextAlignment:(NSTextAlignment)textAlignForStyle
 {
-    [[NSNotificationCenter defaultCenter] removeObserver:self];
+    _inputView.textAlignment = textAlignForStyle;
+}
+-(void)setUserInteractionEnabled:(BOOL)userInteractionEnabled
+{
+    _inputView.userInteractionEnabled = userInteractionEnabled;
+}
+-(void)setEnabled:(BOOL)enabled
+{
+    _inputView.enabled=enabled;
+}
+-(void)setReturnKeyType:(UIReturnKeyType)returnKeyType
+{
+    _inputView.returnKeyType = returnKeyType;
+}
+-(void)setInputAccessoryView:(UIView *)inputAccessoryView
+{
+    _inputView.inputAccessoryView = inputAccessoryView;
+}
+-(void)setKeyboardType:(UIKeyboardType)keyboardType
+{
+    _inputView.keyboardType = keyboardType;
+}
+-(void)setSecureTextEntry:(BOOL)secureTextEntry
+{
+    _inputView.secureTextEntry = secureTextEntry;
+}
+-(void)setEditPadding:(UIEdgeInsets)padding
+{
+    [_inputView setPadding:padding];
+}
+-(void)setEditBorder:(UIEdgeInsets)border
+{
+    [_inputView setBorder:border];
 }
 
--(void)focus
+-(void)setAttributedPlaceholder:(NSMutableAttributedString *)attributedString font:font
 {
-    if(self.inputView) {
-        [self.inputView becomeFirstResponder];
-    }
+    [_inputView setAttributedPlaceholder:attributedString];
 }
 
--(void)blur
+-(void)setFont:(UIFont *)font
 {
-    if(self.inputView) {
-        [self.inputView resignFirstResponder];
-    }
+    [_inputView setFont:font];
 }
 
--(void)setSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
+-(void)setEditSelectionRange:(NSInteger)selectionStart selectionEnd:(NSInteger)selectionEnd
 {
-    if(selectionStart>self.inputView.text.length || selectionEnd>self.inputView.text.length) {
-        return;
-    }
-    [self.inputView becomeFirstResponder];
     UITextPosition *startPos =  [self.inputView positionFromPosition:self.inputView.beginningOfDocument offset:selectionStart];
     UITextPosition *endPos = [self.inputView positionFromPosition:self.inputView.beginningOfDocument offset:selectionEnd];
     UITextRange *textRange = [self.inputView textRangeFromPosition:startPos
-                                                       toPosition:endPos];
+                                                        toPosition:endPos];
     self.inputView.selectedTextRange = textRange;
 }
 
--(void)getSelectionRange:(WXCallback)callback
+-(NSDictionary *)getEditSelectionRange
 {
     NSInteger selectionStart = [self.inputView offsetFromPosition:self.inputView.beginningOfDocument toPosition:self.inputView.selectedTextRange.start];
     NSInteger selectionEnd = [self.inputView offsetFromPosition:self.inputView.beginningOfDocument toPosition:self.inputView.selectedTextRange.end];
     NSDictionary *res = @{@"selectionStart":@(selectionStart),@"selectionEnd":@(selectionEnd)};
-    callback(res);
+    return res;
 }
 
-#pragma mark - Add Event
-- (void)addEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = YES;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = YES;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = YES;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = YES;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = YES;
-    }
-}
-
-#pragma Remove Event
-
--(void)removeEvent:(NSString *)eventName
-{
-    if ([eventName isEqualToString:@"input"]) {
-        _inputEvent = NO;
-    }
-    if ([eventName isEqualToString:@"focus"]) {
-        _focusEvent = NO;
-    }
-    if ([eventName isEqualToString:@"blur"]) {
-        _blurEvent = NO;
-    }
-    if ([eventName isEqualToString:@"change"]) {
-        _changeEvent = NO;
-    }
-    if ([eventName isEqualToString:@"return"]) {
-        _returnEvent = NO;
-    }
-}
-
-#pragma mark - upate attributes
-
-- (void)updateAttributes:(NSDictionary *)attributes
-{
-    _attr = attributes;
-    if (attributes[@"type"]) {
-        _inputType = [WXConvert NSString:attributes[@"type"]];
-        [self setType];
-    }
-    if (attributes[@"autofocus"]) {
-        self.autofocus = [attributes[@"autofocus"] boolValue];
-    }
-    if (attributes[@"disabled"]) {
-        _disabled = [attributes[@"disabled"] boolValue];
-        [_inputView setEnabled:!_disabled];
-    }
-    if (attributes[@"maxlength"]) {
-        _maxLength = [NSNumber numberWithInteger:[attributes[@"maxlength"] integerValue]];
-    }
-    if (attributes[@"placeholder"]) {
-        _placeholderString = [WXConvert NSString:attributes[@"placeholder"]]?:@"";
-        [self setPlaceholderAttributedString];
-    }
-    if (attributes[@"value"]) {
-        _value = [WXConvert NSString:attributes[@"value"]]?:@"";
-        [_inputView setText:_value];
-    }
-    if (attributes[@"returnKeyType"]) {
-        _returnKeyType = [WXConvert UIReturnKeyType:attributes[@"returnKeyType"]];
-        [_inputView setReturnKeyType:_returnKeyType];
-    }
-}
-
-#pragma mark - upate styles
-
-- (void)updateStyles:(NSDictionary *)styles
-{
-    if (styles[@"color"]) {
-        _colorForStyle = [WXConvert UIColor:styles[@"color"]];
-       [_inputView setTextColor:_colorForStyle];
-    }
-    if (styles[@"fontSize"]) {
-        _fontSize = [WXConvert WXPixelType:styles[@"fontSize"] scaleFactor:self.weexInstance.pixelScaleFactor];
-    }
-    if (styles[@"fontWeight"]) {
-        _fontWeight = [WXConvert WXTextWeight:styles[@"fontWeight"]];
-    }
-    if (styles[@"fontStyle"]) {
-        _fontStyle = [WXConvert WXTextStyle:styles[@"fontStyle"]];
-    }
-    if (styles[@"fontFamily"]) {
-        _fontFamily = [WXConvert NSString:styles[@"fontFamily"]];
-    }
-    [self setTextFont];
-    
-    if (styles[@"textAlign"]) {
-        _textAlignForStyle = [WXConvert NSTextAlignment:styles[@"textAlign"]];
-        [_inputView setTextAlignment:_textAlignForStyle] ;
-    }
-    if (styles[@"placeholderColor"]) {
-        _placeholderColor = [WXConvert UIColor:styles[@"placeholderColor"]];
-    }else {
-        _placeholderColor = [UIColor colorWithRed:0x99/255.0 green:0x99/255.0 blue:0x99/255.0 alpha:1.0];
-    }
-    [self setPlaceholderAttributedString];
-    [self updatePattern];
-    
-}
-
--(void)updatePattern
-{
-    UIEdgeInsets padding = UIEdgeInsetsMake(self.cssNode->style.padding[CSS_TOP], self.cssNode->style.padding[CSS_LEFT], self.cssNode->style.padding[CSS_BOTTOM], self.cssNode->style.padding[CSS_RIGHT]);
-    if (!UIEdgeInsetsEqualToEdgeInsets(padding, _padding)) {
-        [self setPadding:padding];
-    }
-    
-    UIEdgeInsets border = UIEdgeInsetsMake(self.cssNode->style.border[CSS_TOP], self.cssNode->style.border[CSS_LEFT], self.cssNode->style.border[CSS_BOTTOM], self.cssNode->style.border[CSS_RIGHT]);
-    if (!UIEdgeInsetsEqualToEdgeInsets(border, _border)) {
-        [self setBorder:border];
-    }
-}
-
-- (CGSize (^)(CGSize))measureBlock
-{
-    __weak typeof(self) weakSelf = self;
-    return ^CGSize (CGSize constrainedSize) {
-        
-        CGSize computedSize = [[[NSString alloc] init]sizeWithAttributes:nil];
-        //TODO:more elegant way to use max and min constrained size
-        if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_WIDTH])) {
-            computedSize.width = MAX(computedSize.width, weakSelf.cssNode->style.minDimensions[CSS_WIDTH]);
-        }
-        
-        if (!isnan(weakSelf.cssNode->style.maxDimensions[CSS_WIDTH])) {
-            computedSize.width = MIN(computedSize.width, weakSelf.cssNode->style.maxDimensions[CSS_WIDTH]);
-        }
-        
-        if (!isnan(weakSelf.cssNode->style.minDimensions[CSS_HEIGHT])) {
-            computedSize.height = MAX(computedSize.height, weakSelf.cssNode->style.minDimensions[CSS_HEIGHT]);
-        }
-        
-        if (!isnan(weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT])) {
-            computedSize.height = MIN(computedSize.height, weakSelf.cssNode->style.maxDimensions[CSS_HEIGHT]);
-        }
-        
-        return (CGSize) {
-            WXCeilPixelValue(computedSize.width),
-            WXCeilPixelValue(computedSize.height)
-        };
-    };
-}
-
-#pragma mark WXDatePickerManagerDelegate
-
--(void)fetchDatePickerValue:(NSString *)value
-{
-    _inputView.text = value;
-    if (_changeEvent) {
-        if (![[_inputView text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[_inputView text]} domChanges:@{@"attrs":@{@"value":[_inputView text]}}];
-        }
-    }
-}
-
-#pragma mark UITextFieldDelegate
-
-- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
-    if([self isDateType])
-    {
-        [[[UIApplication sharedApplication] keyWindow] endEditing:YES];
-        _changeEventString = [textField text];
-        [_datePickerManager show];
-        return NO;
-    }
-    return  YES;
-}
-
-#pragma mark UITextFieldDelegate
-
-- (void)textFieldDidBeginEditing:(UITextField *)textField
-{
-    _changeEventString = [textField text];
-    if (_focusEvent) {
-        [self fireEvent:@"focus" params:nil];
-    }
-    [self handlePseudoClass];
-}
-
-- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
-{
-    if (_maxLength) {
-        NSUInteger oldLength = [textField.text length];
-        NSUInteger replacementLength = [string length];
-        NSUInteger rangeLength = range.length;
-        
-        NSUInteger newLength = oldLength - rangeLength + replacementLength;
-        
-        return newLength <= [_maxLength integerValue] ;
-    }
-    return YES;
-}
-
-- (void)textFieldDidEndEditing:(UITextField *)textField
-{
-    if (_changeEvent) {
-        if (![[textField text] isEqualToString:_changeEventString]) {
-            [self fireEvent:@"change" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-        }
-    }
-    if (_blurEvent) {
-        [self fireEvent:@"blur" params:nil];
-    }
-    if(self.pseudoClassStyles && [self.pseudoClassStyles count]>0){
-        [self recoveryPseudoStyles:self.styles];
-    }
-}
-
-- (BOOL)textFieldShouldReturn:(UITextField *)textField
-{
-    if (_returnEvent) {
-        NSString *typeStr = [WXUtility returnKeyType:_returnKeyType];
-         [self fireEvent:@"return" params:@{@"value":[textField text],@"returnKeyType":typeStr} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-    }
-    return YES;
-}
-
-- (void)textFiledEditChanged:(NSNotification *)notifi
-{
-    if (_inputEvent) {
-        UITextField *textField = (UITextField *)notifi.object;
-        // bind each other , the key must be attrs
-        [self fireEvent:@"input" params:@{@"value":[textField text]} domChanges:@{@"attrs":@{@"value":[textField text]}}];
-    }
-}
-
-- (void)setViewMovedUp:(BOOL)movedUp
-{
-    UIView *rootView = self.weexInstance.rootView;
-    CGRect rect = self.weexInstance.frame;
-    CGRect rootViewFrame = rootView.frame;
-    CGRect inputFrame = [_inputView.superview convertRect:_inputView.frame toView:rootView];
-    if (movedUp) {
-        CGFloat offset = inputFrame.origin.y-(rootViewFrame.size.height-_keyboardSize.height-inputFrame.size.height);
-        if (offset > 0) {
-            rect = (CGRect){
-                .origin.x = 0.f,
-                .origin.y = -offset,
-                .size = rootViewFrame.size
-            };
-        }
-    }
-    self.weexInstance.rootView.frame = rect;
-}
-
-
-#pragma mark private method
-
-- (BOOL)isDateType
-{
-    if([_inputType isEqualToString:@"date"] || [_inputType isEqualToString:@"time"])
-        return YES;
-    return NO;
-}
-
-- (void)setPlaceholderAttributedString
-{
-    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:_placeholderString];
-    [attributedString addAttribute:NSForegroundColorAttributeName value:_placeholderColor range:NSMakeRange(0, _placeholderString.length)];
-    [_inputView setAttributedPlaceholder:attributedString];
-}
-
-- (void)setTextFont
-{
-    UIFont *font = [WXUtility fontWithSize:_fontSize textWeight:_fontWeight textStyle:_fontStyle fontFamily:_fontFamily scaleFactor:self.weexInstance.pixelScaleFactor];
-    [_inputView setFont:font];
-}
-
-- (void)setAutofocus:(BOOL)b
-{
-    if (b) {
-        if([self isDateType])
-        {
-            [_datePickerManager show];
-        }else
-        {
-            [_inputView becomeFirstResponder];
-        }
-    } else {
-        if([self isDateType])
-        {
-            [_datePickerManager hide];
-        }else
-        {
-            [_inputView resignFirstResponder];
-        }
-    }
-}
-
-- (void)setType
-{
-    [_inputView setKeyboardType:UIKeyboardTypeDefault];
-    [_inputView setSecureTextEntry:NO];
-    
-    if ([_inputType isEqualToString:@"text"]) {
-        [_inputView setKeyboardType:UIKeyboardTypeDefault];
-    }else if ([_inputType isEqualToString:@"password"]) {
-        [_inputView setSecureTextEntry:YES];
-    }else if ([_inputType isEqualToString:@"tel"]) {
-        [_inputView setKeyboardType:UIKeyboardTypePhonePad];
-    }else if ([_inputType isEqualToString:@"email"]) {
-        [_inputView setKeyboardType:UIKeyboardTypeEmailAddress];
-    }else if ([_inputType isEqualToString:@"url"]) {
-        [_inputView setKeyboardType:UIKeyboardTypeURL];
-    }else if ([self isDateType]) {
-        if (!_datePickerManager) {
-            _datePickerManager = [[WXDatePickerManager alloc] init];
-            _datePickerManager.delegate = self;
-        }
-        [_datePickerManager updateDatePicker:_attr];
-    }
-}
-
-- (void)setPadding:(UIEdgeInsets)padding
-{
-    _padding = padding;
-    [_inputView setPadding:padding];
-}
-
-- (void)setBorder:(UIEdgeInsets)border
-{
-    _border = border;
-    [_inputView setBorder:border];
-}
-
-#pragma mark update touch styles
--(void)handlePseudoClass
-{
-    NSMutableDictionary *styles = [NSMutableDictionary new];
-    NSMutableDictionary *recordStyles = [NSMutableDictionary new];
-    if(_disabled){
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"disabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }else {
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"enabled"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    if ([_inputView isFirstResponder]){
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[@"focus"]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    NSString *disabledStr = @"enabled";
-    if (_disabled){
-        disabledStr = @"disabled";
-    }
-    if ([_inputView isFirstResponder]) {
-        NSString *focusStr = @"focus";
-        recordStyles = [NSMutableDictionary new];
-        recordStyles = [self getPseudoClassStylesByKeys:@[focusStr,disabledStr]];
-        [styles addEntriesFromDictionary:recordStyles];
-    }
-    [self updatePseudoClassStyles:styles];
-}
-
-#pragma mark keyboard
-- (void)keyboardWasShown:(NSNotification*)notification
-{
-    if(![_inputView isFirstResponder]) {
-        return;
-    }
-    CGRect begin = [[[notification userInfo] objectForKey:@"UIKeyboardFrameBeginUserInfoKey"] CGRectValue];
-    
-    CGRect end = [[[notification userInfo] objectForKey:@"UIKeyboardFrameEndUserInfoKey"] CGRectValue];
-    if(begin.size.height <= 44) {
-        return;
-    }
-    _keyboardSize = end.size;
-    UIView * rootView = self.weexInstance.rootView;
-    CGRect screenRect = [[UIScreen mainScreen] bounds];
-    CGRect keyboardRect = (CGRect){
-        .origin.x = 0,
-        .origin.y = CGRectGetMaxY(screenRect) - _keyboardSize.height - 54,
-        .size = _keyboardSize
-    };
-    CGRect inputFrame = [_inputView.superview convertRect:_inputView.frame toView:rootView];
-    if (keyboardRect.origin.y - inputFrame.size.height <= inputFrame.origin.y) {
-        [self setViewMovedUp:YES];
-        self.weexInstance.isRootViewFrozen = YES;
-    }
-}
-
-- (void)keyboardWillHide:(NSNotification*)notification
-{
-    if (![_inputView isFirstResponder]) {
-        return;
-    }
-    UIView * rootView = self.weexInstance.rootView;
-    if (!CGRectEqualToRect(self.weexInstance.frame, rootView.frame)) {
-        [self setViewMovedUp:NO];
-        self.weexInstance.isRootViewFrozen = NO;
-    }
-}
-
-- (void)closeKeyboard
-{
-    [_inputView resignFirstResponder];
-}
-
-#pragma mark -reset color
-- (void)resetStyles:(NSArray *)styles
-{
-    if ([styles containsObject:@"color"]) {
-        [_inputView setTextColor:[UIColor blackColor]];
-    }
-    if ([styles containsObject:@"fontSize"]) {
-        _fontSize = WX_TEXT_FONT_SIZE;
-        [self setTextFont];
-    }
-}
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTransform.h b/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
index c1da09f..ddc0541 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTransform.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXTransform.m b/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
index a72f39b..29c92bc 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXTransform.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXTransform.h"
@@ -87,7 +98,7 @@
     }
     
     if (_translateX || _translateY) {
-        nativeTransform = CGAffineTransformTranslate(nativeTransform, _translateX ? [_translateX valueForMaximumValue:view.bounds.size.width] : 0,  _translateY ? [_translateY valueForMaximumValue:view.bounds.size.height] : 0);
+        nativeTransform = CGAffineTransformTranslate(nativeTransform, _translateX ? [_translateX valueForMaximum:view.bounds.size.width] : 0,  _translateY ? [_translateY valueForMaximum:view.bounds.size.height] : 0);
     }
     
     nativeTransform = CGAffineTransformScale(nativeTransform, _scaleX, _scaleY);
@@ -131,8 +142,8 @@
           * http://ronnqvi.st/translate-rotate-translate/
           **/
         CGPoint anchorPoint = CGPointMake(
-                                          _originX ? [_originX valueForMaximumValue:view.bounds.size.width] / view.bounds.size.width : 0.5,
-                                          _originY ? [_originY valueForMaximumValue:view.bounds.size.width] / view.bounds.size.height : 0.5);
+                                          _originX ? [_originX valueForMaximum:view.bounds.size.width] / view.bounds.size.width : 0.5,
+                                          _originY ? [_originY valueForMaximum:view.bounds.size.width] / view.bounds.size.height : 0.5);
         [self setAnchorPoint:anchorPoint forView:view];
     }
     
@@ -220,8 +231,8 @@
         }
     }
     
-    _originX = [WXLength lengthWithValue:originX type:typeX];
-    _originY = [WXLength lengthWithValue:originY type:typeY];
+    _originX = [WXLength lengthWithFloat:originX type:typeX];
+    _originY = [WXLength lengthWithFloat:originY type:typeY];
 }
 
 - (void)parseRotate:(NSArray *)value
@@ -235,20 +246,20 @@
     WXLength *translateX;
     double x = [value[0] doubleValue];
     if ([value[0] hasSuffix:@"%"]) {
-        translateX = [WXLength lengthWithValue:x type:WXLengthTypePercent];
+        translateX = [WXLength lengthWithFloat:x type:WXLengthTypePercent];
     } else {
         x = WXPixelScale(x, self.weexInstance.pixelScaleFactor);
-        translateX = [WXLength lengthWithValue:x type:WXLengthTypeFixed];
+        translateX = [WXLength lengthWithFloat:x type:WXLengthTypeFixed];
     }
 
     WXLength *translateY;
     if (value.count > 1) {
         double y = [value[1] doubleValue];
         if ([value[1] hasSuffix:@"%"]) {
-            translateY = [WXLength lengthWithValue:y type:WXLengthTypePercent];
+            translateY = [WXLength lengthWithFloat:y type:WXLengthTypePercent];
         } else {
             y = WXPixelScale(y, self.weexInstance.pixelScaleFactor);
-            translateY = [WXLength lengthWithValue:y type:WXLengthTypeFixed];
+            translateY = [WXLength lengthWithFloat:y type:WXLengthTypeFixed];
         }
     }
     
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
index 3f61da8..4703a7a 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m
index 5e08ab9..4011935 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXVideoComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXVideoComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
index f8ed1d0..9741ed0 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
index eb525df..cfcafb5 100644
--- a/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Component/WXWebComponent.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWebComponent.h"
@@ -23,7 +34,7 @@
 - (void)dealloc
 {
     if (self) {
-        self.delegate = nil;
+//        self.delegate = nil;
     }
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
index daf96e3..34f710a 100644
--- a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
+++ b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
@@ -15,7 +26,7 @@
  * special bundle URL.
  */
 
-@interface WXBaseViewController : UIViewController <UIGestureRecognizerDelegate>
+@interface WXBaseViewController : UIViewController
 
 /**
  * @abstract initializes the viewcontroller with bundle url.
diff --git a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
index 1523675..29e24d7 100644
--- a/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
+++ b/ios/sdk/WeexSDK/Sources/Controller/WXBaseViewController.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBaseViewController.h"
@@ -66,14 +77,13 @@
 - (void)viewDidLoad
 {
     [super viewDidLoad];
-    [self addEdgePop];
     self.view.backgroundColor = [UIColor whiteColor];
     self.automaticallyAdjustsScrollViewInsets = NO;
     [self _renderWithURL:_sourceURL];
-    
     if ([self.navigationController isKindOfClass:[WXRootViewController class]]) {
-        self.navigationController.navigationBarHidden = YES;
+        [self.navigationController setNavigationBarHidden:YES animated:YES];
     }
+
 }
 
 - (void)viewWillDisappear:(BOOL)animated
@@ -86,6 +96,7 @@
     [super viewDidAppear:animated];
     [_instance fireGlobalEvent:WX_APPLICATION_DID_BECOME_ACTIVE params:nil];
     [self _updateInstanceState:WeexInstanceAppear];
+    
 }
 
 - (void)viewDidDisappear:(BOOL)animated
@@ -106,21 +117,6 @@
     [self _renderWithURL:_sourceURL];
 }
 
-- (void)addEdgePop
-{
-    self.navigationController.interactivePopGestureRecognizer.delegate = self;
-}
-
-#pragma mark- UIGestureRecognizerDelegate
-
-- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
-{
-    if (!self.navigationController || [self.navigationController.viewControllers count] == 1) {
-        return NO;
-    }
-    return YES;
-}
-
 - (void)_renderWithURL:(NSURL *)sourceURL
 {
     if (!sourceURL) {
diff --git a/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h b/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
index 222a592..6fb6cb8 100644
--- a/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
+++ b/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m b/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m
index befb010..efe618d 100644
--- a/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m
+++ b/ios/sdk/WeexSDK/Sources/Controller/WXRootViewController.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXRootViewController.h"
@@ -12,7 +23,7 @@
 
 typedef void(^OperationBlock)(void);
 
-@interface WXRootViewController()
+@interface WXRootViewController() <UIGestureRecognizerDelegate>
 
 @property(nonatomic, strong) WXThreadSafeMutableArray *operationArray;
 @property (nonatomic, assign) BOOL operationInProcess;
@@ -21,6 +32,11 @@
 
 @implementation WXRootViewController
 
+- (void)viewDidLoad
+{
+    self.interactivePopGestureRecognizer.delegate = self;
+}
+
 - (id)initWithSourceURL:(NSURL *)sourceURL
 {
     WXBaseViewController *baseViewController = [[WXBaseViewController alloc]initWithSourceURL:sourceURL];
@@ -103,6 +119,16 @@
     }
 }
 
+#pragma mark- UIGestureRecognizerDelegate
+
+- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer
+{
+    if ([self.viewControllers count] == 1) {
+        return NO;
+    }
+    return YES;
+}
+
 - (NSMutableArray *)pendingBlocks
 {
     
diff --git a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
index 7b2a190..2277242 100644
--- a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
+++ b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
index b78c679..b599e59 100644
--- a/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
+++ b/ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDebugTool.h"
diff --git a/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h b/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
index 7c0d307..940207e 100644
--- a/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
+++ b/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m b/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m
index e54dc0e..f13c8b0 100644
--- a/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m
+++ b/ios/sdk/WeexSDK/Sources/Display/UIBezierPath+Weex.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "UIBezierPath+Weex.h"
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h
new file mode 100644
index 0000000..55ed6f6
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.h
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXComponent.h"
+#import "WXBoxShadow.h"
+
+@interface WXComponent (BoxShadow)
+
+/**
+ *  @abstract compare boxshadow
+ *
+ *  @param boxShadow
+ *
+ *  @param view
+ *
+ *  @return if not equal return NO, if equal return YES
+ */
+- (BOOL)equalBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow;
+
+/**
+ *  @abstract config view Layer with boxshadow, lastboxshadow and originalBoxShadow
+ *
+ *  @param boxShadow the boxshadow will be set
+ *
+ *
+ */
+- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow;
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m
new file mode 100644
index 0000000..a72e556
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+BoxShadow.m
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXComponent+BoxShadow.h"
+#import "WXBoxShadow.h"
+#import "WXConvert.h"
+#import "WXUtility.h"
+#import "WXComponent_internal.h"
+
+@implementation WXComponent (BoxShadow)
+
+
+- (WXBoxShadow *_Nullable)getViewBoxShadow:(UIView *_Nullable)view
+{
+    WXBoxShadow *boxShadow = [WXBoxShadow new];
+    boxShadow.shadowColor = [UIColor colorWithCGColor:view.layer.shadowColor];
+    boxShadow.shadowOffset = view.layer.shadowOffset;
+    boxShadow.shadowRadius = view.layer.shadowRadius;
+    boxShadow.shadowOpacity =  view.layer.shadowOpacity;
+    return boxShadow;
+}
+
+- (void)resetViewLayer
+{
+    UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
+    self.view.layer.masksToBounds = NO;
+    self.view.layer.shadowColor = _originalBoxShadow.shadowColor.CGColor;
+    self.view.layer.shadowOffset = _originalBoxShadow.shadowOffset;
+    self.view.layer.shadowRadius = _originalBoxShadow.shadowRadius;
+    self.view.layer.shadowOpacity = _originalBoxShadow.shadowOpacity;
+    self.view.layer.shadowPath = shadowPath.CGPath;
+    
+    
+    if (_lastBoxShadow.isInset) {
+        if (_lastBoxShadow.innerLayer) {
+            [_lastBoxShadow.innerLayer removeFromSuperlayer];
+        }
+    }
+}
+
+// if not equal return NO, if equal return YES
+- (BOOL)equalBoxShadow:(WXBoxShadow *_Nullable)boxShadow withBoxShadow:(WXBoxShadow *_Nullable)compareBoxShadow
+{
+    if(!compareBoxShadow && !boxShadow) {
+        return YES;
+    } else if (CGColorEqualToColor(boxShadow.shadowColor.CGColor,compareBoxShadow.shadowColor.CGColor) &&
+               CGSizeEqualToSize(boxShadow.shadowOffset,compareBoxShadow.shadowOffset) &&
+               WXFloatEqual(boxShadow.shadowRadius,compareBoxShadow.shadowRadius)&& (boxShadow.isInset == compareBoxShadow.isInset))
+    {
+        return YES;
+    }
+    return NO;
+    
+}
+
+- (void)configBoxShadow:(WXBoxShadow *_Nullable)boxShadow
+{
+    if (!_originalBoxShadow) {
+        _originalBoxShadow = [self getViewBoxShadow:self.view];
+    }
+    if (!boxShadow && !_lastBoxShadow) {
+        return;
+    }
+    [self resetViewLayer];
+    if (!boxShadow) {
+        return;
+    }
+    if (boxShadow.isInset) {
+        if (boxShadow.innerLayer) {
+            boxShadow.innerLayer.frame = self.view.bounds;
+            if (![boxShadow.innerLayer superlayer] ){
+                [self.view.layer addSublayer:boxShadow.innerLayer];
+            }
+        }
+    } else {
+        UIBezierPath *shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds];
+        self.view.layer.masksToBounds = NO;
+        self.view.layer.shadowColor = boxShadow.shadowColor.CGColor;
+        self.view.layer.shadowOffset = boxShadow.shadowOffset;
+        self.view.layer.shadowRadius = boxShadow.shadowRadius;
+        self.view.layer.shadowOpacity = boxShadow.shadowOpacity;
+        self.view.layer.shadowPath = shadowPath.CGPath;
+    }
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
index cf286de..864a9ac 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
index 2231d46..57594de 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXComponent+Display.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent+Display.h"
@@ -28,10 +39,10 @@
 {
     WXAssertMainThread();
     
-    if (_compositingChild) {
+    if (_isCompositingChild) {
         WXComponent *supercomponent = self.supercomponent;
         while (supercomponent) {
-            if (supercomponent->_composite) {
+            if (supercomponent->_useCompositing) {
                 break;
             }
             supercomponent = supercomponent.supercomponent;
@@ -44,54 +55,99 @@
     }
 }
 
-- (WXDisplayBlock)displayBlock
+- (BOOL)needsDrawRect
+{
+    if (_useCompositing || _isCompositingChild) {
+        return YES;
+    }
+    
+    if (![self _needsDrawBorder]) {
+        WXLogDebug(@"No need to draw border for %@", self.ref);
+        WXPerformBlockOnMainThread(^{
+            [self _resetNativeBorderRadius];
+        });
+        
+        return NO;
+    }
+    
+    return YES;
+}
+
+- (UIImage *)drawRect:(CGRect)rect
+{
+    CGSize size = rect.size;
+    if (size.width <= 0 || size.height <= 0) {
+        WXLogDebug(@"No need to draw border for %@, because width or height is zero", self.ref);
+        return nil;
+    }
+    
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    [self _drawBorderWithContext:context size:size];
+
+    return nil;
+}
+
+- (void)didFinishDrawingLayer:(BOOL)success
+{
+    WXAssertMainThread();
+}
+
+#pragma mark Private
+
+- (WXDisplayBlock)_displayBlock
 {
     WXDisplayBlock displayBlock = ^UIImage *(CGRect bounds, BOOL(^isCancelled)(void)) {
         if (isCancelled()) {
             return nil;
         }
         
-        if (![self _needsDrawBorder]) {
-            WXLogDebug(@"No need to draw border for %@", self.ref);
-            WXPerformBlockOnMainThread(^{
-                [self _resetNativeBorderRadius];
-            });
-            return nil;
+        UIGraphicsBeginImageContextWithOptions(bounds.size, [self _bitmapOpaqueWithSize:bounds.size] , 0.0);
+        UIImage *image = [self drawRect:bounds];
+        if (!image) {
+            image = UIGraphicsGetImageFromCurrentImageContext();
         }
+        UIGraphicsEndImageContext();
         
-        return [self _borderImage];
+        return image;
     };
     
     return displayBlock;
 }
 
-- (WXDisplayCompletionBlock)displayCompletionBlock
+- (WXDisplayCompletionBlock)_displayCompletionBlock
 {
-    return nil;
+    __weak typeof(self) weakSelf = self;
+    return ^(CALayer *layer, BOOL finished) {
+        [weakSelf didFinishDrawingLayer:finished];
+    };
 }
 
-#pragma mark Private
+- (void)_initCompositingAttribute:(NSDictionary *)attributes
+{
+    _useCompositing = attributes[@"compositing"] ? [WXConvert BOOL:attributes[@"compositing"]] : NO;
+}
 
 - (void)_willDisplayLayer:(CALayer *)layer
 {
     WXAssertMainThread();
     
-    if (_compositingChild) {
-        // compsiting children need not draw layer
+    if (_isCompositingChild) {
+        // compsiting children do not have own layers, so return here.
         return;
     }
     
     CGRect displayBounds = CGRectMake(0, 0, self.calculatedFrame.size.width, self.calculatedFrame.size.height);
     
+    BOOL needsDrawRect = [self needsDrawRect];
     WXDisplayBlock displayBlock;
-    if (_composite) {
+    if (_useCompositing) {
         displayBlock = [self _compositeDisplayBlock];
     } else {
-        displayBlock = [self displayBlock];
+        displayBlock = [self _displayBlock];
     }
-    WXDisplayCompletionBlock completionBlock = [self displayCompletionBlock];
+    WXDisplayCompletionBlock completionBlock = [self _displayCompletionBlock];
     
-    if (!displayBlock) {
+    if (!displayBlock || !needsDrawRect) {
         if (completionBlock) {
             completionBlock(layer, NO);
         }
@@ -146,6 +202,45 @@
     }
 }
 
+- (void)triggerDisplay
+{
+    WXPerformBlockOnMainThread(^{
+        [self _willDisplayLayer:_layer];
+    });
+}
+
+- (CGContextRef)beginDrawContext:(CGRect)bounds
+{
+    UIGraphicsBeginImageContextWithOptions(bounds.size, [self _bitmapOpaqueWithSize:bounds.size], 0.0);
+    CGContextRef context = UIGraphicsGetCurrentContext();
+    
+//    float scaleFactor = [[UIScreen mainScreen] scale];
+//    CGColorSpaceRef	colorSpace = CGColorSpaceCreateDeviceRGB();
+//    CGContextRef context = CGBitmapContextCreate(NULL, bounds.size.width * scaleFactor, bounds.size.height * scaleFactor, 8, 4 * bounds.size.width * scaleFactor, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
+//    CGContextScaleCTM(context, scaleFactor, scaleFactor);
+//
+//    // Adjusts position and invert the image.
+//    // The OpenGL uses the image data upside-down compared commom image files.
+//    CGContextTranslateCTM(context, 0, bounds.size.height);
+//    CGContextScaleCTM(context, 1.0, -1.0);
+//    
+//    CGColorSpaceRelease(colorSpace);
+    
+    return context;
+}
+
+- (UIImage *)endDrawContext:(CGContextRef)context
+{
+    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    
+//    CGImageRef imageRef= CGBitmapContextCreateImage(context);
+//    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef];
+//    CGContextRelease(context);
+    
+    return image;
+}
+
 - (WXDisplayBlock)_compositeDisplayBlock
 {
     return ^UIImage* (CGRect bounds, BOOL(^isCancelled)(void)) {
@@ -153,72 +248,60 @@
             return nil;
         }
         NSMutableArray *displayBlocks = [NSMutableArray array];
-        [self _collectDisplayBlocks:displayBlocks isCancelled:isCancelled];
         
-        BOOL opaque = _layer.opaque && CGColorGetAlpha(_backgroundColor.CGColor) == 1.0f;
+        CGContextRef context = [self beginDrawContext:bounds];
         
-        UIGraphicsBeginImageContextWithOptions(bounds.size, opaque, 0.0);
+        UIGraphicsPushContext(context);
+        
+        [self _collectCompositingDisplayBlocks:displayBlocks context:context isCancelled:isCancelled];
         
         for (dispatch_block_t block in displayBlocks) {
             if (isCancelled()) {
-                UIGraphicsEndImageContext();
+                [self endDrawContext:context];
                 return nil;
             }
             block();
         }
         
-        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-        UIGraphicsEndImageContext();
+        UIGraphicsPopContext();
         
+        UIImage *image = [self endDrawContext:context];
         return image;
     };
 }
 
-- (void)_collectDisplayBlocks:(NSMutableArray *)displayBlocks isCancelled:(BOOL(^)(void))isCancelled
+- (void)_collectCompositingDisplayBlocks:(NSMutableArray *)displayBlocks context:(CGContextRef)context isCancelled:(BOOL(^)(void))isCancelled
 {
-    // compositingChild has no chance to applyPropertiesToView, so force updateNode
-    //    if (_compositingChild) {
-    //        if (_data) {
-    //            dispatch_async(dispatch_get_main_queue(), ^{
-    //                [self updateNode:_data];
-    //            });
-    //        }
-    //    }
-    
+    // TODO: compositingChild has no chance to applyPropertiesToView, need update here?
     UIColor *backgroundColor = _backgroundColor;
     BOOL clipsToBounds = _clipToBounds;
     CGRect frame = self.calculatedFrame;
     CGRect bounds = CGRectMake(0, 0, frame.size.width, frame.size.height);
     
-    if (_composite) {
+    if (_useCompositing) {
         frame.origin = CGPointMake(0, 0);
     }
     
-    WXDisplayBlock displayBlock = [self displayBlock];
+    BOOL needsDrawRect = [self needsDrawRect];
     
-    BOOL shouldDisplay = displayBlock || backgroundColor || CGPointEqualToPoint(CGPointZero, frame.origin) == NO || clipsToBounds;
+    BOOL shouldDisplay = needsDrawRect && (backgroundColor || CGPointEqualToPoint(CGPointZero, frame.origin) == NO || clipsToBounds);
     
     if (shouldDisplay) {
         dispatch_block_t displayBlockToPush = ^{
-            CGContextRef context = UIGraphicsGetCurrentContext();
             CGContextSaveGState(context);
             CGContextTranslateCTM(context, frame.origin.x, frame.origin.y);
             
-            if (_compositingChild && clipsToBounds) {
+            if (isCancelled && isCancelled()) {
+                return ;
+            }
+            
+            if (_isCompositingChild && clipsToBounds) {
                 [[UIBezierPath bezierPathWithRect:bounds] addClip];
             }
             
-            CGColorRef backgroundCGColor = backgroundColor.CGColor;
-            if (backgroundColor && CGColorGetAlpha(backgroundCGColor) > 0.0) {
-                CGContextSetFillColorWithColor(context, backgroundCGColor);
-                CGContextFillRect(context, bounds);
-            }
-            
-            if (displayBlock) {
-                UIImage *image = displayBlock(bounds, isCancelled);
-                if (image) {
-                    [image drawInRect:bounds];
-                }
+            UIImage *image = [self drawRect:bounds];
+            if (image) {
+                [image drawInRect:bounds];
             }
         };
         [displayBlocks addObject:[displayBlockToPush copy]];
@@ -226,13 +309,12 @@
     
     for (WXComponent *component in self.subcomponents) {
         if (!isCancelled()) {
-            [component _collectDisplayBlocks:displayBlocks isCancelled:isCancelled];
+            [component _collectCompositingDisplayBlocks:displayBlocks context:context isCancelled:isCancelled];
         }
     }
     
     if (shouldDisplay) {
         dispatch_block_t blockToPop = ^{
-            CGContextRef context = UIGraphicsGetCurrentContext();
             CGContextRestoreGState(context);
         };
         [displayBlocks addObject:[blockToPop copy]];
@@ -241,26 +323,6 @@
 
 #pragma mark Border Drawing
 
-- (UIImage *)_borderImage
-{
-    CGSize size = self.calculatedFrame.size;
-    if (size.width <= 0 || size.height <= 0) {
-        WXLogDebug(@"No need to draw border for %@, because width or height is zero", self.ref);
-        return nil;
-    }
-    
-    WXLogDebug(@"Begin to draw border for %@", self.ref);
-    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
-    CGContextRef context = UIGraphicsGetCurrentContext();
-    
-    [self _drawBorderWithContext:context size:size];
-    
-    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
-    UIGraphicsEndImageContext();
-    
-    return image;
-}
-
 - (void)_drawBorderWithContext:(CGContextRef)context size:(CGSize)size
 {
     CGRect rect = CGRectMake(0, 0, size.width, size.height);
@@ -353,6 +415,10 @@
 
 - (BOOL)_needsDrawBorder
 {
+    if (_isCompositingChild) {
+        return YES;
+    }
+    
     if (![_layer isKindOfClass:[WXLayer class]]) {
         // Only support WXLayer
         return NO;
@@ -477,6 +543,7 @@
     WX_CHECK_BORDER_PROP_PIXEL(Radius, TopLeft, TopRight, BottomLeft, BottomRight)
 
     if (updating) {
+        WX_CHECK_COMPONENT_TYPE(self.componentType)
         BOOL nowNeedsDrawBorder = [self _needsDrawBorder];
         if (nowNeedsDrawBorder && !previousNeedsDrawBorder) {
             _layer.cornerRadius = 0;
@@ -491,4 +558,25 @@
     }
 }
 
+- (BOOL)_bitmapOpaqueWithSize:(CGSize)size
+{
+    CGRect rect = CGRectMake(0, 0, size.width, size.height);
+    WXRoundedRect *borderRect = [[WXRoundedRect alloc] initWithRect:rect topLeft:_borderTopLeftRadius topRight:_borderTopRightRadius bottomLeft:_borderBottomLeftRadius bottomRight:_borderBottomRightRadius];
+    WXRadii *radii = borderRect.radii;
+    BOOL hasBorderRadius = [radii hasBorderRadius];
+    return (!hasBorderRadius) && _opacity == 1.0 && CGColorGetAlpha(_backgroundColor.CGColor) == 1.0 && [self _needsDrawBorder];
+}
+
+#pragma mark - Deprecated
+
+- (WXDisplayBlock)displayBlock
+{
+    return [self _displayBlock];
+}
+
+- (WXDisplayCompletionBlock)displayCompletionBlock
+{
+    return [self _displayCompletionBlock];
+}
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h b/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
index 28fd1c0..c6a1fc7 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
+++ b/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m b/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m
index e26b921..19a25df 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXDisplayQueue.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDisplayQueue.h"
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h b/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h
new file mode 100644
index 0000000..ee33656
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import <QuartzCore/QuartzCore.h>
+
+@interface WXInnerLayer : CAGradientLayer
+
+@property CGFloat boxShadowRadius;
+@property (nonatomic,strong) UIColor *boxShadowColor;
+@property CGSize boxShadowOffset;
+@property CGFloat boxShadowOpacity;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m b/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m
new file mode 100644
index 0000000..774f320
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.m
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXInnerLayer.h"
+
+@implementation WXInnerLayer
+
+@dynamic boxShadowColor, boxShadowOffset, boxShadowRadius, boxShadowOpacity;
+
++ (BOOL)needsDisplayForKey:(NSString *)key {
+    if ([key isEqualToString:@"boxShadowRadius"]  || [key isEqualToString:@"boxShadowOffset"] || [key isEqualToString:@"boxShadowColor"] || [key isEqualToString:@"boxShadowOpacity"]) {
+        return YES;
+    }
+    return [super needsDisplayForKey:key];
+}
+
+- (id)actionForKey:(NSString *) key {
+    if ([key isEqualToString:@"boxShadowRadius"] || [key isEqualToString:@"boxShadowOffset"] ||[key isEqualToString:@"boxShadowColor"] ||  [key isEqualToString:@"boxShadowOpacity"] ) {
+        CABasicAnimation *theAnimation = [CABasicAnimation animationWithKeyPath:key];
+        theAnimation.fromValue = [self.presentationLayer valueForKey:key];
+        return theAnimation;
+    }
+    return [super actionForKey:key];
+}
+
+- (void)drawInContext:(CGContextRef)context {
+    CGFloat radius = self.cornerRadius;
+    
+    CGRect rect = self.bounds;
+    if (self.borderWidth != 0) {
+        rect = CGRectInset(rect, self.borderWidth, self.borderWidth);
+        radius -= self.borderWidth;
+        radius = MAX(radius, 0);
+    }
+    
+    CGContextSetAllowsAntialiasing(context, YES);
+    CGContextSetShouldAntialias(context, YES);
+    CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
+    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
+    
+    UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:rect cornerRadius:radius];
+    CGContextAddPath(context, bezierPath.CGPath);
+    CGContextClip(context);
+    CGMutablePathRef outer = CGPathCreateMutable();
+    CGPathAddRect(outer, NULL, CGRectInset(rect, -1*rect.size.width, -1*rect.size.height));
+    CGPathAddPath(outer, NULL, bezierPath.CGPath);
+    CGPathCloseSubpath(outer);
+    CGFloat *oldComponents = (CGFloat *)CGColorGetComponents(self.boxShadowColor.CGColor);
+    CGFloat newComponents[4];
+    NSInteger numberOfComponents = CGColorGetNumberOfComponents(self.boxShadowColor.CGColor);
+    switch (numberOfComponents)
+    {
+        case 2:
+        {
+            //grayscale
+            newComponents[0] = oldComponents[0];
+            newComponents[1] = oldComponents[0];
+            newComponents[2] = oldComponents[0];
+            newComponents[3] = oldComponents[1] * self.boxShadowOpacity;
+            break;
+        }
+        case 4:
+        {
+            //RGBA
+            newComponents[0] = oldComponents[0];
+            newComponents[1] = oldComponents[1];
+            newComponents[2] = oldComponents[2];
+            newComponents[3] = oldComponents[3] * self.boxShadowOpacity;
+            break;
+        }
+    }
+    CGColorRef shadowColorWithMultipliedAlpha = CGColorCreate(colorspace, newComponents);
+    CGColorSpaceRelease(colorspace);
+    CGContextSetFillColorWithColor(context, shadowColorWithMultipliedAlpha);
+    CGContextSetShadowWithColor(context, self.boxShadowOffset, self.boxShadowRadius, shadowColorWithMultipliedAlpha);
+    CGContextAddPath(context, outer);
+    CGContextEOFillPath(context);
+    CGPathRelease(outer);
+    CGColorRelease(shadowColorWithMultipliedAlpha);
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXLayer.h b/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
index 6a370b1..7886c82 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
+++ b/ios/sdk/WeexSDK/Sources/Display/WXLayer.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <QuartzCore/QuartzCore.h>
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXLayer.m b/ios/sdk/WeexSDK/Sources/Display/WXLayer.m
index 6929354..d293d6d 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXLayer.m
+++ b/ios/sdk/WeexSDK/Sources/Display/WXLayer.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXLayer.h"
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h b/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
index 9cabf8e..0efe73d 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
+++ b/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
@@ -17,6 +28,10 @@
 @property (nonatomic, assign) CGFloat bottomLeft;
 @property (nonatomic, assign) CGFloat bottomRight;
 
+- (BOOL)hasBorderRadius;
+
+- (BOOL)radiusesAreEqual;
+
 @end
 
 @interface WXRoundedRect : NSObject
diff --git a/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm b/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm
index ae535dd..7636d9d 100644
--- a/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm
+++ b/ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.mm
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXRoundedRect.h"
@@ -26,6 +37,16 @@
     return self;
 }
 
+- (BOOL)hasBorderRadius
+{
+    return _topLeft > 0.001 || _topRight > 0.001 || _bottomLeft > 0.001 || _bottomRight > 0.001;
+}
+
+- (BOOL)radiusesAreEqual
+{
+    return _topLeft == _topRight && _topRight == _bottomRight && _bottomRight == _bottomLeft;
+}
+
 - (void)scale:(float)factor
 {
     if (factor == 1) {
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
index 8e54593..32a26d1 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
index 1e0e7a3..3571d95 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSDKEngine.h"
@@ -72,6 +83,8 @@
     [self registerComponent:@"image" withClass:NSClassFromString(@"WXImageComponent") withProperties:nil];
     [self registerComponent:@"scroller" withClass:NSClassFromString(@"WXScrollerComponent") withProperties:nil];
     [self registerComponent:@"list" withClass:NSClassFromString(@"WXListComponent") withProperties:nil];
+    [self registerComponent:@"recycler" withClass:NSClassFromString(@"WXRecyclerComponent") withProperties:nil];
+    [self registerComponent:@"waterfall" withClass:NSClassFromString(@"WXRecyclerComponent") withProperties:nil];
     
     [self registerComponent:@"header" withClass:NSClassFromString(@"WXHeaderComponent")];
     [self registerComponent:@"cell" withClass:NSClassFromString(@"WXCellComponent")];
@@ -84,6 +97,7 @@
     [self registerComponent:@"video" withClass:NSClassFromString(@"WXVideoComponent")];
     [self registerComponent:@"indicator" withClass:NSClassFromString(@"WXIndicatorComponent")];
     [self registerComponent:@"slider" withClass:NSClassFromString(@"WXSliderComponent")];
+    [self registerComponent:@"cycleslider" withClass:NSClassFromString(@"WXCycleSliderComponent")];
     [self registerComponent:@"web" withClass:NSClassFromString(@"WXWebComponent")];
     [self registerComponent:@"loading" withClass:NSClassFromString(@"WXLoadingComponent")];
     [self registerComponent:@"loading-indicator" withClass:NSClassFromString(@"WXLoadingIndicator")];
@@ -167,15 +181,11 @@
 
 + (void)initSDKEnvironment
 {
-    WX_MONITOR_PERF_START(WXPTInitalize)
-    WX_MONITOR_PERF_START(WXPTInitalizeSync)
     
     NSString *filePath = [[NSBundle bundleForClass:self] pathForResource:@"main" ofType:@"js"];
     NSString *script = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
     [WXSDKEngine initSDKEnvironment:script];
     
-    WX_MONITOR_PERF_END(WXPTInitalizeSync)
-    
 #if TARGET_OS_SIMULATOR
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
@@ -204,6 +214,10 @@
 
 + (void)initSDKEnvironment:(NSString *)script
 {
+    
+    WX_MONITOR_PERF_START(WXPTInitalize)
+    WX_MONITOR_PERF_START(WXPTInitalizeSync)
+    
     if (!script || script.length <= 0) {
         WX_MONITOR_FAIL(WXMTJSFramework, WX_ERR_JSFRAMEWORK_LOAD, @"framework loading is failure!");
         return;
@@ -213,6 +227,9 @@
         [self registerDefaults];
         [[WXSDKManager bridgeMgr] executeJsFramework:script];
     });
+    
+    WX_MONITOR_PERF_END(WXPTInitalizeSync)
+    
 }
 
 + (void)registerDefaults
diff --git a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
index 851194d..d17901d 100644
--- a/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
+++ b/ios/sdk/WeexSDK/Sources/Engine/WXSDKError.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
index 11d2c88..00500da 100644
--- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
+++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
index 985af01..4af469e 100644
--- a/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
+++ b/ios/sdk/WeexSDK/Sources/Events/WXComponent+Events.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent+Events.h"
@@ -159,6 +170,10 @@
     WX_ADD_EVENT(touchend, addTouchEndEvent)
     WX_ADD_EVENT(touchcancel, addTouchCancelEvent)
     
+    if(_isListenPseudoTouch) {
+        self.touchGesture.listenPseudoTouch = YES;
+    }
+    
     [self addEvent:addEventName];
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h b/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
index 8fb1370..7cd156d 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m b/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m
index 88f8bf8..d57bf8b 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXNavigationDefaultImpl.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXNavigationDefaultImpl.h"
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h b/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
index 09936ef..7a9b1f3 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m b/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m
index 0b209a1..3e8950a 100644
--- a/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m
+++ b/ios/sdk/WeexSDK/Sources/Handler/WXURLRewriteDefaultImpl.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXURLRewriteDefaultImpl.h"
diff --git a/ios/sdk/WeexSDK/Sources/Layout/Layout.c b/ios/sdk/WeexSDK/Sources/Layout/Layout.c
index 87349eb..07b25cc 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/Layout.c
+++ b/ios/sdk/WeexSDK/Sources/Layout/Layout.c
@@ -700,6 +700,9 @@
     float maxHeight = CSS_UNDEFINED;
     for (i = startLine; i < childCount; ++i) {
       child = node->get_child(node->context, i);
+        if (child == NULL) {
+            return;
+        }
       child->line_index = linesCount;
 
       child->next_absolute_child = NULL;
diff --git a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
index bd6feca..f5becf2 100644
--- a/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
+++ b/ios/sdk/WeexSDK/Sources/Layout/WXComponent+Layout.m
@@ -12,6 +12,7 @@
 #import "WXAssert.h"
 #import "WXComponent_internal.h"
 #import "WXSDKInstance_private.h"
+#import "WXComponent+BoxShadow.h"
 
 @implementation WXComponent (Layout)
 
@@ -116,13 +117,26 @@
                 strongSelf.layer.transform = CATransform3DIdentity;
             }
             
-            strongSelf.view.frame = strongSelf.calculatedFrame;
+            if (!CGRectEqualToRect(strongSelf.view.frame,strongSelf.calculatedFrame)) {
+                strongSelf.view.frame = strongSelf.calculatedFrame;
+                [strongSelf configBoxShadow:_boxShadow];
+            } else {
+                if (![strongSelf equalBoxShadow:_boxShadow withBoxShadow:_lastBoxShadow]) {
+                    [strongSelf configBoxShadow:_boxShadow];
+                }
+            }
+            
+            [self _resetNativeBorderRadius];
             
             if (strongSelf->_transform) {
                 [strongSelf->_transform applyTransformForView:strongSelf.view];
             }
             
+            if (strongSelf->_backgroundImage) {
+                [strongSelf setGradientLayer];
+            }
             [strongSelf setNeedsDisplay];
+            [strongSelf _configWXComponentA11yWithAttributes:nil];
         }];
     }
 }
@@ -190,7 +204,6 @@
     if (_positionType == WXPositionTypeSticky) {
         [self.ancestorScroller adjustSticky];
     }
-    
     [self layoutDidFinish];
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h b/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
index 8b77a2c..869bc7f 100644
--- a/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
+++ b/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m b/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m
index 24609ac..592cb3a 100644
--- a/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m
+++ b/ios/sdk/WeexSDK/Sources/Loader/WXResourceLoader.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 #import "WXResourceLoader.h"
 #import "WXResourceRequestHandler.h"
@@ -171,4 +182,10 @@
     _response = nil;
 }
 
+- (void)request:(WXResourceRequest *)request didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
+{
+    WXLogDebug(@"request:%@ didFinishCollectingMetrics", request);
+}
+
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h b/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
index 81e8514..378a85e 100644
--- a/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
+++ b/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m b/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m
index 16b1e9a..c751c0a 100644
--- a/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m
+++ b/ios/sdk/WeexSDK/Sources/Loader/WXWebSocketLoader.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWebSocketLoader.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
index 9626e82..efe0410 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
index 9d7a60b..07762ed 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXBridgeManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXBridgeManager.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
index fae9715..9ff7034 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m
index 79df5b8..aa79bad 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponentFactory.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
index 9e72f4b..e6b1f1d 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 @class WXBridgeMethod;
@@ -141,6 +152,10 @@
  **/
 - (void)unload;
 
+/**
+ * @abstract invalidate component management, this can be called on main thread.
+ **/
+- (void)invalidate;
 
 ///--------------------------------------
 /// @name Fixed
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
index f9e8fcc..b4a29e3 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponentManager.h"
@@ -20,6 +31,8 @@
 #import "WXSDKManager.h"
 #import "WXSDKError.h"
 #import "WXInvocationConfig.h"
+#import "WXHandlerFactory.h"
+#import "WXValidateProtocol.h"
 
 static NSThread *WXComponentThread;
 
@@ -130,10 +143,10 @@
     if (_rootCSSNode) {
         [self _applyRootFrame:frame toRootCSSNode:_rootCSSNode];
         if (!_rootComponent.styles[@"width"]) {
-            _rootComponent.cssNode->style.dimensions[CSS_WIDTH] = frame.size.width;
+            _rootComponent.cssNode->style.dimensions[CSS_WIDTH] = frame.size.width ?: CSS_UNDEFINED;
         }
         if (!_rootComponent.styles[@"height"]) {
-            _rootComponent.cssNode->style.dimensions[CSS_HEIGHT] = frame.size.height;
+            _rootComponent.cssNode->style.dimensions[CSS_HEIGHT] = frame.size.height ?: CSS_UNDEFINED;
         }
         [_rootComponent setNeedsLayout];
         [self startComponentTasks];
@@ -185,7 +198,7 @@
     WXComponentManager *manager = (__bridge WXComponentManager *)(context);
     if (i == 0) {
         return manager->_rootComponent.cssNode;
-    } else if(manager->_fixedComponents.count > 0) {
+    } else if(manager->_fixedComponents.count >= i) {
         return ((WXComponent *)((manager->_fixedComponents)[i-1])).cssNode;
     }
     
@@ -207,8 +220,11 @@
 - (void)_recursivelyAddComponent:(NSDictionary *)componentData toSupercomponent:(WXComponent *)supercomponent atIndex:(NSInteger)index appendingInTree:(BOOL)appendingInTree
 {
     WXComponent *component = [self _buildComponentForData:componentData];
-    
-    index = (index == -1 ? supercomponent->_subcomponents.count : index);
+    if (!supercomponent.subcomponents) {
+        index = 0;
+    } else {
+        index = (index == -1 ? supercomponent->_subcomponents.count : index);
+    }
     
     [supercomponent _insertSubcomponent:component atIndex:index];
     // use _lazyCreateView to forbid component like cell's view creating
@@ -319,6 +335,17 @@
     NSDictionary *attributes = data[@"attr"];
     NSArray *events = data[@"event"];
     
+    if (self.weexInstance.needValidate) {
+        id<WXValidateProtocol> validateHandler = [WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)];
+        if (validateHandler) {
+            WXComponentValidateResult* validateResult =  [validateHandler validateWithWXSDKInstance:self.weexInstance component:type];
+            if (validateResult && !validateResult.isSuccess) {
+                type = validateResult.replacedComponent? validateResult.replacedComponent : @"div";
+                WXLogError(@"%@",[validateResult.error.userInfo objectForKey:@"errorMsg"]);
+            }
+        }
+    }
+
     Class clazz = [WXComponentFactory classWithComponentName:type];
     WXComponent *component = [[clazz alloc] initWithRef:ref type:type styles:styles attributes:attributes events:events weexInstance:self.weexInstance];
     WXAssert(component, @"Component build failed for data:%@", data);
@@ -523,6 +550,11 @@
     _isValid = NO;
 }
 
+- (void)invalidate
+{
+    _isValid = NO;
+}
+
 - (BOOL)isValid
 {
     return _isValid;
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
index 5f7e4c9..556d366 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m
index 7348d66..73c5d3c 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXDatePickerManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDatePickerManager.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h b/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
index 14cd6df..a733c6d 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m b/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m
index 2703883..7bbbbe4 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXHandlerFactory.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXHandlerFactory.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h b/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
index 1bcef92..ba3f014 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -20,7 +31,6 @@
 @property (nonatomic, strong) NSMutableDictionary *asyncMethods;
 @property (nonatomic, strong) NSMutableDictionary *syncMethods;
 
-+ (instancetype)sharedInstance;
 - (instancetype)initWithName:(NSString *)name class:(NSString *)clazz;
 - (void)registerMethods;
 
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m b/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m
index e725fc1..809279b 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXInvocationConfig.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXInvocationConfig.h"
@@ -24,17 +35,6 @@
 
 @implementation WXInvocationConfig
 
-+ (instancetype)sharedInstance
-{
-    static id _sharedInstance;
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        _sharedInstance = [[self alloc] init];
-    });
-    
-    return _sharedInstance;
-}
-
 - (instancetype)init
 {
     
@@ -106,5 +106,4 @@
     
 }
 
-
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h b/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
index e96c89b..c4c13fc 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m b/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m
index cafef5e..a2b9963 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXModuleFactory.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleFactory.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
index bb77cb2..dab77ca 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m
index 4bc94fd..461aad3 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXRuleManager.h"
@@ -104,7 +115,10 @@
                     // load success
                     NSMutableDictionary * dictForFontFamily = [weakSelf.fontStorage objectForKey:rule[@"fontFamily"]];
                     NSString *fontSrc = [dictForFontFamily objectForKey:@"tempSrc"];
-                    [dictForFontFamily setObject:fontSrc forKey:@"src"];
+                    if (fontSrc) {
+                        // only remote font will be mark as tempSrc
+                        [dictForFontFamily setObject:fontSrc forKey:@"src"];
+                    }
                     [dictForFontFamily setObject:url forKey:@"localSrc"];
                     
                     [[NSNotificationCenter defaultCenter] postNotificationName:WX_ICONFONT_DOWNLOAD_NOTIFICATION object:nil userInfo:@{@"fontFamily":rule[@"fontFamily"]}];
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h b/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
index 0f90420..b0e705f 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m b/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m
index 071bc2b..3be2e5f 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXSDKManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSDKManager.h"
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h b/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
index f511c46..d65ca31 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m b/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m
index 7cc0782..eddbf58 100644
--- a/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m
+++ b/ios/sdk/WeexSDK/Sources/Manager/WXServiceFactory.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXServiceFactory.h"
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h b/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
index f3af407..63c4a5a 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m
index 7313e4d..df205d7 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent+Navigation.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent+Navigation.h"
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
index a2f75d7..ee8d619 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.h
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
 #import "WXLayoutDefine.h"
+#import "WXType.h"
 
 @class WXSDKInstance;
 
@@ -61,6 +73,11 @@
 @property (nonatomic, readonly, copy) NSString *type;
 
 /**
+ *  @abstract The component's type.
+ */
+@property (nonatomic, assign) WXComponentType componentType;
+
+/**
  *  @abstract The component's styles.
  */
 @property (nonatomic, readonly, strong) NSDictionary *styles;
@@ -324,26 +341,73 @@
 /// @name Display
 ///--------------------------------------
 
-typedef UIImage * _Nonnull(^WXDisplayBlock)(CGRect bounds, BOOL(^isCancelled)(void));
-typedef void(^WXDisplayCompletionBlock)(CALayer *layer, BOOL finished);
-
 /**
  * @abstract Marks the view as needing display. The method should be called on the main thread.
+ * @discussion You can use this method to notify the system that your component's contents need to be redrawn. This method makes a note of the request and returns immediately. The component is not actually redrawn until the next drawing cycle, at which point all invalidated components are updated.
+ *
  */
 - (void)setNeedsDisplay;
 
 /**
+ * @abstract Returns a Boolean indicating whether the component needs to be drawn by `drawRect:`
+ */
+- (BOOL)needsDrawRect;
+
+/**
+ * @abstract Draws the component’s image within the passed-in rectangle.
+ * @parameter rect The rectangle which is the entire visible bounds of your component. 
+ * @return A UIImage containing the contents of the current bitmap graphics context.
+ * @discussion 
+ * Subclasses that use technologies such as Core Graphics and UIKit to draw their own component’s content should override this method and implement their drawing code there. You do not need to override this method if your component sets its content in superclass's way.
+ * By the time this method is called, UIKit has configured the drawing environment appropriately for your view and you can simply call whatever drawing methods and functions you need to render your content. Specifically, Weex creates and configures a graphics context for drawing and adjusts the transform of that context so that its origin matches the origin of your components’s bounds rectangle. You can get a reference to the graphics context using the `UIGraphicsGetCurrentContext` function, but do not establish a strong reference to the graphics context because it can change between calls to the drawRect: method.
+ * If you already have an image that represents the content of the component, then you should just return the image and do no drawing, otherwise you should draw your content in the current context and return nil.
+ * You should never call this method directly yourself. To invalidate part of your component's content, and thus cause that portion to be redrawn, call the `setNeedsDisplay` method instead.
+ */
+- (UIImage *)drawRect:(CGRect)rect;
+
+/**
+ * @abstract Called when a component finishes drawing its content.
+ * @discussion Do not call this method directly. Weex calls this method at appropriate times to finish updating the component's content.
+ * Subclasses can override this method to perform additional work on components that were rendered.
+ */
+- (void)didFinishDrawingLayer:(BOOL)success;
+
+/**
+ * readyToRender, do not use it, will be deprecated soon
+ */
+- (void)readyToRender;
+
+/**
+ * @abstract trigger display if you do not have a WXLayer
+ */
+- (void)triggerDisplay;
+
+/**
+ * @abstract Creates a  graphics context with the specified bounds, the context will be used for `drawRect:` in compositing environment
+ * @discussion You can override this method to use your own graphics context.
+ */
+- (CGContextRef)beginDrawContext:(CGRect)bounds;
+
+/**
+ * @abstract Removes the current graphics context and returns an image based on the contents of the current graphics context.
+ * @discussion You can override this method to use your own graphics context. The image will be set to layer,  if your drawing system do not have layer and do not need image, returning nil is fine.
+ */
+- (UIImage *)endDrawContext:(CGContextRef)context;
+
+@end
+
+@interface WXComponent (Deprecated)
+
+typedef UIImage * _Nonnull(^WXDisplayBlock)(CGRect bounds, BOOL(^isCancelled)(void));
+typedef void(^WXDisplayCompletionBlock)(CALayer *layer, BOOL finished);
+
+/**
  * @abstract Return a block to be called to draw layer.
  *
  * @discussion The block returned will be called on any thread.
  *
  */
-- (WXDisplayBlock)displayBlock;
-
-/**
- * readyToRender
- */
-- (void)readyToRender;
+- (WXDisplayBlock)displayBlock DEPRECATED_MSG_ATTRIBUTE("use drawRect: method instead.");
 
 /**
  * @abstract Return a block to be called while drawing is finished.
@@ -351,7 +415,8 @@
  * @discussion The block returned will be called on main thread.
  *
  */
-- (WXDisplayCompletionBlock)displayCompletionBlock;
+- (WXDisplayCompletionBlock)displayCompletionBlock DEPRECATED_MSG_ATTRIBUTE("use didFinishDrawingLayer: method instead.");
+
 
 @end
 
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
index 76ca9b0..e563f82 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXComponent.m
@@ -1,14 +1,24 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
 #import "WXComponent_internal.h"
-#import "WXComponent+GradientColor.h"
 #import "WXComponentManager.h"
 #import "WXSDKManager.h"
 #import "WXSDKInstance.h"
@@ -26,6 +36,7 @@
 #import "WXRoundedRect.h"
 #import <pthread/pthread.h>
 #import "WXComponent+PseudoClassManagement.h"
+#import "WXComponent+BoxShadow.h"
 
 #pragma clang diagnostic ignored "-Wincomplete-implementation"
 #pragma clang diagnostic ignored "-Wobjc-protocol-method-implementation"
@@ -68,6 +79,7 @@
         _ref = ref;
         _type = type;
         _weexInstance = weexInstance;
+        _componentType = WXComponentTypeCommon;
         _styles = [self parseStyles:styles];
         _attributes = attributes ? [NSMutableDictionary dictionaryWithDictionary:attributes] : [NSMutableDictionary dictionary];
         _events = events ? [NSMutableArray arrayWithArray:events] : [NSMutableArray array];
@@ -95,6 +107,7 @@
         [self _setupNavBarWithStyles:_styles attributes:_attributes];
         [self _initCSSNodeWithStyles:_styles];
         [self _initViewPropertyWithStyles:_styles];
+        [self _initCompositingAttribute:_attributes];
         [self _handleBorders:styles isUpdating:NO];
     }
     
@@ -167,20 +180,23 @@
 
 - (NSString *)description
 {
-    return [NSString stringWithFormat:@"<%@ ref=%@> %@", _type, _ref, _view];
+    return [NSString stringWithFormat:@"<%@:%p ref=%@> %@", _type, self, _ref, _view];
 }
 
 #pragma mark Property
 
 - (UIView *)view
 {
+    if (_componentType != WXComponentTypeCommon) {
+        return nil;
+    }
     if ([self isViewLoaded]) {
         return _view;
     } else {
         WXAssertMainThread();
         
         // compositing child will be drew by its composited ancestor
-        if (_compositingChild) {
+        if (_isCompositingChild) {
             return nil;
         }
         
@@ -201,7 +217,7 @@
             _layer.opacity = _opacity;
             _view.backgroundColor = _backgroundColor;
         }
-        
+
         if (_backgroundImage) {
             [self setGradientLayer];
         }
@@ -210,10 +226,16 @@
             [_transform applyTransformForView:_view];
         }
         
+        if (_boxShadow) {
+            [self configBoxShadow:_boxShadow];
+        }
+        
         _view.wx_component = self;
         _view.wx_ref = self.ref;
         _layer.wx_component = self;
         
+        [self _configWXComponentA11yWithAttributes:_attributes];
+        
         [self _initEvents:self.events];
         [self _initPseudoEvents:_isListenPseudoTouch];
         
@@ -231,7 +253,7 @@
         if (_lazyCreateView) {
             [self _buildViewHierarchyLazily];
         }
-        
+
         [self _handleFirstScreenTime];
         
         return _view;
@@ -326,6 +348,10 @@
         subcomponent->_isNeedJoinLayoutSystem = NO;
     }
     
+    if (_useCompositing || _isCompositingChild) {
+        subcomponent->_isCompositingChild = YES;
+    }
+    
     [self _recomputeCSSNodeChildren];
     [self setNeedsLayout];
 }
@@ -423,6 +449,7 @@
     [self _updateNavBarAttributes:attributes];
     
     [self updateAttributes:attributes];
+    [self _configWXComponentA11yWithAttributes:attributes];
 }
 
 - (void)updateStyles:(NSDictionary *)styles
@@ -440,6 +467,67 @@
 - (void)updateAttributes:(NSDictionary *)attributes
 {
     WXAssertMainThread();
+    
+}
+
+- (void)setGradientLayer
+{
+    if (CGRectEqualToRect(self.view.frame, CGRectZero)) {
+        return;
+    }
+    NSDictionary * linearGradient = [WXUtility linearGradientWithBackgroundImage:_backgroundImage];
+    if (!linearGradient) {
+        return ;
+    }
+    
+    __weak typeof(self) weakSelf = self;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        __strong typeof(self) strongSelf = weakSelf;
+        if(strongSelf) {
+            UIColor * startColor = (UIColor*)linearGradient[@"startColor"];
+            UIColor * endColor = (UIColor*)linearGradient[@"endColor"];
+            CAGradientLayer * gradientLayer = [WXUtility gradientLayerFromColors:@[startColor, endColor] locations:nil frame:strongSelf.view.bounds gradientType:[linearGradient[@"gradientType"] integerValue]];
+            if (gradientLayer) {
+                _backgroundColor = [UIColor colorWithPatternImage:[strongSelf imageFromLayer:gradientLayer]];
+                strongSelf.view.backgroundColor = _backgroundColor;
+            }
+        }
+    });
+}
+
+- (void)_configWXComponentA11yWithAttributes:(NSDictionary *)attributes
+{
+    WX_CHECK_COMPONENT_TYPE(self.componentType)
+    if (attributes[@"role"]){
+        _role = [WXConvert WXUIAccessibilityTraits:attributes[@"role"]];
+        self.view.accessibilityTraits = _role;
+    }
+    if (attributes[@"ariaHidden"]) {
+        _ariaHidden = [WXConvert BOOL:attributes[@"ariaHidden"]];
+        self.view.accessibilityElementsHidden = _ariaHidden;
+    }
+    if (attributes[@"ariaLabel"]) {
+        _ariaLabel = [WXConvert NSString:attributes[@"ariaLabel"]];
+        self.view.accessibilityValue = _ariaLabel;
+    }
+    
+    if (attributes[@"testId"]) {
+        [self.view setAccessibilityIdentifier:[WXConvert NSString:attributes[@"testId"]]];
+    }
+    
+    // set accessibilityFrame for view which has no subview
+    if (0 == [self.subcomponents count]) {
+        self.view.isAccessibilityElement = YES;
+    }
+}
+
+- (UIImage *)imageFromLayer:(CALayer *)layer
+{
+    UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0);
+    [layer renderInContext:UIGraphicsGetCurrentContext()];
+    UIImage *outputImage = UIGraphicsGetImageFromCurrentImageContext();
+    UIGraphicsEndImageContext();
+    return outputImage;
 }
 
 #pragma mark Reset
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
index 84a0b51..b800a87 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m
index 912e6ab..3a6116d 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXJSExceptionInfo.m
@@ -1,11 +1,20 @@
-//
-//  WXJSException.m
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXJSExceptionInfo.h"
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
index 3e4b71b..3b09834 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.h
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
 #import "WXComponent.h"
+#import "WXJSExceptionInfo.h"
 @class WXResourceRequest;
 
 extern NSString *const bundleUrlOptionKey;
@@ -32,6 +44,11 @@
 @property (nonatomic, assign) BOOL isRootViewFrozen;
 
 /**
+ * Which indicates current instance needs to be validated or not to load,default value is false.
+ **/
+@property (nonatomic, assign) BOOL needValidate;
+
+/**
  * The scriptURL of weex bundle.
  **/
 @property (nonatomic, strong) NSURL *scriptURL;
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
index c0e67f7..85ca4e2 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSDKInstance.h"
@@ -26,6 +37,7 @@
 #import "WXResourceResponse.h"
 #import "WXResourceLoader.h"
 #import "WXSDKEngine.h"
+#import "WXValidateProtocol.h"
 
 NSString *const bundleUrlOptionKey = @"bundleUrl";
 
@@ -126,6 +138,8 @@
         return;
     }
     
+    self.needValidate = [[WXHandlerFactory handlerForProtocol:@protocol(WXValidateProtocol)] needValidate:url];
+    
     WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeMainBundle referrer:@"" cachePolicy:NSURLRequestUseProtocolCachePolicy];
     [self _renderWithRequest:request options:options data:data];
 }
@@ -290,6 +304,9 @@
     
     [[WXSDKManager bridgeMgr] destroyInstance:self.instanceId];
 
+    if (_componentManager) {
+        [_componentManager invalidate];
+    }
     __weak typeof(self) weakSelf = self;
     WXPerformBlockOnComponentThread(^{
         __strong typeof(self) strongSelf = weakSelf;
@@ -439,7 +456,11 @@
         //had not registered yet
         observer = [NSMutableDictionary new];
         [observer setObject:[@{event:[@[callbackInfo] mutableCopy]} mutableCopy] forKey:moduleClassName];
-        [_moduleEventObservers addEntriesFromDictionary:observer];
+        if (_moduleEventObservers[moduleClassName]) { //support multi event
+            [_moduleEventObservers[moduleClassName] addEntriesFromDictionary:observer[moduleClassName]];
+        }else {
+            [_moduleEventObservers addEntriesFromDictionary:observer];
+        }
     } else {
         observer = _moduleEventObservers[moduleClassName];
         [[observer objectForKey:event] addObject:callbackInfo];
diff --git a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
index 0bddbf9..93343b1 100644
--- a/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
+++ b/ios/sdk/WeexSDK/Sources/Model/WXSDKInstance_private.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
index de2f758..ae7f068 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
index c1fea40..2b30805 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXAnimationModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXAnimationModule.h"
@@ -23,6 +34,7 @@
 @property (nonatomic, assign) double duration;
 @property (nonatomic, assign) double delay;
 @property (nonatomic, strong) CAMediaTimingFunction *timingFunction;
+@property (nonatomic, assign) CGPoint originAnchorPoint;
 
 @end
 
@@ -73,6 +85,10 @@
 
 - (void)animationDidStart:(CAAnimation *)anim
 {
+    if (!_animationInfo.target || ![_animationInfo.target isViewLoaded]) {
+        return;
+    }
+    
     if ([_animationInfo.propertyName hasPrefix:@"transform"]) {
         WXTransform *transform = _animationInfo.target->_transform;
         [transform applyTransformForView:_animationInfo.target.view];
@@ -80,11 +96,34 @@
         _animationInfo.target.view.layer.backgroundColor = (__bridge CGColorRef _Nullable)(_animationInfo.toValue);
     } else if ([_animationInfo.propertyName isEqualToString:@"opacity"]) {
         _animationInfo.target.view.layer.opacity = [_animationInfo.toValue floatValue];
+    } else if ([_animationInfo.propertyName hasPrefix:@"bounds.size"]) {
+        CGRect newBounds = _animationInfo.target.view.layer.bounds;
+        if ([_animationInfo.propertyName isEqualToString:@"bounds.size.width"]) {
+            newBounds.size = CGSizeMake([_animationInfo.toValue floatValue], newBounds.size.height);
+        }else if ([_animationInfo.propertyName isEqualToString:@"bounds.size.height"]) {
+            newBounds.size = CGSizeMake(newBounds.size.width,[_animationInfo.toValue floatValue]);
+        }
+        _animationInfo.target.view.layer.bounds = newBounds;
     }
 }
 
 - (void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag
 {
+    if (!_animationInfo.target) {
+        return;
+    }
+    
+    if ([_animationInfo.propertyName hasPrefix:@"bounds.size"]) {
+        /*
+         * http://ronnqvi.st/about-the-anchorpoint/
+         */
+        //
+        CGRect originFrame = _animationInfo.target.view.layer.frame;
+        _animationInfo.target.view.layer.anchorPoint = _animationInfo.originAnchorPoint;
+        _animationInfo.target.view.layer.frame = originFrame;
+    }
+    [_animationInfo.target.layer removeAllAnimations];
+    
     if (_finishBlock) {
         _finishBlock(flag);
     }
@@ -172,16 +211,16 @@
             if ((wxTransform.translateX && ![wxTransform.translateX isEqualToLength:oldTransform.translateX]) || (!wxTransform.translateX && oldTransform.translateX)) {
                 WXAnimationInfo *newInfo = [info copy];
                 newInfo.propertyName = @"transform.translation.x";
-                newInfo.fromValue = @([oldTransform.translateX valueForMaximumValue:view.bounds.size.width]);
-                newInfo.toValue = @([wxTransform.translateX valueForMaximumValue:view.bounds.size.width]);
+                newInfo.fromValue = @([oldTransform.translateX valueForMaximum:view.bounds.size.width]);
+                newInfo.toValue = @([wxTransform.translateX valueForMaximum:view.bounds.size.width]);
                 [infos addObject:newInfo];
             }
             
             if ((wxTransform.translateY && ![wxTransform.translateY isEqualToLength:oldTransform.translateY]) || (!wxTransform.translateY && oldTransform.translateY)) {
                 WXAnimationInfo *newInfo = [info copy];
                 newInfo.propertyName = @"transform.translation.y";
-                newInfo.fromValue = @([oldTransform.translateY valueForMaximumValue:view.bounds.size.height]);
-                newInfo.toValue = @([wxTransform.translateY valueForMaximumValue:view.bounds.size.height]);
+                newInfo.fromValue = @([oldTransform.translateY valueForMaximum:view.bounds.size.height]);
+                newInfo.toValue = @([wxTransform.translateY valueForMaximum:view.bounds.size.height]);
                 [infos addObject:newInfo];
             }
             
@@ -197,18 +236,18 @@
             info.toValue = @([value floatValue]);
             [infos addObject:info];
         } else if ([property isEqualToString:@"width"]) {
-            info.propertyName = @"bounds";
-            info.fromValue = [NSValue valueWithCGRect:layer.bounds];
+            info.propertyName = @"bounds.size.width";
+            info.fromValue = @(layer.bounds.size.width);
             CGRect newBounds = layer.bounds;
             newBounds.size = CGSizeMake([WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor], newBounds.size.height);
-            info.toValue = [NSValue valueWithCGRect:newBounds];
+            info.toValue = @(newBounds.size.width);
             [infos addObject:info];
         } else if ([property isEqualToString:@"height"]) {
-            info.propertyName = @"bounds";
-            info.fromValue = [NSValue valueWithCGRect:layer.bounds];
+            info.propertyName = @"bounds.size.height";
+            info.fromValue = @(layer.bounds.size.height);
             CGRect newBounds = layer.bounds;
             newBounds.size = CGSizeMake(newBounds.size.width, [WXConvert WXPixelType:value scaleFactor:self.weexInstance.pixelScaleFactor]);
-            info.toValue = [NSValue valueWithCGRect:newBounds];
+            info.toValue = @(newBounds.size.height);
             [infos addObject:info];
         }
     }
@@ -256,6 +295,16 @@
     animation.delegate = delegate;
     
     CALayer *layer = info.target.layer;
+    if ([info.propertyName hasPrefix:@"bounds"]) {
+        info.originAnchorPoint = layer.anchorPoint;
+        CGRect originFrame = layer.frame;
+         /*
+          * if anchorPoint changed, the origin of layer's frame will change
+          * http://ronnqvi.st/about-the-anchorpoint/
+         */
+        layer.anchorPoint = CGPointZero;
+        layer.frame = originFrame;
+    }
     [layer addAnimation:animation forKey:info.propertyName];
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h b/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
index ae46bde..15375fe 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m b/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m
index 2fc2b9d..28f077e 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXCanvasModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXCanvasModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h b/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
index 233776a..31e1f7a 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m b/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m
index 1c0a5cf..850bb87 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXClipboardModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXClipboardModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
index be9367f..0345521 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
index 70868d5..9e26ea5 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXDomModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXDomModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h b/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
index 2e592a5..2808863 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m b/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m
index c47bec1..2ef61a7 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXGlobalEventModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXGlobalEventModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h b/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
index 28c7707..6f0e0d9 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m b/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m
index ce6d077..ff336f1 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXInstanceWrap.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXInstanceWrap.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h b/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
index 7d5c80c..7ba6639 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m b/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m
index 3fa4f66..ee974a1 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXMetaModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 #import "WXMetaModule.h"
 #import "WXConvert.h"
@@ -22,9 +33,9 @@
     id viewportWidth = viewportArguments[@"width"];
     if ([viewportWidth isKindOfClass:[NSString class]]) {
         if ([viewportWidth isEqualToString:@"device-width"]) {
-            viewportWidthFloat = [WXUtility portraitScreenSize].width * WXScreenScale();
+            viewportWidthFloat = [WXUtility portraitScreenSize].width;
         } else if ([viewportWidth isEqualToString:@"device-height"]) {
-            viewportWidthFloat = [WXUtility portraitScreenSize].height * WXScreenScale();
+            viewportWidthFloat = [WXUtility portraitScreenSize].height;
         } else {
             viewportWidthFloat = [WXConvert CGFloat:viewportWidth];
         }
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h b/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
index 8305bdc..41582f2 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m b/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m
index b312fd9..910d13a 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXModalUIModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModalUIModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h b/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
index 3327e6a..614ad66 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m b/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m
index b6edf76..4bcca98 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXNavigatorModule.m
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
  /**
  * Created by Weex.
  * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
@@ -159,7 +177,10 @@
     UIViewController *container = self.weexInstance.viewController;
     
     NSMutableDictionary *mutableParam = [param mutableCopy];
-    [mutableParam setObject:self.weexInstance.instanceId forKey:@"instanceId"];
+    
+    if (self.weexInstance.instanceId) {
+        [mutableParam setObject:self.weexInstance.instanceId forKey:@"instanceId"];
+    }
     
     [navigator setNavigationItemWithParam:mutableParam position:position completion:^(NSString *code, NSDictionary *responseData) {
         if (callback && code) {
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h b/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
index a375945..8856a42 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m b/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m
index a587d4c..41ec9cc 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXPickerModule.h"
@@ -23,6 +34,17 @@
 @property(nonatomic,strong)UIView *backgroundView;
 @property(nonatomic,strong)UIView *pickerView;
 
+//custom
+@property(nonatomic,copy)NSString *title;
+@property(nonatomic,strong)UIColor *titleColor;
+@property(nonatomic,copy)NSString *cancelTitle;
+@property(nonatomic,copy)NSString *confirmTitle;
+@property(nonatomic,strong)UIColor *cancelTitleColor;
+@property(nonatomic,strong)UIColor *confirmTitleColor;
+@property(nonatomic,strong)UIColor *titleBackgroundColor;
+@property(nonatomic)CGFloat height;
+@property(nonatomic,strong)UIColor *textColor;
+@property(nonatomic,strong)UIColor *selectionColor;
 //data
 @property(nonatomic,copy)NSArray *items;
 @property(nonatomic)BOOL isAnimating;
@@ -44,6 +66,11 @@
 
 #pragma mark -
 #pragma mark Single Picker
+-(void)dealloc
+{
+    [NSObject cancelPreviousPerformRequestsWithTarget:self];
+}
+
 -(void)pick:(NSDictionary *)options callback:(WXModuleCallback)callback
 {
     NSArray *items = @[];
@@ -54,6 +81,36 @@
     if (options[@"index"]) {
         index = [WXConvert NSInteger:options[@"index"]];
     }
+    if (options[@"title"]) {
+        self.title = [WXConvert NSString:options[@"title"]];
+    }
+    if (options[@"titleColor"]) {
+        self.titleColor = [WXConvert UIColor:options[@"titleColor"]];
+    }
+    if (options[@"cancelTitle"]) {
+        self.cancelTitle = [WXConvert NSString:options[@"cancelTitle"]];
+    }
+    if (options[@"confirmTitle"]) {
+        self.confirmTitle = [WXConvert NSString:options[@"confirmTitle"]];
+    }
+    if (options[@"cancelTitleColor"]) {
+        self.cancelTitleColor = [WXConvert UIColor:options[@"cancelTitleColor"]];
+    }
+    if (options[@"confirmTitleColor"]) {
+        self.confirmTitleColor = [WXConvert UIColor:options[@"confirmTitleColor"]];
+    }
+    if (options[@"titleBackgroundColor"]) {
+        self.titleBackgroundColor = [WXConvert UIColor:options[@"titleBackgroundColor"]];
+    }
+    if (options[@"textColor"]) {
+        self.textColor = [WXConvert UIColor:options[@"textColor"]];
+    }
+    if (options[@"selectionColor"]) {
+        self.selectionColor = [WXConvert UIColor:options[@"selectionColor"]];
+    }
+    if (options[@"height"]) {
+        self.height = [WXConvert CGFloat:options[@"height"]];
+    }
     if (items && [items count]>0 && [self isRightItems:items]) {
         [self createPicker:items index:index];
         self.callback = callback;
@@ -65,6 +122,14 @@
     }
 }
 
+-(void)SetColorDelay:(NSNumber *)number
+{
+    if(self.selectionColor) {
+        UILabel *labelSelected = (UILabel*)[self.picker viewForRow:[number integerValue] forComponent:0.3];
+        [labelSelected setBackgroundColor:self.selectionColor];
+    }
+}
+
 -(void)createPicker:(NSArray *)items index:(NSInteger)index
 {
     [self configPickerView];
@@ -72,8 +137,12 @@
     self.index = index;
     if (items && index < [items count]) {
         [self.picker selectRow:index inComponent:0 animated:NO];
+        [self performSelector:@selector(SetColorDelay:) withObject:[NSNumber numberWithInteger:self.index] afterDelay:0.3];
+        
     } else if(items && [items count]>0) {
         [self.picker selectRow:0 inComponent:0 animated:NO];
+        [self performSelector:@selector(SetColorDelay:) withObject:[NSNumber numberWithInteger:0] afterDelay:0.3];
+
     }
     [self show];
 }
@@ -160,17 +229,52 @@
     [self.backgroundView addGestureRecognizer:tapGesture];
     self.pickerView = [self createPickerView];
     UIToolbar *toolBar=[[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, WXPickerToolBarHeight)];
-    [toolBar setBackgroundColor:[UIColor whiteColor]];
+    toolBar.barTintColor = self.titleBackgroundColor?self.titleBackgroundColor:[UIColor whiteColor];
+    
+    
+    
     UIBarButtonItem* noSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil];
     noSpace.width=10;
-    UIBarButtonItem* doneBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
-    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
-    UIBarButtonItem* cancelBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
+    
+    UIBarButtonItem* doneBtn ;
+    if (self.confirmTitle.length >0) {
+        doneBtn = [[UIBarButtonItem alloc] initWithTitle:self.confirmTitle style:UIBarButtonItemStyleBordered target:self action:@selector(done:)];
+    }else {
+       doneBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(done:)];
+    }
+    if(self.confirmTitleColor){
+        doneBtn.tintColor = self.confirmTitleColor;
+    }
+    UIBarButtonItem *cancelBtn;
+    if (self.cancelTitle.length >0) {
+        cancelBtn = [[UIBarButtonItem alloc] initWithTitle:self.cancelTitle style:UIBarButtonItemStyleBordered target:self action:@selector(cancel:)];
+    }else {
+        cancelBtn = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel:)];
+    }
+    if(self.cancelTitleColor){
+        cancelBtn.tintColor = self.cancelTitleColor;
+    }
+    UIBarButtonItem* flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
     [toolBar setItems:[NSArray arrayWithObjects:noSpace,cancelBtn,flexSpace,doneBtn,noSpace, nil]];
+    UILabel *titleLabel = [UILabel new];
+    titleLabel.frame = CGRectMake(0, 0, 200, WXPickerToolBarHeight);
+    titleLabel.center = toolBar.center;
+    titleLabel.textAlignment = NSTextAlignmentCenter;
+    if(self.titleColor){
+        titleLabel.textColor = self.titleColor;
+    }
+    if(self.title.length>0){
+        titleLabel.text = self.title;
+        [toolBar addSubview:titleLabel];
+    }
     [self.pickerView addSubview:toolBar];
     self.picker = [[UIPickerView alloc]init];
     self.picker.delegate = self;
-    CGRect pickerFrame = CGRectMake(0, WXPickerToolBarHeight, [UIScreen mainScreen].bounds.size.width, WXPickerHeight-WXPickerToolBarHeight);
+    CGFloat height = WXPickerHeight;
+    if (WXFloatEqual(self.height, 0)){
+        height = self.height>WXPickerToolBarHeight?self.height:WXPickerHeight;
+    }
+    CGRect pickerFrame = CGRectMake(0, WXPickerToolBarHeight, [UIScreen mainScreen].bounds.size.width, height-WXPickerToolBarHeight);
     self.picker.backgroundColor = [UIColor whiteColor];
     self.picker.frame = pickerFrame;
     [self.pickerView addSubview:self.picker];
@@ -180,7 +284,11 @@
 -(UIView *)createPickerView
 {
     UIView *view = [UIView new];
-    view.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, WXPickerHeight);
+    CGFloat height = WXPickerHeight;
+    if (WXFloatEqual(self.height, 0)){
+        height = self.height>WXPickerToolBarHeight?self.height:WXPickerHeight;
+    }
+    view.frame = CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, height);
     view.backgroundColor = [UIColor whiteColor];
     return view;
 }
@@ -213,8 +321,31 @@
 - (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
 {
     self.index = row;
+    if(self.selectionColor) {
+        UILabel *labelSelected = (UILabel*)[pickerView viewForRow:row forComponent:component];
+        [labelSelected setBackgroundColor:self.selectionColor];
+    }
 }
 
+-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
+{
+    
+    UILabel *label = (id)view;
+    
+    if (!label)
+    {
+        
+        label= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
+        label.textAlignment = NSTextAlignmentCenter;
+        UIColor *color = self.textColor?self.textColor:[UIColor blackColor];
+        label.textColor = color;
+        label.text = [self convertItem:self.items[row]];
+    }
+    
+    return label;
+}
+
+
 #pragma mark -
 #pragma Date & Time Picker
 -(void)pickDate:(NSDictionary *)options callback:(WXModuleCallback)callback
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h b/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
index 3e4e87a..89a02d9 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m b/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m
index 9b2bf60..8853dbc 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXStorageModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXStorageModule.h"
@@ -88,7 +99,7 @@
     if (!value) {
         [self executeRemoveItem:key];
         if (callback) {
-            callback(@{@"result":@"failed"});
+            callback(@{@"result":@"failed",@"data":@"undefined"});
         }
         return;
     }
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h b/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
index 2eb949f..213ee93 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m b/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m
index 5771e81..ddfacdb 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXStreamModule.h"
@@ -28,43 +39,118 @@
     __block NSMutableDictionary * callbackRsp =[[NSMutableDictionary alloc] init];
     __block NSString *statusText = @"ERR_CONNECT_FAILED";
     
+    //build stream request
+    WXResourceRequest * request = [self _buildRequestWithOptions:options callbackRsp:callbackRsp];
+    if (!request) {
+        if (callback) {
+            callback(callbackRsp);
+        }
+        // failed with some invaild inputs
+        return ;
+    }
+    
+    // notify to start request state
+    if (progressCallback) {
+        progressCallback(callbackRsp, TRUE);
+    }
+    
+    WXResourceLoader *loader = [[WXResourceLoader alloc] initWithRequest:request];
+    __weak typeof(self) weakSelf = self;
+    loader.onResponseReceived = ^(const WXResourceResponse *response) {
+        httpResponse = (NSHTTPURLResponse*)response;
+        if (weakSelf) {
+            [callbackRsp setObject:@{ @"HEADERS_RECEIVED" : @2 } forKey:@"readyState"];
+            [callbackRsp setObject:[NSNumber numberWithInteger:httpResponse.statusCode] forKey:@"status"];
+            [callbackRsp setObject:httpResponse.allHeaderFields forKey:@"headers"];
+            statusText = [WXStreamModule _getStatusText:httpResponse.statusCode];
+            [callbackRsp setObject:statusText forKey:@"statusText"];
+            [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
+            if (progressCallback) {
+                progressCallback(callbackRsp, TRUE);
+            }
+        }
+    };
+    
+    loader.onDataReceived = ^(NSData *data) {
+        if (weakSelf) {
+            [callbackRsp setObject:@{ @"LOADING" : @3 } forKey:@"readyState"];
+            received += [data length];
+            [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
+            if (progressCallback) {
+                progressCallback(callbackRsp, TRUE);
+            }
+        }
+    };
+    
+    loader.onFinished = ^(const WXResourceResponse * response, NSData *data) {
+        if (weakSelf) {
+            [weakSelf _loadFinishWithResponse:[response copy] data:data callbackRsp:callbackRsp];
+            if (callback) {
+                callback(callbackRsp);
+            }
+        }
+    };
+    
+    loader.onFailed = ^(NSError *error) {
+        if (weakSelf) {
+            [weakSelf _loadFailedWithError:error callbackRsp:callbackRsp];
+            if (callback) {
+                callback(callbackRsp);
+            }
+        }
+    };
+    
+    [loader start];
+}
+
+- (WXResourceRequest*)_buildRequestWithOptions:(NSDictionary*)options callbackRsp:(NSMutableDictionary*)callbackRsp
+{
+    // parse request url
+    NSString *urlStr = [options objectForKey:@"url"];
+    NSMutableString *newUrlStr = [urlStr mutableCopy];
+    WX_REWRITE_URL(urlStr, WXResourceTypeLink, self.weexInstance, &newUrlStr)
+    urlStr = newUrlStr;
+    
+    if (!options || [WXUtility isBlankString:urlStr]) {
+        [callbackRsp setObject:@(-1) forKey:@"status"];
+        [callbackRsp setObject:@NO forKey:@"ok"];
+        
+        return nil;
+    }
+    
+    WXResourceRequest *request = [WXResourceRequest requestWithURL:[NSURL URLWithString:urlStr] resourceType:WXResourceTypeOthers referrer:nil cachePolicy:NSURLRequestUseProtocolCachePolicy];
+    
+    // parse http method
     NSString *method = [options objectForKey:@"method"];
     if ([WXUtility isBlankString:method]) {
         // default HTTP method is GET
         method = @"GET";
     }
-    NSString *urlStr = [options objectForKey:@"url"];
-    NSMutableString *newUrlStr = [urlStr mutableCopy];
-    WX_REWRITE_URL(urlStr, WXResourceTypeLink, self.weexInstance, &newUrlStr)
-    
-    if (!options || [WXUtility isBlankString:urlStr]) {
-        [callbackRsp setObject:@(-1) forKey:@"status"];
-        [callbackRsp setObject:@NO forKey:@"ok"];
-        if (callback) {
-            callback(callbackRsp);
-        }
-        
-        return;
-    }
-    urlStr = newUrlStr;
-    NSDictionary *headers = [options objectForKey:@"headers"];
-    NSString *type = [options objectForKey:@"type"];
-    NSURL *url = [NSURL URLWithString:urlStr];
-    
-    //TODO:referrer
-    WXResourceRequest *request = [WXResourceRequest requestWithURL:url resourceType:WXResourceTypeOthers referrer:nil cachePolicy:NSURLRequestUseProtocolCachePolicy];
     request.HTTPMethod = method;
+    
+    //parse responseType
+    NSString *responseType = [options objectForKey:@"type"];
+    if ([responseType isKindOfClass:[NSString class]]) {
+        [callbackRsp setObject:responseType? responseType.lowercaseString:@"" forKey:@"responseType"];
+    }
+    
+    //parse timeout
     if ([options valueForKey:@"timeout"]){
-        //ms
+        //the time unit is ms
         [request setTimeoutInterval:([[options valueForKey:@"timeout"] floatValue])/1000];
     }
+    
+    //install client userAgent
     request.userAgent = [WXUtility userAgent];
     
+    // parse custom http headers
+    NSDictionary *headers = [options objectForKey:@"headers"];
     for (NSString *header in headers) {
         NSString *value = [headers objectForKey:header];
         [request setValue:value forHTTPHeaderField:header];
     }
-
+    
+    //parse custom body
     if ([options objectForKey:@"body"]) {
         NSData * body = nil;
         if ([[options objectForKey:@"body"] isKindOfClass:[NSString class]]) {
@@ -77,99 +163,75 @@
         if (!body) {
             [callbackRsp setObject:@(-1) forKey:@"status"];
             [callbackRsp setObject:@NO forKey:@"ok"];
-            if (callback) {
-                callback(callbackRsp);
-            }
-            return;
+            return nil;
         }
         
         [request setHTTPBody:body];
     }
     
     [callbackRsp setObject:@{ @"OPENED": @1 } forKey:@"readyState"];
-    if (progressCallback) {
-        progressCallback(callbackRsp, TRUE);
-    }
     
-    WXResourceLoader *loader = [[WXResourceLoader alloc] initWithRequest:request];
-    __weak typeof(self) weakSelf = self;
-    loader.onResponseReceived = ^(const WXResourceResponse *response) {
-        httpResponse = (NSHTTPURLResponse*)response;
-        if (weakSelf) {
-            [callbackRsp setObject:@{ @"HEADERS_RECEIVED" : @2  } forKey:@"readyState"];
-            [callbackRsp setObject:[NSNumber numberWithInteger:httpResponse.statusCode] forKey:@"status"];
-            [callbackRsp setObject:httpResponse.allHeaderFields forKey:@"headers"];
-            statusText = [WXStreamModule getStatusText:httpResponse.statusCode];
-            [callbackRsp setObject:statusText forKey:@"statusText"];
-            [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
-            if (progressCallback) {
-                progressCallback(callbackRsp, TRUE);
-            }
-        }
-    };
-    
-    loader.onDataReceived = ^(NSData *data) {
-        [callbackRsp setObject:@{ @"LOADING" : @3 } forKey:@"readyState"];
-        received += [data length];
-        [callbackRsp setObject:[NSNumber numberWithInteger:received] forKey:@"length"];
-        if (progressCallback) {
-            progressCallback(callbackRsp, TRUE);
-        }
-    };
-    
-    loader.onFinished = ^(const WXResourceResponse * response, NSData *data) {
-        [callbackRsp removeObjectForKey:@"readyState"];
-        [callbackRsp removeObjectForKey:@"length"];
-        [callbackRsp removeObjectForKey:@"keepalive"];
-        [callbackRsp setObject:httpResponse.statusCode >= 200 && httpResponse.statusCode <= 299 ? @YES : @NO forKey:@"ok"];
-    
-        NSString *responseData = [self stringfromData:data encode:httpResponse.textEncodingName];
-        if ([type isEqualToString:@"json"] || [type isEqualToString:@"jsonp"]) {
-            if ([type isEqualToString:@"jsonp"]) {
-                NSUInteger start = [responseData rangeOfString:@"("].location + 1 ;
-                NSUInteger end = [responseData rangeOfString:@")" options:NSBackwardsSearch].location;
-                if (end < [responseData length] && end > start) {
-                    responseData = [responseData substringWithRange:NSMakeRange(start, end-start)];
-                }
-            }
-            id jsonObj = [self JSONObjFromData:[responseData dataUsingEncoding:NSUTF8StringEncoding]];
-            if (jsonObj) {
-                [callbackRsp setObject:jsonObj forKey:@"data"];
-            }
-            
-        } else {
-            if (responseData) {
-                [callbackRsp setObject:responseData forKey:@"data"];
-            }
-        }
-        if (callback) {
-            callback(callbackRsp);
-        }
-    };
-    
-    loader.onFailed = ^(NSError *error) {
-        [callbackRsp removeObjectForKey:@"readyState"];
-        [callbackRsp removeObjectForKey:@"length"];
-        [callbackRsp removeObjectForKey:@"keepalive"];
-        [callbackRsp setObject:@(-1) forKey:@"status"];
-        [callbackRsp setObject:[NSString stringWithFormat:@"%@(%ld)",[error localizedDescription], (long)[error code]] forKey:@"data"];
-        
-        switch ([error code]) {
-            case -1000:
-            case -1002:
-            case -1003:
-                statusText = @"ERR_INVALID_REQUEST";
-                break;
-            default:
-                break;
-        }
-        [callbackRsp setObject:statusText forKey:@"statusText"];
-    };
-    
-    [loader start];
+    return request;
 }
 
-- (NSString*)stringfromData:(NSData *)data encode:(NSString *)encoding
+- (void)_loadFailedWithError:(NSError*)error callbackRsp:(NSMutableDictionary*)callbackRsp
+{
+    [callbackRsp removeObjectForKey:@"readyState"];
+    [callbackRsp removeObjectForKey:@"length"];
+    [callbackRsp removeObjectForKey:@"keepalive"];
+    [callbackRsp removeObjectForKey:@"responseType"];
+    
+    [callbackRsp setObject:@(-1) forKey:@"status"];
+    [callbackRsp setObject:[NSString stringWithFormat:@"%@(%ld)",[error localizedDescription], (long)[error code]] forKey:@"data"];
+    NSString * statusText = @"";
+    
+    switch ([error code]) {
+        case -1000:
+        case -1002:
+        case -1003:
+            statusText = @"ERR_INVALID_REQUEST";
+            break;
+        default:
+            break;
+    }
+    [callbackRsp setObject:statusText forKey:@"statusText"];
+    
+}
+- (void)_loadFinishWithResponse:(WXResourceResponse*)response data:(NSData*)data callbackRsp:(NSMutableDictionary*)callbackRsp
+{
+    [callbackRsp removeObjectForKey:@"readyState"];
+    [callbackRsp removeObjectForKey:@"length"];
+    [callbackRsp removeObjectForKey:@"keepalive"];
+    
+    [callbackRsp setObject:((NSHTTPURLResponse*)response).statusCode >= 200 && ((NSHTTPURLResponse*)response).statusCode <= 299 ? @YES : @NO forKey:@"ok"];
+    
+    NSString *responseData = [self _stringfromData:data encode:((NSHTTPURLResponse*)response).textEncodingName];
+    NSString * responseType = [callbackRsp objectForKey:@"responseType"];
+    [callbackRsp removeObjectForKey:@"responseType"];
+    if ([responseType isEqualToString:@"json"] || [responseType isEqualToString:@"jsonp"]) {
+        //handle json format
+        if ([responseType isEqualToString:@"jsonp"]) {
+            //TODO: to be more elegant
+            NSUInteger start = [responseData rangeOfString:@"("].location + 1 ;
+            NSUInteger end = [responseData rangeOfString:@")" options:NSBackwardsSearch].location;
+            if (end < [responseData length] && end > start) {
+                responseData = [responseData substringWithRange:NSMakeRange(start, end-start)];
+            }
+        }
+        id jsonObj = [self _JSONObjFromData:[responseData dataUsingEncoding:NSUTF8StringEncoding]];
+        if (jsonObj) {
+            [callbackRsp setObject:jsonObj forKey:@"data"];
+        }
+        
+    } else {
+        // return original Data
+        if (responseData) {
+            [callbackRsp setObject:responseData forKey:@"data"];
+        }
+    }
+}
+
+- (NSString*)_stringfromData:(NSData *)data encode:(NSString *)encoding
 {
     NSMutableString *responseData = nil;
     if (data) {
@@ -187,7 +249,7 @@
     return responseData;
 }
 
-- (id)JSONObjFromData:(NSData *)data
+- (id)_JSONObjFromData:(NSData *)data
 {
     NSError * error = nil;
     id jsonObj = [WXUtility JSONObject:data error:&error];
@@ -197,7 +259,7 @@
     return jsonObj;
 }
 
-+ (NSString*)getStatusText:(NSInteger)code
++ (NSString*)_getStatusText:(NSInteger)code
 {    
     switch (code) {
         case -1:
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
index 588c1e9..dab8601 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
index 4efdd50..26a7481 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXTimerModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
index 12fb84c..52c291e 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
index 239c34c..c752d9f 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebSocketModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWebSocketModule.h"
@@ -67,7 +78,7 @@
         if (weakSelf) {
             WXLogError(@":( Websocket Failed With Error %@", error);
             NSMutableDictionary *dict = [NSMutableDictionary new];
-            [dict setObject:error.userInfo forKey:@"data"];
+            [dict setObject:error.userInfo?[WXUtility JSONString:error.userInfo]:@"" forKey:@"data"];
             if (weakSelf.errorCallBack) {
                 weakSelf.errorCallBack(dict, true);
             }
@@ -79,7 +90,7 @@
                 WXLogInfo(@"Websocket colse ");
                 NSMutableDictionary * callbackRsp = [[NSMutableDictionary alloc] init];
                 [callbackRsp setObject:[NSNumber numberWithInteger:code] forKey:@"code"];
-                [callbackRsp setObject:reason forKey:@"reason"];
+                [callbackRsp setObject:reason?reason:@"" forKey:@"reason"];
                 [callbackRsp setObject:wasClean?@true:@false forKey:@"wasClean"];
                 if (weakSelf.closeCallBack) {
                     weakSelf.closeCallBack(callbackRsp,false);
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h b/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
index 56d50bb..5366a85 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m b/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m
index 4948839..ee37057 100644
--- a/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m
+++ b/ios/sdk/WeexSDK/Sources/Module/WXWebViewModule.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWebViewModule.h"
diff --git a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
index 076e0c7..60b6c6e 100644
--- a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
+++ b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
index 3a1172a..a2a4d6d 100644
--- a/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
+++ b/ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXMonitor.h"
@@ -94,7 +105,11 @@
         commitDict[@"requestType"] = instance.userInfo[@"weex_bundlejs_requestType"];
     }
     if (instance.userInfo[WXCUSTOMMONITORINFO]) {
-        commitDict[WXCUSTOMMONITORINFO] = instance.userInfo[WXCUSTOMMONITORINFO];
+        if([instance.userInfo[WXCUSTOMMONITORINFO] isKindOfClass:[NSDictionary class]]) {
+            commitDict[WXCUSTOMMONITORINFO] = [WXUtility JSONString:instance.userInfo[WXCUSTOMMONITORINFO]];
+        }else if([instance.userInfo[WXCUSTOMMONITORINFO] isKindOfClass:[NSString class]]) {
+            commitDict[WXCUSTOMMONITORINFO] = instance.userInfo[WXCUSTOMMONITORINFO];
+        }
     }
     WXPerformBlockOnComponentThread(^{
         commitDict[@"componentCount"] = @([instance numberOfComponents]);
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
index d8ab92a..8719350 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m
index b161d8f..27a5905 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequest.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXResourceRequest.h"
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
index 7f5393b..2ec4110 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandler.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
@@ -27,6 +38,9 @@
 
 // Tells the delegate that the request failed to load successfully.
 - (void)request:(WXResourceRequest *)request didFailWithError:(NSError *)error;
+    
+// Tells the delegate that when complete statistics information has been collected for the task.
+- (void)request:(WXResourceRequest *)request didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
 
 @end
 
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
index d68ca8c..978ea26 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m
index 211471f..77a346e 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceRequestHandlerDefaultImpl.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
@@ -82,9 +93,18 @@
 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
 {
     id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
-    [delegate requestDidFinishLoading:(WXResourceRequest *)task.originalRequest];
+    if (error) {
+        [delegate request:(WXResourceRequest *)task.originalRequest didFailWithError:error];
+    }else {
+        [delegate requestDidFinishLoading:(WXResourceRequest *)task.originalRequest];
+    }
     [_delegates removeObjectForKey:task];
 }
-
+    
+- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics
+{
+    id<WXResourceRequestDelegate> delegate = [_delegates objectForKey:task];
+    [delegate request:(WXResourceRequest *)task.originalRequest didFinishCollectingMetrics:metrics];
+}
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h b/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
index 06ec6bd..129af98 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
diff --git a/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m b/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m
index b7b5e59..66177f1 100644
--- a/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m
+++ b/ios/sdk/WeexSDK/Sources/Network/WXResourceResponse.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
index 72de18a..6bba638 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXAppMonitorProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
index fd19706..cfce2a3 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXBridgeProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <JavaScriptCore/JavaScriptCore.h>
@@ -45,6 +56,10 @@
 - (void)resetEnvironment;
 
 @optional
+/**
+ * Remove instance's timer.
+ */
+-(void)removeTimers:(NSString *)instance;
 
 /**
  * Called when garbage collection is wanted by sdk.
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
index d82faf4..1875e79 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXDestroyProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
index d4d91fd..ea20753 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXEventModuleProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
index 1bfb6c5..1dbd188 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXImgLoaderProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
index 45b7285..fbb2630 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXJSExceptionProtocol.h
@@ -1,21 +1,32 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXJSExceptionInfo.h"
 
-@protocol WXJSExceptionProtocol<NSObject>
+@protocol WXJSExceptionProtocol <NSObject>
 
 /**
  * report js exception
  *
- * @param exception {@link WXJSException}
+ * @param exception WXJSExceptionInfo
  */
 
-- (void)onJSException:(WXJSExceptionInfo *)exception;
+- (void)onJSException:(WXJSExceptionInfo*) exception;
 
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
index ef2ab44..a6bab03 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXModuleProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
index 2b983e1..22ad3e9 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXNavigationProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXModuleProtocol.h"
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
index 3e5422c..18256da 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXNetworkProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
index 8ef9b8f..ba1ddb1 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXScrollerProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 @class WXComponent;
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
index 823bae0..55b9604 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXTextComponentProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 @protocol WXTextComponentProtocol
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
index 9f065ad..af57fd7 100644
--- a/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXURLRewriteProtocol.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
new file mode 100644
index 0000000..19cde1a
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Protocol/WXValidateProtocol.h
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXSDKInstance.h"
+
+
+@interface WXValidateResult : NSObject
+
+@property(nonatomic,assign)BOOL            isSuccess;
+@property(nonatomic,strong)NSError*        error;
+
+@end
+
+@interface WXModuleValidateResult : WXValidateResult
+
+@end
+
+@interface WXComponentValidateResult :WXValidateResult
+
+@property(nonatomic,copy)NSString* replacedComponent;
+
+@end
+
+
+@protocol WXValidateProtocol <NSObject>
+
+-(BOOL)needValidate:(NSURL*) bundleUrl;
+
+-(WXModuleValidateResult *)validateWithWXSDKInstance:(WXSDKInstance *)wxsdkInstance module:(NSString*) moduel method:(NSString *)method args:(NSArray *)args;
+
+-(WXComponentValidateResult *)validateWithWXSDKInstance:(WXSDKInstance *)wxsdkInstance component:(NSString *)componentName;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h b/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
index 2659c65..50445b8 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m b/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m
index 85db32f..f77ba90 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSArray+Weex.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "NSArray+Weex.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h b/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
index b12bbf5..3c11c3a 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m b/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m
index a81d96c..061ad5b 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSObject+WXSwizzle.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "NSObject+WXSwizzle.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h b/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
index b6080d2..1bd1819 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m b/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m
index 65d46b5..e314e4d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/NSTimer+Weex.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "NSTimer+Weex.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h b/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
index 2a0dd1e..fc7d51d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m b/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m
index 6444f08..38b471d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXAppConfiguration.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXAppConfiguration.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h b/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
index b606a97..9ebba75 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXAssert.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m b/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m
index 781de23..006327e 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXAssert.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXAssert.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
new file mode 100644
index 0000000..499d625
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.h
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+#import "WXInnerLayer.h"
+
+@interface WXBoxShadow : NSObject
+
+@property(nonatomic,strong,nullable) UIColor *shadowColor;
+@property CGSize shadowOffset;
+@property CGFloat shadowRadius;
+@property BOOL isInset;
+@property (nonatomic, strong, nullable)WXInnerLayer *innerLayer;
+@property CGFloat shadowOpacity;
+
+/**
+ *  @abstract get boxshadow from string and adapter phone screen
+ *
+ *  @param string the boxshadow string
+ *
+ *  @param scaleFactor the boxshadow set last time
+ *
+ *  @return A WXBoxShadow object
+ */
++(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor;
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
new file mode 100644
index 0000000..dbf7941
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXBoxShadow.m
@@ -0,0 +1,137 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXBoxShadow.h"
+#import "WXConvert.h"
+#import "WXUtility.h"
+
+@implementation WXBoxShadow
+- (instancetype)init
+{
+    self = [super init];
+    
+    if (self) {
+        self.shadowRadius = 0.0f;
+        self.isInset = NO;
+        self.shadowOffset = CGSizeZero;
+        self.shadowOpacity = 1.0f;
+    }
+    
+    return self;
+}
+
++ (NSArray *)getBoxShadowElementsByBlank:(NSString *)string
+{
+    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
+    NSError *error = nil;
+    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\s{2,}" options:NSRegularExpressionCaseInsensitive error:&error];
+    
+    NSArray *arr = [regex matchesInString:string options:NSMatchingReportCompletion range:NSMakeRange(0, [string length])];
+    
+    arr = [[arr reverseObjectEnumerator] allObjects];
+    for (NSTextCheckingResult *str in arr) {
+        string = [string stringByReplacingCharactersInRange:[str range] withString:@" "];
+    }
+    NSArray *array = [string componentsSeparatedByString:@" "];
+    return array;
+}
+
++(WXBoxShadow *_Nullable)getBoxShadowFromString:(NSString *_Nullable)string scaleFactor:(CGFloat)scaleFactor
+{
+    if ([string length] == 0) {
+        return nil;
+    }
+    WXBoxShadow *boxShadow = [WXBoxShadow new];
+    
+    //parse color
+    if ([string rangeOfString:@"rgb"].location != NSNotFound) {
+        NSRange begin = [string rangeOfString:@"rgb"];
+        NSRange end = [string rangeOfString:@")"];
+        if (begin.location < end.location && end.location < [string length]) {
+            NSRange range = NSMakeRange(begin.location, end.location-begin.location + 1);
+            NSString *str = [string substringWithRange:range];
+            UIColor *color = [WXConvert UIColor:str];
+            if (color && [color isKindOfClass:[UIColor class]]) {
+                boxShadow.shadowColor = color;
+            }
+            string = [string stringByReplacingOccurrencesOfString:str withString:@""];// remove color string
+        }
+    } else {
+        NSArray *boxShadowElements = [self getBoxShadowElementsByBlank:string];
+        NSString *str = [boxShadowElements lastObject];
+        UIColor *color = [WXConvert UIColor:str];
+        if (color && [color isKindOfClass:[UIColor class]]) {
+            boxShadow.shadowColor = color;
+        }
+        string = [string stringByReplacingOccurrencesOfString:str withString:@""];// remove color string
+    }
+
+    // parse remain BoxShadow Elements
+    NSMutableArray *remainBoxShadowElements = [[self getBoxShadowElementsByBlank:string] mutableCopy];
+    
+    if (remainBoxShadowElements && [remainBoxShadowElements count] > 0) {
+        if ([@"inset" isEqualToString: remainBoxShadowElements[0]])
+        {
+            boxShadow.isInset = YES;
+            [remainBoxShadowElements removeObjectAtIndex:0];
+            
+        }
+        
+        for (int i = 0; i < [remainBoxShadowElements count]; i++) {
+            switch (i) {
+                case 0:
+                {
+                    CGSize size = boxShadow.shadowOffset;
+                    size.width = [WXConvert WXPixelType:remainBoxShadowElements[0] scaleFactor:scaleFactor];
+                    boxShadow.shadowOffset = size;
+                }
+                    break;
+                case 1:
+                {
+                    CGSize size = boxShadow.shadowOffset;
+                    size.height = [WXConvert WXPixelType:remainBoxShadowElements[1] scaleFactor:scaleFactor];
+                    boxShadow.shadowOffset = size;
+                }
+                    break;
+                case 2:
+                {
+                    boxShadow.shadowRadius = [WXConvert WXPixelType:remainBoxShadowElements[2] scaleFactor:scaleFactor];
+                }
+                    break;
+                    
+                default:
+                    break;
+            }
+        }
+        
+        if (boxShadow.isInset) {
+            if (!boxShadow.innerLayer) {
+                boxShadow.innerLayer = [[WXInnerLayer alloc] init];
+            }
+            boxShadow.innerLayer.boxShadowColor = boxShadow.shadowColor;
+            boxShadow.innerLayer.boxShadowOffset = boxShadow.shadowOffset;
+            boxShadow.innerLayer.boxShadowRadius = boxShadow.shadowRadius;
+            boxShadow.innerLayer.boxShadowOpacity = boxShadow.shadowOpacity;
+        }
+    }
+    return boxShadow;
+}
+
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
index 75658c6..eedcbbf 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
@@ -12,6 +23,8 @@
 #import "WXLayoutDefine.h"
 #import "WXType.h"
 
+@class WXLength;
+@class WXBoxShadow;
 @interface WXConvert : NSObject
 
 + (BOOL)BOOL:(id)value;
@@ -36,6 +49,7 @@
 + (UIViewContentMode)UIViewContentMode:(id)value;
 + (WXImageQuality)WXImageQuality:(id)value;
 + (WXImageSharp)WXImageSharp:(id)value;
++ (UIAccessibilityTraits)WXUIAccessibilityTraits:(id)value;
 
 + (UIColor *)UIColor:(id)value;
 + (CGColorRef)CGColor:(id)value;
@@ -68,6 +82,9 @@
 
 + (WXGradientType)gradientType:(id)value;
 
++ (WXLength *)WXLength:(id)value isFloat:(BOOL)isFloat scaleFactor:(CGFloat)scaleFactor;
++ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor;
+
 @end
 
 @interface WXConvert (Deprecated)
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
index 15c5f6c..36be1b2 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXConvert.m
@@ -1,13 +1,27 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXConvert.h"
 #import "WXUtility.h"
+#import "WXBoxShadow.h"
+#import "WXLength.h"
+#import "WXAssert.h"
 
 @implementation WXConvert
 
@@ -503,32 +517,32 @@
 
 + (CGFloat)WXTextWeight:(id)value
 {
-    if([value isKindOfClass:[NSString class]]){
-        NSString *string = (NSString *)value;
-        if ([string isEqualToString:@"normal"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
-        else if ([string isEqualToString:@"bold"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.4:UIFontWeightBold;
-        else if ([string isEqualToString:@"100"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.8:UIFontWeightUltraLight;
-        else if ([string isEqualToString:@"200"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.6:UIFontWeightThin;
-        else if ([string isEqualToString:@"300"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.4:UIFontWeightLight;
-        else if ([string isEqualToString:@"400"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
-        else if ([string isEqualToString:@"500"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.23:UIFontWeightMedium;
-        else if ([string isEqualToString:@"600"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.3:UIFontWeightSemibold;
-        else if ([string isEqualToString:@"700"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.4:UIFontWeightBold;
-        else if ([string isEqualToString:@"800"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.56:UIFontWeightHeavy;
-        else if ([string isEqualToString:@"900"])
-            return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.62:UIFontWeightBlack;
-
-    }
+    NSString *string = [WXConvert NSString:value];
+    if (!string)
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
+    else if ([string isEqualToString:@"normal"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
+    else if ([string isEqualToString:@"bold"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.4:UIFontWeightBold;
+    else if ([string isEqualToString:@"100"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.8:UIFontWeightUltraLight;
+    else if ([string isEqualToString:@"200"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.6:UIFontWeightThin;
+    else if ([string isEqualToString:@"300"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?-0.4:UIFontWeightLight;
+    else if ([string isEqualToString:@"400"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
+    else if ([string isEqualToString:@"500"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.23:UIFontWeightMedium;
+    else if ([string isEqualToString:@"600"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.3:UIFontWeightSemibold;
+    else if ([string isEqualToString:@"700"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.4:UIFontWeightBold;
+    else if ([string isEqualToString:@"800"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.56:UIFontWeightHeavy;
+    else if ([string isEqualToString:@"900"])
+        return WX_SYS_VERSION_LESS_THAN(@"8.2")?0.62:UIFontWeightBlack;
+        
     return WX_SYS_VERSION_LESS_THAN(@"8.2")?0:UIFontWeightRegular;
 }
 
@@ -723,6 +737,73 @@
     return type;
 }
 
+#pragma mark - Length
+
++ (WXLength *)WXLength:(id)value isFloat:(BOOL)isFloat scaleFactor:(CGFloat)scaleFactor
+{
+    if (!value) {
+        return nil;
+    }
+    
+    WXLengthType type = WXLengthTypeFixed;
+    if ([value isKindOfClass:[NSString class]]) {
+        if ([value isEqualToString:@"auto"]) {
+            type = WXLengthTypeAuto;
+        } else if ([value isEqualToString:@"normal"]){
+            type = WXLengthTypeNormal;
+        } else if ([value hasSuffix:@"%"]) {
+            type = WXLengthTypePercent;
+        }
+    } else if (![value isKindOfClass:[NSNumber class]]) {
+        WXAssert(NO, @"Unsupported type:%@ for WXLength", NSStringFromClass([value class]));
+    }
+    
+    if (isFloat) {
+        return [WXLength lengthWithFloat:([value floatValue] * scaleFactor) type:type];
+    } else {
+        return [WXLength lengthWithInt:([value intValue] * scaleFactor) type:type];
+    }
+}
+
++ (WXBoxShadow *)WXBoxShadow:(id)value scaleFactor:(CGFloat)scaleFactor
+{
+    NSString *boxShadow = @"";
+    if([value isKindOfClass:[NSString class]]){
+        boxShadow = value;
+    } else if([value isKindOfClass:[NSNumber class]]){
+        boxShadow =  [((NSNumber *)value) stringValue];
+    } else if (value != nil) {
+        boxShadow = nil;
+        WXLogError(@"Convert Error:%@ can not be converted to boxshadow type", value);
+    }
+    if (boxShadow) {
+        return [WXBoxShadow getBoxShadowFromString:boxShadow scaleFactor:scaleFactor];
+    }
+    return nil;
+}
+
++ (UIAccessibilityTraits)WXUIAccessibilityTraits:(id)value
+{
+    UIAccessibilityTraits accessibilityTrait = UIAccessibilityTraitNone;
+    if (![value isKindOfClass:[NSString class]]) {
+        return accessibilityTrait;
+    }
+    NSString * role = [value lowercaseString];
+    if ([role isEqualToString:@"button"]) {
+        accessibilityTrait = UIAccessibilityTraitButton;
+    } else if ([role isEqualToString:@"link"]) {
+        accessibilityTrait = UIAccessibilityTraitLink;
+    } else if ([role isEqualToString:@"img"]) {
+        accessibilityTrait = UIAccessibilityTraitImage;
+    } else if ([role isEqualToString:@"search"]) {
+        accessibilityTrait = UIAccessibilityTraitSearchField;
+    } else if ([role isEqualToString:@"tab"]) {
+        accessibilityTrait = UIAccessibilityTraitTabBar;
+    }
+    
+    return accessibilityTrait;
+}
+
 @end
 
 @implementation WXConvert (Deprecated)
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
index 6c0e3d1..f2947ab 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXDefine.h
@@ -1,15 +1,26 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #ifndef __WX_DEFINE_H__
 #define __WX_DEFINE_H__
 
-#define WX_SDK_VERSION @"0.10.2"
+#define WX_SDK_VERSION @"0.12.0"
 
 #if defined(__cplusplus)
 #define WX_EXTERN extern "C" __attribute__((visibility("default")))
@@ -145,6 +156,17 @@
  */
 #define WX_SYS_LESS_THAN_OR_EQUAL_TO(v)             ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
 
+/**
+ *  @abstract Estimate component's type. If the type isn't equal to WXComponentTypeCommon, then return.
+ */
+#define WX_CHECK_COMPONENT_TYPE(type)\
+do {\
+if (type != WXComponentTypeCommon) {\
+return;\
+}\
+} while (0);
+
+
 
 #if __has_attribute(objc_requires_super)
     #define WX_REQUIRES_SUPER __attribute__((objc_requires_super))
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h b/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h
new file mode 100644
index 0000000..f494247
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.h
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import <Foundation/Foundation.h>
+
+@protocol WXDiffable <NSObject>
+
+- (BOOL)isEqualToWXObject:(id<WXDiffable>)object;
+
+@end
+
+@interface WXDiffUpdateIndex : NSObject
+
+@property (nonatomic, assign, readonly) NSUInteger oldIndex;
+@property (nonatomic, assign, readonly) NSUInteger newIndex;
+
+@end
+
+@interface WXDiffResult : NSObject
+
+@property (nonatomic, strong, readonly) NSIndexSet *inserts;
+@property (nonatomic, strong, readonly) NSIndexSet *deletes;
+@property (nonatomic, strong, readonly) NSArray<WXDiffUpdateIndex *> *updates;
+
+- (BOOL)hasChanges;
+
+@end
+
+@interface WXDiffUtil : NSObject
+
++ (WXDiffResult *)diffWithMinimumDistance:(NSArray<id<WXDiffable>> *)newArray oldArray:(NSArray<id<WXDiffable>> *)oldArray;
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m b/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m
new file mode 100644
index 0000000..9396243
--- /dev/null
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXDiffUtil.m
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#import "WXDiffUtil.h"
+#import "WXLog.h"
+
+typedef enum : NSUInteger {
+    WXDiffOperationDoNothing,
+    WXDiffOperationUpdate,
+    WXDiffOperationDelete,
+    WXDiffOperationInsert
+} WXDiffOperation;
+
+@implementation WXDiffUpdateIndex
+
+- (instancetype)initWithOldIndex:(NSUInteger)oldIndex newIndex:(NSUInteger)newIndex
+{
+    if (self = [super init]) {
+        _oldIndex = oldIndex;
+        _newIndex = newIndex;
+    }
+    
+    return self;
+}
+
+@end
+
+@implementation WXDiffResult
+
+- (instancetype)initWithInserts:(NSIndexSet *)inserts
+                        deletes:(NSIndexSet *)deletes
+                        updates:(NSArray<WXDiffUpdateIndex *> *)updates
+{
+    if (self = [super init]) {
+        _inserts = [inserts copy];
+        _deletes = [deletes copy];
+        _updates = [updates copy];
+    }
+    
+    return self;
+}
+
+- (BOOL)hasChanges
+{
+    return _updates.count > 0 || _inserts.count > 0 || _deletes.count > 0;
+}
+
+- (NSString *)description
+{
+    return [NSString stringWithFormat:@"<%@: %p; %zi inserts; %zi deletes; %zi updates", NSStringFromClass([self class]), self, _inserts.count, _deletes.count, _updates.count];
+}
+
+
+@end
+
+@implementation WXDiffUtil
+
++ (WXDiffResult *)diffWithMinimumDistance:(NSArray<id<WXDiffable>> *)newArray oldArray:(NSArray<id<WXDiffable>> *)oldArray
+{
+    // Using the levenshtein algorithm
+    // https://en.wikipedia.org/wiki/Levenshtein_distance
+    
+    int oldSize = (int)(oldArray.count + 1);
+    int newSize = (int)(newArray.count + 1);
+    
+    int **matrix = malloc(oldSize * sizeof(int *));
+    for (int i = 0; i < oldSize; i++) {
+        matrix[i] = malloc(newSize * sizeof(int));
+    }
+    
+    matrix[0][0] = 0;
+    
+    for (int i = 1; i < oldSize; i++) {
+        matrix[i][0] = i;
+    }
+    
+    for (int j = 1; j < newSize; j++) {
+        matrix[0][j] = j;
+    }
+    
+    for (int oldIndex = 1; oldIndex < oldSize; oldIndex ++) {
+        for (int newIndex = 1; newIndex < newSize; newIndex ++) {
+            if ([oldArray[oldIndex - 1] isEqualToWXObject:newArray[newIndex - 1]]) {
+                matrix[oldIndex][newIndex] = matrix[oldIndex - 1][newIndex - 1];
+            } else {
+                int updateCost = matrix[oldIndex - 1][newIndex - 1] + 1;
+                int insertCost = matrix[oldIndex][newIndex - 1] + 1;
+                int deleteCost = matrix[oldIndex - 1][newIndex] + 1;
+                matrix[oldIndex][newIndex] = MIN(MIN(insertCost, deleteCost), updateCost);
+            }
+        }
+    }
+    
+    [self _printMatrix:matrix rowSize:oldSize columnSize:newSize];
+    
+    NSMutableArray *updates = [NSMutableArray array];
+    NSMutableIndexSet *inserts = [NSMutableIndexSet indexSet];
+    NSMutableIndexSet *deletes = [NSMutableIndexSet indexSet];
+    int oldIndex = oldSize - 1;
+    int newIndex = newSize - 1;
+    while (oldIndex != 0 || newIndex != 0) {
+        WXDiffOperation operation = [self _operationInMatrix:matrix newIndex:newIndex oldIndex:oldIndex];
+        switch (operation) {
+            case WXDiffOperationUpdate:
+                newIndex --;
+                oldIndex --;
+                [updates addObject:[[WXDiffUpdateIndex alloc] initWithOldIndex:oldIndex newIndex:newIndex]];
+                break;
+            case WXDiffOperationDelete:
+                oldIndex --;
+                [deletes addIndex:oldIndex];
+                break;
+            case WXDiffOperationInsert:
+                newIndex --;
+                [inserts addIndex:newIndex];
+                break;
+            case WXDiffOperationDoNothing:
+                newIndex --;
+                oldIndex --;
+                break;
+        }
+    }
+    
+    for (int i = 0; i < oldSize; i++) {
+        free(matrix[i]);
+    }
+    free(matrix);
+    
+    WXDiffResult *result = [[WXDiffResult alloc] initWithInserts:inserts deletes:deletes updates:updates];
+    return result;
+}
+
++ (WXDiffOperation)_operationInMatrix:(int **)matrix newIndex:(int)newIndex oldIndex:(int)oldIndex
+{
+    if (newIndex == 0) {
+        return WXDiffOperationDelete;
+    }
+    
+    if (oldIndex == 0) {
+        return WXDiffOperationInsert;
+    }
+    
+    int cost = matrix[oldIndex][newIndex];
+    
+    int costBeforeInsert = matrix[oldIndex][newIndex - 1];
+    if (costBeforeInsert + 1 == cost) {
+        return WXDiffOperationInsert;
+    }
+    
+    int costBeforDelete = matrix[oldIndex - 1][newIndex];
+    if (costBeforDelete + 1 == cost) {
+        return WXDiffOperationDelete;
+    }
+    
+    int costBeforUpdate = matrix[oldIndex - 1][newIndex - 1];
+    if (costBeforUpdate + 1 == cost) {
+        return WXDiffOperationUpdate;
+    }
+    
+    return WXDiffOperationDoNothing;
+}
+
++ (void)_printMatrix:(int **)matrix rowSize:(int)rowSize columnSize:(int)columnSize
+{
+    for (int i = 0; i < rowSize; i ++) {
+        NSMutableArray *array = [NSMutableArray array];
+        for (int j = 0; j < columnSize; j ++) {
+            int value = matrix[i][j];
+            NSString *result;
+            if (value < 10) {
+                result = [NSString stringWithFormat:@"0%zi", value];
+            } else {
+                result = [NSString stringWithFormat:@"%zi", value];
+            }
+            [array addObject:result];
+        }
+        WXLogDebug(@"%@", [array componentsJoinedByString:@" "]);
+    }
+}
+
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLength.h b/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
index b8480ea..a66ba4e 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLength.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -12,13 +23,20 @@
     WXLengthTypeFixed,
     WXLengthTypePercent,
     WXLengthTypeAuto,
+    WXLengthTypeNormal
 } WXLengthType;
 
 @interface WXLength : NSObject
 
-+ (instancetype)lengthWithValue:(float)value type:(WXLengthType)type;
++ (instancetype)lengthWithFloat:(float)value type:(WXLengthType)type;
 
-- (float)valueForMaximumValue:(float)maximumValue;
++ (instancetype)lengthWithInt:(int)value type:(WXLengthType)type;
+
+- (float)valueForMaximum:(float)maximumValue;
+
+- (int)intValue;
+
+- (float)floatValue;
 
 - (BOOL)isEqualToLength:(WXLength *)length;
 
@@ -28,4 +46,6 @@
 
 - (BOOL)isAuto;
 
+- (BOOL)isNormal;
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLength.m b/ios/sdk/WeexSDK/Sources/Utility/WXLength.m
index 30cf57e..9524733 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLength.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLength.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXLength.h"
@@ -11,25 +22,38 @@
 
 @implementation WXLength
 {
-    float _value;
+    float _floatValue;
+    int _intValue;
     WXLengthType _type;
+    BOOL _isFloat;
 }
 
-+ (instancetype)lengthWithValue:(float)value type:(WXLengthType)type
++ (instancetype)lengthWithFloat:(float)value type:(WXLengthType)type
 {
     WXLength *length = [WXLength new];
-    length->_value = value;
+    length->_floatValue = value;
     length->_type = type;
+    length->_isFloat = YES;
     return length;
 }
 
-- (float)valueForMaximumValue:(float)maximumValue
++ (instancetype)lengthWithInt:(int)value type:(WXLengthType)type
 {
+    WXLength *length = [WXLength new];
+    length->_intValue = value;
+    length->_type = type;
+    length->_isFloat = NO;
+    return length;
+}
+
+- (float)valueForMaximum:(float)maximumValue
+{
+    
     switch (_type) {
         case WXLengthTypeFixed:
-            return _value;
+            return _isFloat ? _floatValue : _intValue;
         case WXLengthTypePercent:
-            return maximumValue * _value / 100.0;
+            return maximumValue * (_isFloat ? _floatValue : _intValue) / 100.0;
         case WXLengthTypeAuto:
             return maximumValue;
         default:
@@ -38,9 +62,22 @@
     }
 }
 
+- (int)intValue
+{
+    WXAssert(!_isFloat, @"call `intValue` for non-int length");
+    return _intValue;
+}
+
+- (float)floatValue
+{
+    WXAssert(_isFloat,  @"call `floatValue` for non-float length");
+    return _floatValue;
+}
+
 - (BOOL)isEqualToLength:(WXLength *)length
 {
-    return length && _type == length->_type && _value == length->_value;
+    return length && _type == length->_type && _isFloat == length->_isFloat
+    && _floatValue == length->_floatValue && _intValue == length->_intValue;
 }
 
 - (BOOL)isFixed
@@ -58,4 +95,9 @@
     return _type == WXLengthTypeAuto;
 }
 
+- (BOOL)isNormal
+{
+    return _type == WXLengthTypeNormal;
+}
+
 @end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLog.h b/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
index 8eb4b32..7922a70 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLog.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
index 3a0d4f1..d086455 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXLog.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXLog.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h b/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
index c45dae6..e77c943 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m b/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m
index 50cd7c8..966ac86 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXSimulatorShortcutManager.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXSimulatorShortcutManager.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
index c454ded..8e21b35 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m
index 7dad802..ce3f485 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeCounter.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXThreadSafeCounter.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
index 7d6f518..a164076 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m
index c010f8a..421a14d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableArray.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXThreadSafeMutableArray.h"
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
index 143bb13..3d9afae 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m
index 0d3ae74..d70cf3d 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXThreadSafeMutableDictionary.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXThreadSafeMutableDictionary.h"
@@ -132,4 +143,4 @@
     return copyInstance;
 }
 
-@end
\ No newline at end of file
+@end
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXType.h b/ios/sdk/WeexSDK/Sources/Utility/WXType.h
index e00878d..a33b9cc 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXType.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXType.h
@@ -1,14 +1,30 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
 
+typedef NS_ENUM(NSUInteger, WXComponentType) {
+    WXComponentTypeCommon = 0,
+    WXComponentTypeVirtual
+};
+
 typedef NS_ENUM(NSUInteger, WXScrollDirection) {
     WXScrollDirectionVertical,
     WXScrollDirectionHorizontal,
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
index d8950d1..0644c9a 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
@@ -215,6 +226,8 @@
  */
 + (UIFont *_Nonnull)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *_Nullable)fontFamily scaleFactor:(CGFloat)scaleFactor;
 
++ (UIFont *_Nonnull)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *_Nullable)fontFamily scaleFactor:(CGFloat)scaleFactor useCoreText:(BOOL)useCoreText;
+
 /**
  * @abstract download remote font from specified url
  * @param fontURL for remote font
@@ -357,6 +370,33 @@
 CGPoint WXPixelPointResize(CGPoint value) DEPRECATED_MSG_ATTRIBUTE("Use WXPixelScale Instead");
 + (UIFont  * _Nullable )fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString * _Nullable)fontFamily DEPRECATED_MSG_ATTRIBUTE("Use +[WXUtility fontWithSize:textWeight:textStyle:fontFamily:scaleFactor:]");
 
+
+/**
+ @discusstion construct a gradientLayer from the colors locations, gradientType
+ @param colors The array of UIColor objects defining the color of each gradient
+ stop. Defaults to nil
+ @param locations An optional array of NSNumber objects defining the location of each
+  gradient stop as a value in the range [0,1].
+ @param frame the layer frame
+ @param gradientType WXGradientType value specify the gradient location
+ @return gradient layer
+ */
++ (CAGradientLayer *_Nullable)gradientLayerFromColors:(NSArray*_Nullable)colors
+                                           locations:(NSArray*_Nullable)locations
+                                               frame:(CGRect)frame
+                                        gradientType:(WXGradientType)gradientType;
+
+/**
+ @discusstion parse gradient-color string to a dictionary, then you can get gradientLayer from @see gradientLayerFromColors:colors:locations:frame:locations
+ @param backgroundImage  linear-gradient string like linear-gradient(to right, #a80077,rgba(200, 54, 54, 0.5))
+ @return dictionary with endColor, startColor and gradientType value
+ @code
+    NSDictionary * linearGradient = [self linearGradientWithBackgroundImage:@"linear-gradient(to right, #a80077,rgba(200, 54, 54, 0.5))"];
+    CAGradientLayer * gradientLayer = [self gradientLayerFromColors:@[linearGradient[@"startColor"], linearGradient[@"endColor"]],nil,bounds,[linearGradient[@"gradientType"] integerValue]];
+ @endcode
+ */
++ (NSDictionary *_Nullable)linearGradientWithBackgroundImage:(NSString *_Nullable)backgroundImage;
+
 /**
  *  @abstract compare float a and b, if a equal b, return true,or reture false.
  *
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
index 23b1b1b..d2c2e1a 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXUtility.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXUtility.h"
@@ -13,6 +24,7 @@
 #import "WXThreadSafeMutableDictionary.h"
 #import "WXRuleManager.h"
 #import "WXSDKEngine.h"
+#import "WXConvert.h"
 #import <objc/runtime.h>
 #import <objc/message.h>
 #import <sys/utsname.h>
@@ -21,6 +33,8 @@
 #import <CommonCrypto/CommonCrypto.h>
 #import <coreText/CoreText.h>
 
+#import "WXTextComponent.h"
+
 #define KEY_PASSWORD  @"com.taobao.Weex.123456"
 #define KEY_USERNAME_PASSWORD  @"com.taobao.Weex.weex123456"
 
@@ -325,12 +339,113 @@
     return [NSError errorWithDomain:@"WeexErrorDomain" code:code userInfo:@{@"errMsg":message}];
 }
 
++ (NSDictionary *)linearGradientWithBackgroundImage:(NSString *)backgroundImage
+{
+    NSMutableDictionary * linearGradient = nil;
+    if ([backgroundImage hasPrefix:@"linear-gradient"] && [backgroundImage hasSuffix:@")"] ) {
+        backgroundImage = [backgroundImage stringByReplacingOccurrencesOfString:@" " withString:@""];
+        NSRange range = NSMakeRange(16, backgroundImage.length - 17);
+        NSString *str = [backgroundImage substringWithRange:range];
+        NSArray *array = [str componentsSeparatedByString:@","];
+        WXGradientType gradientType = WXGradientTypeToTop;
+        UIColor *startColor, *endColor;
+        if ([array count] < 3) {
+            return linearGradient;
+        }
+        if ([array count] == 3) {
+            gradientType = [WXConvert gradientType:array[0]];
+            startColor = [WXConvert UIColor:array[1]];
+            endColor = [WXConvert UIColor:array[2]];
+        } else if ([array count] > 3) {
+            NSString *gradientTypeStr = array[0];
+            NSString *subStr = [str substringFromIndex:gradientTypeStr.length + 1];
+            if ([subStr hasPrefix:@"rgb"]) {
+                gradientType = [WXConvert gradientType:gradientTypeStr];
+                
+                range = [subStr rangeOfString:@")"];
+                NSString *startColorStr = [subStr substringToIndex:range.location + 1];
+                NSString *endColorStr = [subStr substringFromIndex:range.location + 2];
+                startColor = [WXConvert UIColor:startColorStr];
+                endColor = [WXConvert UIColor:endColorStr];
+            }
+            else {
+                gradientType = [WXConvert gradientType:gradientTypeStr];
+                
+                startColor = [WXConvert UIColor:array[1]];
+                
+                NSString *startColorStr = array[1];
+                NSString *endColorStr = [subStr substringFromIndex:startColorStr.length + 1];
+                endColor = [WXConvert UIColor:endColorStr];
+            }
+        }
+        
+        if (endColor || startColor) {
+            linearGradient = [NSMutableDictionary new];
+            [linearGradient setValue:startColor forKey:@"startColor"];
+            [linearGradient setValue:endColor forKey:@"endColor"];
+            [linearGradient setValue:@(gradientType) forKey:@"gradientType"];
+        }
+    }
+    return linearGradient;
+}
+
++ (CAGradientLayer *)gradientLayerFromColors:(NSArray*)colors locations:(NSArray*)locations frame:(CGRect)frame gradientType:(WXGradientType)gradientType
+{
+    CAGradientLayer * gradientLayer = [CAGradientLayer layer];
+    NSMutableArray *newColors = [NSMutableArray new];
+    for(UIColor *color in colors) {
+        [newColors addObject:(id)color.CGColor];
+    }
+    if (colors) {
+        gradientLayer.colors = newColors;
+    }
+    if (locations) {
+        gradientLayer.locations = locations;
+    }
+    CGPoint start = CGPointZero;
+    CGPoint end = CGPointZero;
+    switch (gradientType) {
+        case WXGradientTypeToTop:
+            start = CGPointMake(0.0, 1.0);
+            end = CGPointMake(0.0, 0.0);
+            break;
+        case WXGradientTypeToBottom:
+            start = CGPointMake(0.0, 0.0);
+            end = CGPointMake(0.0, 1.0);
+            break;
+        case WXGradientTypeToLeft:
+            start = CGPointMake(1.0, 0.0);
+            end = CGPointMake(0.0, 0.0);
+            break;
+        case WXGradientTypeToRight:
+            start = CGPointMake(0.0, 0.0);
+            end = CGPointMake(1.0, 0.0);
+            break;
+        case WXGradientTypeToTopleft:
+            start = CGPointMake(1.0, 1.0);
+            end = CGPointMake(0.0, 0.0f);
+            break;
+        case WXGradientTypeToBottomright:
+            start = CGPointMake(0.0, 0.0);
+            end = CGPointMake(1.0, 1.0);
+            break;
+        default:
+            break;
+    }
+    
+    gradientLayer.startPoint = start;
+    gradientLayer.endPoint = end;
+    gradientLayer.frame = frame;
+    
+    return gradientLayer;
+}
+
 + (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily
 {
     return [self fontWithSize:size textWeight:textWeight textStyle:textStyle fontFamily:fontFamily scaleFactor:[self defaultPixelScaleFactor]];
 }
 
-+ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily scaleFactor:(CGFloat)scaleFactor
++ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily scaleFactor:(CGFloat)scaleFactor useCoreText:(BOOL)useCoreText
 {
     CGFloat fontSize = (isnan(size) || size == 0) ?  32 * scaleFactor : size;
     UIFont *font = nil;
@@ -342,13 +457,42 @@
         if ([self isFileExist:fpath]) {
             // if the font file is not the correct font file. it will crash by singal 9
             CFURLRef fontURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (__bridge CFStringRef)fpath, kCFURLPOSIXPathStyle, false);
-            CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL(fontURL);
-            CFRelease(fontURL);
-            CGFontRef graphicFont = CGFontCreateWithDataProvider(fontDataProvider);
-            CGDataProviderRelease(fontDataProvider);
-            CTFontRef smallFont = CTFontCreateWithGraphicsFont(graphicFont, size, NULL, NULL);
-            CFRelease(graphicFont);
-            font = (__bridge_transfer UIFont*)smallFont;
+            if (fontURL) {
+                if (useCoreText) {
+                    CGDataProviderRef fontDataProvider = CGDataProviderCreateWithURL(fontURL);
+                    if (fontDataProvider) {
+                        CGFontRef newFont = CGFontCreateWithDataProvider(fontDataProvider);
+                        CFErrorRef error = nil;
+                        CTFontManagerRegisterGraphicsFont(newFont, &error);
+                        // the same font family, remove it and register new one.
+                        if (error) {
+                            CTFontManagerUnregisterGraphicsFont(newFont, NULL);
+                            CTFontManagerRegisterGraphicsFont(newFont, NULL);
+                            CFRelease(error);
+                            error = nil;
+                        }
+                        fontFamily = (__bridge_transfer  NSString*)CGFontCopyPostScriptName(newFont);
+                        CGFontRelease(newFont);
+                        CFRelease(fontURL);
+                        CFRelease(fontDataProvider);
+                    }
+                } else {
+                    CFErrorRef error = nil;
+                    CTFontManagerRegisterFontsForURL(fontURL, kCTFontManagerScopeProcess, &error);
+                    if (error) {
+                        CFRelease(error);
+                        error = nil;
+                        CTFontManagerUnregisterFontsForURL(fontURL, kCTFontManagerScopeProcess, NULL);
+                        CTFontManagerRegisterFontsForURL(fontURL, kCTFontManagerScopeProcess, NULL);
+                    }
+                    NSArray *descriptors = (__bridge_transfer NSArray *)CTFontManagerCreateFontDescriptorsFromURL(fontURL);
+                    // length of descriptors here will be only one.
+                    for (UIFontDescriptor *desc in descriptors) {
+                        font = [UIFont fontWithDescriptor:desc size:fontSize];
+                    }
+                    CFRelease(fontURL);
+                }
+            }
         }else {
             [[WXRuleManager sharedInstance] removeRule:@"fontFace" rule:@{@"fontFamily": fontFamily}];
         }
@@ -388,13 +532,18 @@
     return font;
 }
 
++ (UIFont *)fontWithSize:(CGFloat)size textWeight:(CGFloat)textWeight textStyle:(WXTextStyle)textStyle fontFamily:(NSString *)fontFamily scaleFactor:(CGFloat)scaleFactor
+{
+    return [self fontWithSize:size textWeight:textWeight textStyle:textStyle fontFamily:fontFamily scaleFactor:scaleFactor useCoreText:NO];
+}
+
 + (void)getIconfont:(NSURL *)url completion:(void(^)(NSURL *url, NSError *error))completionBlock
 {
     dispatch_async(dispatch_get_global_queue(0, 0), ^{
         if ([url isFileURL]) {
             // local file url
             NSError * error = nil;
-            if (![WXUtility isFileExist:url.absoluteString]) {
+            if (![WXUtility isFileExist:url.path]) {
                 error = [NSError errorWithDomain:WX_ERROR_DOMAIN code:-1 userInfo:@{@"errMsg":[NSString stringWithFormat:@"local font %@ is't exist", url.absoluteString]}];
             }
             completionBlock(url, error);
@@ -432,7 +581,6 @@
 
 + (BOOL)isFileExist:(NSString *)filePath
 {
-    
     return [[NSFileManager defaultManager] fileExistsAtPath:filePath];
 }
 
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h b/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
index 2e90fe4..1e9f587 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m b/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m
index f807b00..4e90399 100644
--- a/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m
+++ b/ios/sdk/WeexSDK/Sources/Utility/WXWeakObjectWrapper.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWeakObjectWrapper.h"
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h b/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
index 842978a..5465ff4 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <WeexSDK/WeexSDK.h>
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m
index 0d8d9e6..f87470c 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+PseudoClassManagement.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent+PseudoClassManagement.h"
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
index 8a20f87..e8ee8fd 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent.h"
diff --git a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
index fa043f9..c93df20 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXComponent+ViewManagement.m
@@ -1,14 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXComponent+ViewManagement.h"
 #import "WXComponent_internal.h"
-#import "WXComponent+GradientColor.h"
+#import "WXComponent+BoxShadow.h"
 #import "WXAssert.h"
 #import "WXView.h"
 #import "WXSDKInstance_private.h"
@@ -34,6 +45,7 @@
 {
     WXAssertMainThread();
     
+    WX_CHECK_COMPONENT_TYPE(self.componentType)
     if (subcomponent->_positionType == WXPositionTypeFixed) {
         [self.weexInstance.rootView addSubview:subcomponent.view];
         return;
@@ -65,6 +77,7 @@
 
 - (void)moveToSuperview:(WXComponent *)newSupercomponent atIndex:(NSUInteger)index
 {
+    WX_CHECK_COMPONENT_TYPE(self.componentType)
     [self removeFromSuperview];
     [newSupercomponent insertSubview:self atIndex:index];
 }
@@ -94,26 +107,37 @@
 - (void)_initViewPropertyWithStyles:(NSDictionary *)styles
 {
     _backgroundColor = styles[@"backgroundColor"] ? [WXConvert UIColor:styles[@"backgroundColor"]] : [UIColor clearColor];
-    _backgroundImage = styles[@"backgroundImage"] ? [[WXConvert NSString:styles[@"backgroundImage"]]stringByReplacingOccurrencesOfString:@" " withString:@""]: nil;
+    _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
     _opacity = styles[@"opacity"] ? [WXConvert CGFloat:styles[@"opacity"]] : 1.0;
     _clipToBounds = styles[@"overflow"] ? [WXConvert WXClipType:styles[@"overflow"]] : NO;
     _visibility = styles[@"visibility"] ? [WXConvert WXVisibility:styles[@"visibility"]] : WXVisibilityShow;
     _positionType = styles[@"position"] ? [WXConvert WXPositionType:styles[@"position"]] : WXPositionTypeRelative;
     _transform = styles[@"transform"] || styles[@"transformOrigin"] ?
-    [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:styles[@"transformOrigin"] instance:self.weexInstance] :
+    [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:styles[@"transform"]] origin:[WXConvert NSString:styles[@"transformOrigin"]] instance:self.weexInstance] :
     [[WXTransform alloc] initWithCSSValue:nil origin:nil instance:self.weexInstance];
+    _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
+    if (_boxShadow) {
+        _lastBoxShadow = _boxShadow;
+    }
 }
 
 - (void)_updateViewStyles:(NSDictionary *)styles
 {
+    WX_CHECK_COMPONENT_TYPE(self.componentType)
+    if (styles[@"boxShadow"]) {
+        _lastBoxShadow = _boxShadow;
+        _boxShadow = styles[@"boxShadow"]?[WXConvert WXBoxShadow:styles[@"boxShadow"] scaleFactor:self.weexInstance.pixelScaleFactor]:nil;
+        [self configBoxShadow:_boxShadow];
+        [self setNeedsDisplay];
+    }
+    
     if (styles[@"backgroundColor"]) {
         _backgroundColor = [WXConvert UIColor:styles[@"backgroundColor"]];
-        _layer.backgroundColor = _backgroundColor.CGColor;
         [self setNeedsDisplay];
     }
     
     if (styles[@"backgroundImage"]) {
-        _backgroundImage = styles[@"backgroundImage"] ? [[WXConvert NSString:styles[@"backgroundImage"]]stringByReplacingOccurrencesOfString:@" " withString:@""]: nil;
+        _backgroundImage = styles[@"backgroundImage"] ? [WXConvert NSString:styles[@"backgroundImage"]]: nil;
         
         if (_backgroundImage) {
             [self setGradientLayer];
@@ -163,7 +187,7 @@
     
     if (styles[@"transformOrigin"] || styles[@"transform"]) {
         id transform = styles[@"transform"] ? : self.styles[@"transform"];
-        id transformOrigin = styles[@"transformOrigin"] ? : self.styles[@"transformOrigin"];
+        id transformOrigin = styles[@"transformOrigin"] ? [WXConvert NSString:styles[@"transformOrigin"]] : [WXConvert NSString:self.styles[@"transformOrigin"]];
         _transform = [[WXTransform alloc] initWithCSSValue:[WXConvert NSString:transform] origin:transformOrigin instance:self.weexInstance];
         if (!CGRectEqualToRect(self.calculatedFrame, CGRectZero)) {
             [_transform applyTransformForView:_view];
@@ -176,7 +200,11 @@
 {
     if (styles && [styles containsObject:@"backgroundColor"]) {
         _backgroundColor = [UIColor clearColor];
-        _layer.backgroundColor = _backgroundColor.CGColor;
+        [self setNeedsDisplay];
+    }
+    if (styles && [styles containsObject:@"boxShadow"]) {
+        _lastBoxShadow = _boxShadow;
+        _boxShadow = nil;
         [self setNeedsDisplay];
     }
 }
diff --git a/ios/sdk/WeexSDK/Sources/View/WXErrorView.h b/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
index 2419fb2..80f3954 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
+++ b/ios/sdk/WeexSDK/Sources/View/WXErrorView.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/View/WXErrorView.m b/ios/sdk/WeexSDK/Sources/View/WXErrorView.m
index f447656..c65c3a4 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXErrorView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXErrorView.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXErrorView.h"
diff --git a/ios/sdk/WeexSDK/Sources/View/WXRootView.h b/ios/sdk/WeexSDK/Sources/View/WXRootView.h
index 0c2cedb..b0605be 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXRootView.h
+++ b/ios/sdk/WeexSDK/Sources/View/WXRootView.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/View/WXRootView.m b/ios/sdk/WeexSDK/Sources/View/WXRootView.m
index 50be767..acb2a3d 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXRootView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXRootView.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXRootView.h"
diff --git a/ios/sdk/WeexSDK/Sources/View/WXView.h b/ios/sdk/WeexSDK/Sources/View/WXView.h
index c81c9f8..c7f0afd 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXView.h
+++ b/ios/sdk/WeexSDK/Sources/View/WXView.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <UIKit/UIKit.h>
diff --git a/ios/sdk/WeexSDK/Sources/View/WXView.m b/ios/sdk/WeexSDK/Sources/View/WXView.m
index 6185427..9494146 100644
--- a/ios/sdk/WeexSDK/Sources/View/WXView.m
+++ b/ios/sdk/WeexSDK/Sources/View/WXView.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXView.h"
diff --git a/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.h b/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.h
index c4823d6..6623319 100644
--- a/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.h
+++ b/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "SRWebSocket.h"
diff --git a/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.m b/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.m
index f6cdfd1..afdbcfa 100644
--- a/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.m
+++ b/ios/sdk/WeexSDK/Sources/WebSocket/SRWebSocket+Weex.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "SRWebSocket+Weex.h"
diff --git a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.h b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.h
index 5ff8009..4eb7631 100644
--- a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.h
+++ b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.m b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.m
index 12bb4ff..951f385 100644
--- a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.m
+++ b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketDefaultImpl.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WXWebSocketDefaultImpl.h"
diff --git a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
index 3346609..5ac21e1 100644
--- a/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
+++ b/ios/sdk/WeexSDK/Sources/WebSocket/WXWebSocketHandler.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK/Sources/WeexSDK.h b/ios/sdk/WeexSDK/Sources/WeexSDK.h
index fb88177..72b86f4 100644
--- a/ios/sdk/WeexSDK/Sources/WeexSDK.h
+++ b/ios/sdk/WeexSDK/Sources/WeexSDK.h
@@ -1,13 +1,25 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- * 
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+* Licensed to the Apache Software Foundation (ASF) under one 
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.
  */
 
 #ifdef __OBJC__
 
+#import "WXValidateProtocol.h"
 #import "WXUtility.h"
 #import "WXURLRewriteProtocol.h"
 #import "WXType.h"
@@ -43,6 +55,7 @@
 #import "WXBaseViewController.h"
 #import "WXAppMonitorProtocol.h"
 #import "WXAppConfiguration.h"
+#import "WXAComponent.h"
 #import "NSObject+WXSwizzle.h"
 #import "Layout.h"
 
diff --git a/ios/sdk/WeexSDKTests/TestSupportUtils.h b/ios/sdk/WeexSDKTests/TestSupportUtils.h
index 748d8e9..37975ff 100644
--- a/ios/sdk/WeexSDKTests/TestSupportUtils.h
+++ b/ios/sdk/WeexSDKTests/TestSupportUtils.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDKTests/TestSupportUtils.m b/ios/sdk/WeexSDKTests/TestSupportUtils.m
index 3c315b9..7e77ba7 100644
--- a/ios/sdk/WeexSDKTests/TestSupportUtils.m
+++ b/ios/sdk/WeexSDKTests/TestSupportUtils.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "TestSupportUtils.h"
diff --git a/ios/sdk/WeexSDKTests/WXAnimationModuleTests.m b/ios/sdk/WeexSDKTests/WXAnimationModuleTests.m
index 95cdf0f..b0bc67b 100644
--- a/ios/sdk/WeexSDKTests/WXAnimationModuleTests.m
+++ b/ios/sdk/WeexSDKTests/WXAnimationModuleTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXBridgeMethodTests.m b/ios/sdk/WeexSDKTests/WXBridgeMethodTests.m
index d9d9eba..dc8580a 100644
--- a/ios/sdk/WeexSDKTests/WXBridgeMethodTests.m
+++ b/ios/sdk/WeexSDKTests/WXBridgeMethodTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXComponentTests.m b/ios/sdk/WeexSDKTests/WXComponentTests.m
index d320d81..0ca4cc7 100644
--- a/ios/sdk/WeexSDKTests/WXComponentTests.m
+++ b/ios/sdk/WeexSDKTests/WXComponentTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXConvertTests.m b/ios/sdk/WeexSDKTests/WXConvertTests.m
index 3e89911..f3ed6a2 100644
--- a/ios/sdk/WeexSDKTests/WXConvertTests.m
+++ b/ios/sdk/WeexSDKTests/WXConvertTests.m
@@ -1,10 +1,21 @@
-//
-//  WXConvertTests.m
-//  WeexSDK
-//
-//  Created by Keen Zhi on 16/9/20.
-//  Copyright © 2016年 taobao. All rights reserved.
-//
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 #import <XCTest/XCTest.h>
 #import "WXConvert.h"
diff --git a/ios/sdk/WeexSDKTests/WXFloatCompareTests.m b/ios/sdk/WeexSDKTests/WXFloatCompareTests.m
index f82c78d..261699b 100644
--- a/ios/sdk/WeexSDKTests/WXFloatCompareTests.m
+++ b/ios/sdk/WeexSDKTests/WXFloatCompareTests.m
@@ -1,10 +1,21 @@
-//
-//  WXFloatCompareTests.m
-//  WeexSDK
-//
-//  Created by 齐山 on 17/1/22.
-//  Copyright © 2017年 taobao. All rights reserved.
-//
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 #import <XCTest/XCTest.h>
 #import "WXUtility.h"
diff --git a/ios/sdk/WeexSDKTests/WXInstanceWrapTests.m b/ios/sdk/WeexSDKTests/WXInstanceWrapTests.m
index 57b6372..806674d 100644
--- a/ios/sdk/WeexSDKTests/WXInstanceWrapTests.m
+++ b/ios/sdk/WeexSDKTests/WXInstanceWrapTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXRootViewTests.m b/ios/sdk/WeexSDKTests/WXRootViewTests.m
index 0e25a04..3f3fa58 100644
--- a/ios/sdk/WeexSDKTests/WXRootViewTests.m
+++ b/ios/sdk/WeexSDKTests/WXRootViewTests.m
@@ -1,10 +1,21 @@
-//
-//  WXRootViewTests.m
-//  WeexSDK
-//
-//  Created by yinfeng on 2016/10/29.
-//  Copyright © 2016年 taobao. All rights reserved.
-//
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 #import <XCTest/XCTest.h>
 #import "WXSDKInstance.h"
@@ -31,7 +42,7 @@
 }
 
 - (void)testInstanceAndWeexRootFrame {
-    CGRect instanceFrame = CGRectMake(1, 2, 345, 678);
+    /*CGRect instanceFrame = CGRectMake(1, 2, 345, 678);
     CGRect templateRootFrame = CGRectMake(8, 7, 654, 321);
     NSDictionary *templateRootFrameData = @{@"left":@(templateRootFrame.origin.x),
                                             @"top":@(templateRootFrame.origin.y),
@@ -129,7 +140,7 @@
         if (error) {
             NSLog(@"Timeout Error: %@", error);
         }
-    }];
+    }];*/
 }
 
 
diff --git a/ios/sdk/WeexSDKTests/WXSDKEngineTests.m b/ios/sdk/WeexSDKTests/WXSDKEngineTests.m
index a3a22ed..b1bd414 100644
--- a/ios/sdk/WeexSDKTests/WXSDKEngineTests.m
+++ b/ios/sdk/WeexSDKTests/WXSDKEngineTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXSDKManagerTests.m b/ios/sdk/WeexSDKTests/WXSDKManagerTests.m
index 94d44fe..33b9b63 100644
--- a/ios/sdk/WeexSDKTests/WXSDKManagerTests.m
+++ b/ios/sdk/WeexSDKTests/WXSDKManagerTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXStorageTests.m b/ios/sdk/WeexSDKTests/WXStorageTests.m
index eb64bbf..b14ada1 100644
--- a/ios/sdk/WeexSDKTests/WXStorageTests.m
+++ b/ios/sdk/WeexSDKTests/WXStorageTests.m
@@ -1,10 +1,21 @@
-//
-//  WXStorageTests.m
-//  WeexSDK
-//
-//  Created by Jun Shi on 7/22/16.
-//  Copyright © 2016 taobao. All rights reserved.
-//
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 #import <XCTest/XCTest.h>
 #import "WeexSDK.h"
@@ -120,16 +131,11 @@
                 NSDictionary *infoDic = [NSDictionary dictionaryWithContentsOfFile:weakSelf.infoPath];
                 NSArray *indexArray = [NSArray arrayWithContentsOfFile:weakSelf.indexPath];
                 
-                NSTimeInterval tsNow = [[NSDate date] timeIntervalSince1970];
-                NSTimeInterval ts = [infoDic[@"key1"][@"ts"] doubleValue];
-                NSLog(@"ts:%f",ts);
-                
                 XCTAssert([@"success" isEqualToString:result[@"result"]]);
                 XCTAssert([@"shortValue12" isEqualToString:dic[@"key1"]]);
                 XCTAssertEqual(infoDic[@"key1"][@"persistent"], @(NO));
                 XCTAssertEqual(infoDic[@"key1"][@"size"], @([@"shortValue12" length]));
                 XCTAssertTrue([indexArray containsObject:@"key1"]);
-                XCTAssertTrue(ABS(tsNow - ts) <= 0.1);
             }];
         }];
     });
@@ -225,16 +231,12 @@
             NSDictionary *infoDic = [NSDictionary dictionaryWithContentsOfFile:weakSelf.infoPath];
             NSArray *indexArray = [NSArray arrayWithContentsOfFile:weakSelf.indexPath];
             
-            NSTimeInterval tsNow = [[NSDate date] timeIntervalSince1970];
-            NSTimeInterval ts = [infoDic[@"key4"][@"ts"] doubleValue];
-            
             XCTAssertEqual(result[@"result"], @"success");
             XCTAssertNotEqual(dic[@"key4"], longValue);
             XCTAssertTrue([dic[@"key4"] isEqualToString:@"#{eulaVlluNegarotSXW}"]);
             XCTAssertFalse([infoDic[@"key4"][@"persistent"] boolValue]);
             XCTAssertTrue([infoDic[@"key4"][@"size"] integerValue] == [longValue length]);
             XCTAssertTrue([indexArray containsObject:@"key4"]);
-            XCTAssertTrue(ABS(tsNow - ts) <= 0.5);
             
             [self.storage getItem:@"key4" callback:^(id result) {
                 [expectation fulfill];
diff --git a/ios/sdk/WeexSDKTests/WXStreamModuleTests.m b/ios/sdk/WeexSDKTests/WXStreamModuleTests.m
index 996ceed..243e827 100644
--- a/ios/sdk/WeexSDKTests/WXStreamModuleTests.m
+++ b/ios/sdk/WeexSDKTests/WXStreamModuleTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXTimerModuleTests.m b/ios/sdk/WeexSDKTests/WXTimerModuleTests.m
index e6de37d..e4ebb40 100644
--- a/ios/sdk/WeexSDKTests/WXTimerModuleTests.m
+++ b/ios/sdk/WeexSDKTests/WXTimerModuleTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDKTests/WXURLRewriteTests.m b/ios/sdk/WeexSDKTests/WXURLRewriteTests.m
index 7a1f334..eb6a5fe 100644
--- a/ios/sdk/WeexSDKTests/WXURLRewriteTests.m
+++ b/ios/sdk/WeexSDKTests/WXURLRewriteTests.m
@@ -1,10 +1,21 @@
-//
-//  WXURLRewriteTests.m
-//  WeexSDK
-//
-//  Created by yinfeng on 2016/11/24.
-//  Copyright © 2016年 taobao. All rights reserved.
-//
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 
 #import <XCTest/XCTest.h>
 #import "WXURLRewriteProtocol.h"
diff --git a/ios/sdk/WeexSDKTests/WeexSDKTests.m b/ios/sdk/WeexSDKTests/WeexSDKTests.m
index d7cd73e..488682c 100644
--- a/ios/sdk/WeexSDKTests/WeexSDKTests.m
+++ b/ios/sdk/WeexSDKTests/WeexSDKTests.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
  *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <XCTest/XCTest.h>
diff --git a/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.h b/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.h
index f125b32..52a27ba 100644
--- a/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.h
+++ b/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.h
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import <Foundation/Foundation.h>
diff --git a/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.m b/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.m
index 3085792..f0f8d82 100644
--- a/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.m
+++ b/ios/sdk/WeexSDK_MTL/WeexSDK_MTL.m
@@ -1,9 +1,20 @@
-/**
- * Created by Weex.
- * Copyright (c) 2016, Alibaba, Inc. All rights reserved.
- *
- * This source code is licensed under the Apache Licence 2.0.
- * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
  */
 
 #import "WeexSDK_MTL.h"
diff --git a/ios/sdk/buildScripts.sh b/ios/sdk/buildScripts.sh
index 8e168b4..8f8fe80 100644
--- a/ios/sdk/buildScripts.sh
+++ b/ios/sdk/buildScripts.sh
@@ -5,12 +5,23 @@
 function generateFileHeader() {
 	headerFilePath=$1
 	headerFileName=`basename $1`
-	echo '/**' > $headerFilePath
-	echo ' * Created by Weex.' >> $headerFilePath
-	echo ' * Copyright (c) 2016, Alibaba, Inc. All rights reserved.' >> $headerFilePath
-	echo ' * ' >> $headerFilePath
-	echo ' * This source code is licensed under the Apache Licence 2.0.' >> $headerFilePath
-	echo ' * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.' >> $headerFilePath
+	echo '/*' > $headerFilePath
+echo '* Licensed to the Apache Software Foundation (ASF) under one 
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*   http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied.  See the License for the
+* specific language governing permissions and limitations
+* under the License.' >> $headerFilePath
 	echo ' */' >> $headerFilePath
 	echo '' >> $headerFilePath
 	echo '#ifdef __OBJC__' >> $headerFilePath
@@ -101,4 +112,4 @@
 		rm $publicHeaderFilePath
 	fi
 	generateHeader "${PROJECT_DIR}/${PROJECT_NAME}.xcodeproj" "${publicHeaderFilePath}" 'Public' $sdkName
-}
\ No newline at end of file
+}
diff --git a/package.json b/package.json
index 8602062..90b949c 100644
--- a/package.json
+++ b/package.json
@@ -3,7 +3,8 @@
   "version": "0.4.0",
   "subversion": {
     "browser": "0.5.0",
-    "framework": "0.19.8",
+    "framework": "0.20.5",
+    "vue-render": "0.11.10",
     "transformer": ">=0.1.5 <0.5"
   },
   "description": "A framework for building Mobile cross-platform UI",
@@ -41,15 +42,18 @@
     "build:runtime": "node build/build.js runtime",
     "build:browser": "wwp && node build/build.js browser",
     "build:browser:common": "rollup -c build/rollup.browser.common.config.js",
-    "build:vue": "node build/build.js vue",
+    "build:vue": "flow check && node build/build.js vue",
     "build:examples": "npm run build:examples:native && npm run build:examples:web",
     "build:examples:native": "webpack --config build/webpack.examples.config.js",
     "build:examples:web": "webpack --config build/webpack.examples.web.config.js",
     "build:test": "webpack --config build/webpack.test.config.js",
-    "build:ui-test": "webpack --config build/webpack.macacatest.config.js",
+    "build:ci:web": "webpack --watch --config build/webpack.ci.web.config.js",
+    "build:ci:native": "webpack --watch --config build/webpack.ci.config.js",
+    "build:ci": "npm run build:ci:native && npm run build:ci:web",
     "build": "npm run build:native && npm run build:browser && npm run build:vue && npm run build:examples && npm run build:test",
+    "dist:vue": "npm run build:vue && bash ./bin/dist-vue.sh",
     "dist:browser": "npm run build:browser && npm run build:browser:common && bash ./bin/dist-browser.sh",
-    "dist": "npm run dist:browser",
+    "dist": "npm run dist:browser && npm run dist:vue",
     "dev:native": "node build/build.js native --watch",
     "dev:runtime": "node build/build.js runtime --watch",
     "dev:browser": "wwp && node build/build.js native --watch",
@@ -58,44 +62,46 @@
     "dev:examples:web": "webpack --watch --config build/webpack.examples.web.config.js",
     "dev:test": "webpack --watch --config build/webpack.test.config.js",
     "lint": "eslint html5",
+    "flow": "flow check",
     "test:case": "mocha --require reify html5/test/case/tester.js",
-    "test:vue": "karma start build/karma.vue.conf.js",
+    "test:vue": "webpack --config build/webpack.test.web.config.js && karma start build/karma.vue.conf.js",
     "test:unit": "mocha --require reify html5/test/unit/*/*.js html5/test/unit/*/*/*.js",
-    "test": "npm run lint && npm run test:unit && npm run test:case",
+    "test": "npm run lint && npm run test:unit && npm run test:case && npm run test:vue",
     "test:cover-html": "babel-istanbul cover --report html node_modules/mocha/bin/_mocha -- --require reify --reporter dot html5/test/unit/*/*.js html5/test/unit/*/*/*.js && open coverage/index.html",
     "test:cover": "babel-istanbul cover --report text node_modules/mocha/bin/_mocha -- --require reify --reporter dot html5/test/unit/*/*.js html5/test/unit/*/*/*.js",
     "test:e2e": "npm run build:browser && node html5/test/e2e/runner.js",
     "serve": "serve ./ -p 12580",
-    "serve:ui-test": "serve ./test/build/ -p 12581",
+    "serve:ui-test": "serve ./ -p 12581",
     "clean:examples": "echo \"\\033[36;1m[Clean]\\033[0m \\033[33mexamples\\033[0m\" && rm -vrf examples/build/*",
     "clean:test": "echo \"\\033[36;1m[Clean]\\033[0m \\033[33mtest\\033[0m\" && rm -vrf test/build/*",
     "clean": "npm run clean:examples && npm run clean:test",
     "copy:js": "cp -vf ./dist/native.js ./android/sdk/assets/main.js",
     "copy:examples": "rm -rf ./android/playground/app/src/main/assets/* && cp -vrf ./examples/build/* ./android/playground/app/src/main/assets/",
-    "copy": "npm run copy:js && npm run copy:examples"
+    "copy": "npm run copy:js && npm run copy:examples",
+    "danger": "danger"
   },
   "dependencies": {
     "animationjs": "^0.1.5",
+    "blink-diff": "~1.0.12",
     "core-js": "^2.4.0",
     "cubicbezier": "^0.1.1",
     "envd": "^0.1.1",
     "httpurl": "^0.1.1",
+    "inline-style-prefixer": "^3.0.2",
     "lazyimg": "^0.1.5",
     "modals": "^0.1.6",
     "query-string": "^4.2.3",
     "scroll-to": "0.0.2",
     "semver": "^5.1.0",
-    "weex-components": "^0.2.0",
     "weex-picker": "^0.1.0",
-    "weex-rax-framework": "0.1.7",
-    "weex-styler":"0.1.8",
-    "weex-vue-framework": "2.1.8-weex.1"
+    "weex-rax-framework": "0.2.11",
+    "weex-vue-framework": "2.2.2-weex.5",
+    "weex-styler": "0.1.9"
   },
   "devDependencies": {
-    "xml2map": "^1.0.2",
-    "weex-wd": "^1.0.11",
-    "macaca-utils": "^0.1.9",
+    "autoprefixer": "^6.7.7",
     "babel-core": "^6.17.0",
+    "babel-eslint": "^7.2.1",
     "babel-istanbul": "^0.11.0",
     "babel-loader": "^6.2.5",
     "babel-plugin-coverage": "^1.0.0",
@@ -105,7 +111,11 @@
     "chromedriver": "^2.21.2",
     "cross-spawn": "^4.0.0",
     "css-loader": "^0.26.1",
+    "danger": "^0.11.5",
+    "dateformat": "^2.0.0",
     "eslint": "^2.11.1",
+    "eslint-plugin-flowtype": "^2.30.4",
+    "flow-bin": "^0.42.0",
     "fs-extra": "^2.0.0",
     "http-server": "^0.9.0",
     "json-loader": "^0.5.4",
@@ -114,6 +124,8 @@
     "karma-mocha": "^1.3.0",
     "karma-mocha-reporter": "^2.2.1",
     "karma-phantomjs-launcher": "^1.0.2",
+    "karma-rollup-preprocessor": "^3.0.3",
+    "karma-sinon-chai": "^1.2.4",
     "karma-sourcemap-loader": "^0.3.7",
     "karma-webpack": "^1.8.0",
     "macaca-cli": "^1.1.0",
@@ -126,6 +138,8 @@
     "rollup-plugin-buble": "^0.14.0",
     "rollup-plugin-commonjs": "^5.0.4",
     "rollup-plugin-eslint": "^3.0.0",
+    "rollup-plugin-flow": "^1.1.1",
+    "rollup-plugin-flow-no-whitespace": "^1.0.0",
     "rollup-plugin-json": "^2.0.2",
     "rollup-plugin-node-resolve": "^2.0.0",
     "rollup-plugin-postcss": "^0.2.0",
@@ -134,18 +148,21 @@
     "rollup-watch": "^2.5.0",
     "selenium-server": "2.53.1",
     "serve": "^1.4.0",
-    "sinon": "^1.17.4",
+    "sinon": "^2.1.0",
     "sinon-chai": "^2.8.0",
     "uglify-js": "^2.6.4",
-    "vue": "^2.1.10",
-    "vue-loader": "^10.0.1",
-    "vue-template-compiler": "^2.1.10",
+    "vue": "^2.2.6",
+    "vue-loader": "^11.3.3",
+    "vue-template-compiler": "^2.2.6",
     "webdriver-client": "~1.0.0",
     "webpack": "^1.13.1",
     "weex-components": "^0.2.0",
     "weex-loader": "^0.4.0",
     "weex-vdom-tester": "^0.2.0",
+    "weex-wd": "^1.0.23",
     "wwp": "^0.3.5",
-    "xml2map": "^1.0.2"
+    "xml2map": "^1.0.2",
+    "weex-gcanvas":"^0.3.5"
+
   }
 }
diff --git a/packages/weex-vue-render/README.md b/packages/weex-vue-render/README.md
index b824fd0..d41f777 100644
--- a/packages/weex-vue-render/README.md
+++ b/packages/weex-vue-render/README.md
@@ -1,5 +1,32 @@
-# Vue Components for Weex
+# Vue Web Renderer for Weex
 
 This is a group of Vue 2.x components for Weex, which have the same behavior with the Weex built-in components on the native.
 
 It can be run on browser only based on Vue 2.x (without Weex).
+
+## use vue-loader
+
+**NOTE: ** after `v0.11.3` there's no need to add `$processStyle` and `autoprefixer` in your vue-loader config anymore. The runtime render will take care of it once for all.
+
+## component -> dom map
+
+| component | dom element | children | note |
+| --- | --- | ---- | --- |
+| scroller | /main | /main/div/x | - |
+| list | /main | /main/div/x | - |
+| cell | /sect | /sect/x | - |
+| header | /head | /head/x | - |
+| loading | /asid | /aside/x | - |
+| loading-indicator | /mark | /mark/x | - |
+| refresh | /asid | /aside/x | - |
+| slider | /nav | x -> /ul/li/x, indicator -> /nav/nav | - |
+| indicator | /nav | - | indicator points: /nav/mark |
+| a | /a | /a/x | - |
+| div | /div | /div/x | - |
+| image | /figure | - | - |
+| input | /input | - | - |
+| switch | /span | - | round button: /span/small |
+| text | /p | - | - |
+| textarea | /textarea | - | - |
+| video | /video | - | - |
+| web | /iframe | - | - |
diff --git a/packages/weex-vue-render/package.json b/packages/weex-vue-render/package.json
index 4dbb0df..e0eac5e 100644
--- a/packages/weex-vue-render/package.json
+++ b/packages/weex-vue-render/package.json
@@ -1,9 +1,9 @@
 {
   "name": "weex-vue-render",
-  "version": "0.2.0",
+  "version": "0.11.10",
   "description": "Weex built-in components for Vue 2.x.",
   "license": "Apache-2.0",
-  "main": "index.js",
+  "main": "dist/index.js",
   "repository": {
     "type": "git",
     "url": "git@github.com:alibaba/weex.git"
@@ -18,7 +18,12 @@
     "web",
     "component"
   ],
-  "peerDependencies": {
-    "vue": "^2.1.5"
+  "dependencies": {
+    "vue": "^2.1.5",
+    "core-js": "^2.4.1",
+    "envd": "^0.1.1",
+    "httpurl": "^0.1.1",
+    "query-string": "^4.3.2",
+    "inline-style-prefixer": "^3.0.2"
   }
 }
diff --git a/scripts/apache-rat-0.12.jar b/scripts/apache-rat-0.12.jar
new file mode 100644
index 0000000..8cbb23b
--- /dev/null
+++ b/scripts/apache-rat-0.12.jar
Binary files differ
diff --git a/scripts/rat-ant-build.xml b/scripts/rat-ant-build.xml
new file mode 100644
index 0000000..c909080
--- /dev/null
+++ b/scripts/rat-ant-build.xml
@@ -0,0 +1,33 @@
+<project xmlns:rat="antlib:org.apache.rat.anttasks"
+    xmlns="antlib:org.apache.tools.ant">
+    <rat:report>
+        <fileset dir="../" includes="**/*.xml,**/*.m,**/*.h,**/*.mm,**/*.java,**/*.js">
+        <exclude name="**/scripts/*.xml"/>
+        <exclude name="**/ios/sdk/WeexSDKTests/*.js"/>
+        <exclude name="**/packages/weex-html5/demo/build/**.js"/>
+        <exclude name="**/ios/sdk/WeexSDK/Sources/Layout/*.*"/>
+        <exclude name="**/ios/sdk/WeexSDK/Resources/*.js"/>
+        <exclude name="**/ios/playground/bundlejs/**/*.js"/>
+        <exclude name="**/ios/playground/bundlejs/**/*.js"/>
+        <exclude name="**/doc/themes/**/*.js"/>
+        <exclude name="**/android/sdk/src/main/java/com/taobao/weex/dom/flex/*.java"/>
+        <exclude name="**/android/sdk/assets/**/*.js"/>
+        <exclude name="**/android/playground/app/src/main/java_zxing/**/*.java"/>
+        <exclude name="**/android/playground/app/src/main/assets/**/*.js"/>
+        <exclude name="**/html5/frameworks/legacy/*.js"/>
+        <exclude name="**/*.output.js"/>
+        <exclude name="**/html5/test/render/vue/vender/vue-*.js"/>
+        <exclude name="**/flow-typed/**/*.js"/>
+        <!-- 
+        exclude:
+        - generated js exmpales under ios folder
+        - weex html render builder artifacts 
+        - ios test dependency folder
+        - generated js framework under ios and android sdk 
+        - third part js under doc theme folder
+        - css layout source code under android sdk
+        - html 5 legacy framework
+        -->
+        </fileset>
+    </rat:report>
+</project>
\ No newline at end of file
diff --git a/scripts/rat-scan.sh b/scripts/rat-scan.sh
new file mode 100755
index 0000000..f77aecf
--- /dev/null
+++ b/scripts/rat-scan.sh
@@ -0,0 +1,3 @@
+#!/bin/bash -eu
+ant -buildfile scripts/rat-ant-build.xml -lib scripts/apache-rat-0.12.jar
+ 
\ No newline at end of file
diff --git a/scripts/replace-header.sh b/scripts/replace-header.sh
new file mode 100755
index 0000000..7096bab
--- /dev/null
+++ b/scripts/replace-header.sh
@@ -0,0 +1,4 @@
+#!/bin/bash -eu
+  #find ios/playground/WeexDemo -name "*.[m|h]" -exec ./scripts/rh/replace_header.sh {} \;
+  # find html5 -name "*.js" -exec ./scripts/rh/replace_header.sh {} \;
+  # find android -name "*.java" -exec ./scripts/rh/replace_header.sh {} \;
\ No newline at end of file
diff --git a/scripts/rh/LICENSE b/scripts/rh/LICENSE
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/scripts/rh/LICENSE
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/scripts/rh/README b/scripts/rh/README
new file mode 100644
index 0000000..aa39e2a
--- /dev/null
+++ b/scripts/rh/README
@@ -0,0 +1,46 @@
+Replace file header scripts:
+----------------------------
+Author: Gerhard Gappmeier <gerhard.gappmeier [at] ascolab.com> 
+License: These files are distributed under the terms of the GPL.
+         See LICENSE file for more information.
+
+Description: This scripts can replace file headers from C/C++/JAVA header and
+  source files. Often it's necessary to replace the license conditions in
+  multiple source files, update the copyright year, or simply make all file
+  headers consistent. This can be a lot of work, so that's why I wrote this
+  scripts.
+
+How it works: The BASH script replace_header.sh is a simple wrapper that
+  executes the AWK script remove_header.awk which implements a basic state
+  machine for recognizing C/C++/JAVA comments ("// ...", "/* ... */).
+  All comments at the beginning of the file - also when spanning over multiple
+  lines - are ignored until the first line without comment is reached. The AWK
+  file ignores all this comments, and prints the rest of the file unchanged.
+  The BASH script creates a new file with your new header.template and adds your
+  code without the old file header to the newly created file. Afterwards it
+  copies the new file over the old one.
+
+Install: Just unpack the files into your home directory. It will create a
+  directory ~/rh containing all files. Now edit the file ~/rf/header.template
+  to fit your needs. That's it.
+
+Usage: ~/rh/replace_header.sh <file>
+  This replaces only the header of the given file. That's how it works, but the
+  power comes in combination with the find utility. See the following example
+  how it works together with find.
+
+Example: Recursively change all header files
+$ cd ~/your/source/dir
+$ find . -name "*.h" # verify the output to check what is going to be changed.
+$ find . -name "*.h" -exec ~/rh/replace_header.sh {} \; # Now replace them all.
+
+See "man find" for more information on how to use find.
+
+ATTENTION: This script changes the files in place, makes no backups, no
+  warnings, no prompts. You should commit all changes to your version control
+  system before using it, or at least backup your files. (You should really use
+  a VCS like SVN, GIT, CVS, etc.)
+  USE THIS ON YOUR OWN RISK!
+  This scripts are provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
+  WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
diff --git a/scripts/rh/header.template b/scripts/rh/header.template
new file mode 100644
index 0000000..042f3ce
--- /dev/null
+++ b/scripts/rh/header.template
@@ -0,0 +1,18 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
diff --git a/scripts/rh/remove_header.awk b/scripts/rh/remove_header.awk
new file mode 100644
index 0000000..6be02fc
--- /dev/null
+++ b/scripts/rh/remove_header.awk
@@ -0,0 +1,48 @@
+# This script removes ANSI C file header comments
+BEGIN { start = 0; incomment = 0;}
+
+{
+    if (start == 0)
+    {
+        if (incomment == 0)
+        {
+            # C++ single line comment
+            if (/^\/\//)
+            {
+                # print "single line"
+            }
+            # single line comment
+            else if (/^\/\*[^\/]*\*\/$/)
+            {
+                # print "single line"
+            }
+            # multi line comment
+            else if (/^\/\*/)
+            {
+                #print "start comment"
+                # start multi line comment
+                incomment = 1
+            }
+            else
+            {
+                # first line that is not a comment, start normal output
+                print $0;
+                start = 1;
+            }
+        }
+        else
+        {
+            # search for comment end
+            if (/\*\//)
+            {
+                #print "end comment"
+                incomment = 0;
+            }
+        }
+    }
+    else
+    {
+        # print the complete line for the rest of the file
+        print $0
+    }
+}
diff --git a/scripts/rh/replace_header.sh b/scripts/rh/replace_header.sh
new file mode 100755
index 0000000..5f91a48
--- /dev/null
+++ b/scripts/rh/replace_header.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+SOURCE_DIR=`dirname $0`
+if [ $# != 1 ]; then
+    echo "Usage: replace_header.sh <file>"
+    exit 1
+fi
+
+cat $SOURCE_DIR/header.template > $SOURCE_DIR/tmp
+cat $1 | awk -f $SOURCE_DIR/remove_header.awk >> $SOURCE_DIR/tmp
+mv $SOURCE_DIR/tmp $1
+
diff --git a/test/.gitignore b/test/.gitignore
new file mode 100644
index 0000000..96a8c69
--- /dev/null
+++ b/test/.gitignore
@@ -0,0 +1,2 @@
+build-web
+build
\ No newline at end of file
diff --git a/test/README.md b/test/README.md
index e5add1a..d95f5cd 100644
--- a/test/README.md
+++ b/test/README.md
@@ -4,6 +4,7 @@
 
 ## [Setup Macaca](https://macacajs.github.io/zh/environment-setup)
 
+
 ## Run 
 
 ### Test Build-in Cases
@@ -25,4 +26,4 @@
 * `scripts`:    
     Test scripts. Test command will execute each script under this folder.
 * `pages`:    
-    Weex page scripts. These pages will be builded before running test cases. Actually,all the tests is running in these pages.
\ No newline at end of file
+    Weex page scripts. These pages will be builded before running test cases. Actually,all the tests is running in these pages.
diff --git a/test/ci-funcs.sh b/test/ci-funcs.sh
index 9c70019..0719825 100644
--- a/test/ci-funcs.sh
+++ b/test/ci-funcs.sh
@@ -1,18 +1,20 @@
+#!/bin/bash -eu
+
 function installAndroidSDK {
-    brew install android-sdk
-    export ANDROID_HOME=/usr/local/opt/android-sdk
-    export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
-    echo yes | android update sdk --all --no-ui --force -t 2 #platform tools
-    echo yes | android update sdk --all --no-ui --force -t 1 #tools
-    echo yes | android update sdk --all --no-ui --force -t 11 #build-tool
-    echo yes | android update sdk --all --no-ui --force -t 39 #sdk android-19
-    echo yes | android update sdk --all --no-ui --force -t 35 #sdk android-23
-    echo yes | android update sdk --all --no-ui --force -t 96 #sys-img
-    echo yes | android update sdk --all --no-ui --force -t 160 #support
+    # brew install android-sdk
+    # export ANDROID_HOME=/usr/local/opt/android-sdk
+    # export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools
+    echo yes | android update sdk --all --no-ui --force -t platform-tools #platform tools
+    echo yes | android update sdk --all --no-ui --force -t tools #tools
+    echo yes | android update sdk --all --no-ui --force -t build-tools-23.0.2 #build-tool
+    echo yes | android update sdk --all --no-ui --force -t android-19 #sdk android-19
+    echo yes | android update sdk --all --no-ui --force -t android-23 #sdk android-23
+    echo yes | android update sdk --all --no-ui --force -t sys-img-armeabi-v7a-android-21 #sys-img
+    echo yes | android update sdk --all --no-ui --force -t extra-android-m2repository #support
 }
 
 function createAVD {
-    echo no | android create avd --force -n weexavd -t android-19 --abi default/armeabi-v7a
+    echo no | android create avd --force -n weexavd -t android-22 --abi default/armeabi-v7a
 }
 
 function startAVD {
@@ -30,44 +32,13 @@
   adb shell input keyevent 82 &
 }
 
-function setup_cpt {
-    target_android='android'
-    target_ios='ios'
-    target_danger='danger'
-    target_jsfm='jsfm'
-
-    target=${1:-$target_android}
-    
-    if [ $target = $target_android ]; then
-        setupBasic
-        installAndroidSDK
-        JAVA_HOME=$(/usr/libexec/java_home) npm install -g macaca-android
-        createAVD
-        startAVD &
-        npm install
-        export DISPLAY=:99.0
-    elif [ $target = $target_ios ]
-    then
-        setupBasic
-        npm install -g macaca-ios
-        npm install
-        gem install danger danger-xcode_summary xcpretty xcpretty-json-formatter
-    elif [ $target = $target_jsfm ]
-    then
-        npm install
-    else
-        gem install danger danger-xcode_summary xcpretty xcpretty-json-formatter
-    fi
-}
-
-function setupBasic {
-    brew update
-    brew install nvm
+function installNode {
+    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash
+    export NVM_DIR="$HOME/.nvm"
+    bash "$NVM_DIR/nvm.sh"
     export CHROME_BIN=chromium-browser
-    source $(brew --prefix nvm)/nvm.sh
     nvm install 7.0.0
-    brew install ios-webkit-debug-proxy
-    npm install -g macaca-cli
+    nvm use 7.0.0
 }
 
 function printEnvInfo {
@@ -76,35 +47,22 @@
     printenv
 }
 
-function test_cpt {
-    echo 'cilog:start test ......'
-
-    target_android='android'
-    target_ios='ios'
+function runJSTest {
+    set -e
     target_danger='danger'
     target_jsfm='jsfm'
 
-    target=${1:-$target_android}
+    target=${1:-$target_jsfm}
     echo "cilog: target: $target"
-    
-    if [ $target = $target_android ]; then
-        ./test/serve.sh 2&>1 > /dev/null &
-        export ANDROID_HOME=/usr/local/opt/android-sdk
-        cd android && ./run-ci.sh && cd $TRAVIS_BUILD_DIR
-        waitForEmulator
-        JAVA_HOME=$(/usr/libexec/java_home) run_in_ci=true ./test/run.sh
-    elif [ $target = $target_ios ]
-    then
-        ./test/serve.sh 2&>1 > /dev/null &
-        xcodebuild -project ios/sdk/WeexSDK.xcodeproj test -scheme WeexSDKTests CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -destination 'platform=iOS Simulator,name=iPhone 6' | XCPRETTY_JSON_FILE_OUTPUT=ios/sdk/xcodebuild.json xcpretty -f `xcpretty-json-formatter`
-        run_in_ci=true ./test/run.sh ios
-    elif [ $target = $target_jsfm ]
+
+    if [ $target = $target_jsfm ]
     then
         npm run build
         npm run test
-    else
-        xcodebuild -project ios/sdk/WeexSDK.xcodeproj test -scheme WeexSDKTests CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO -destination 'platform=iOS Simulator,name=iPhone 6' | XCPRETTY_JSON_FILE_OUTPUT=ios/sdk/xcodebuild.json xcpretty -f `xcpretty-json-formatter`
-        bundle exec danger
+    elif [ $target = $target_danger ]
+    then
+        npm run danger
     fi
 }
 
+
diff --git a/test/pages/attributes/compositing.vue b/test/pages/attributes/compositing.vue
new file mode 100644
index 0000000..a404f32
--- /dev/null
+++ b/test/pages/attributes/compositing.vue
@@ -0,0 +1,89 @@
+
+<template>
+  <div class="wrapper" @click="update" >
+    <div class="item" compositing=true>
+      <div class="itemWrapper">
+        <div class="nameWrapper">
+          <text class="itemName">Thomas Carlyle</text>
+        </div>
+        <image class="itemPhoto" src="https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg"></image>
+        <div class="descWrapper">
+          <text class="itemDesc">Genius only means hard-working all one\'s life</text>
+        </div>
+      </div>
+    </div>
+
+    <div class="item" compositing=false>
+      <div class="itemWrapper">
+        <div class="nameWrapper">
+          <text class="itemName">Thomas Carlyle</text>
+        </div>
+        <image class="itemPhoto" src="https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg"></image>
+        <div class="descWrapper">
+          <text test-id="test-text" class="itemDesc">Genius only means hard-working all one\'s life</text>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style>
+  .wrapper {
+    align-items: center; 
+    opacity: 0.8;
+  }
+  .itemWrapper {
+    flex:1;
+    border-top-right-radius: 80;
+    border-bottom-right-radius: 80;
+    border-top-width: 10;
+    border-top-color: red;
+    border-style: dashed;
+    align-items: center;
+    background-color: white;
+  }
+  .nameWrapper {
+    background-color:rgba(255,0,0,0.5);
+    border-radius: 30;
+    overflow: visible;
+    border-color: black;
+    border-width: 10;
+  }
+  .item {
+    margin-top: 120px; 
+    background-color: #CCCCCC;
+    align-items: center;
+  }
+  .itemName {
+    font-size:28;
+    color:#333333;
+    line-height:42;
+    text-align:left;
+    margin-top: 24;
+  }
+  .itemPhoto {
+    margin-top: 18;
+    width: 220;
+    height: 220;
+    margin-bottom: 18;
+    border-radius: 30;
+    overflow: hidden;
+    background-color: blue;
+  }
+  .itemDesc {
+    font-size:24;
+    margin:12;
+    color:#999999;
+    line-height:36;
+    text-align:left;
+  }
+</style>
+
+<script>
+  module.exports = {
+    data: {
+    },
+    methods: {
+    }
+  }
+</script>
diff --git a/test/pages/components/recycler.vue b/test/pages/components/recycler.vue
new file mode 100644
index 0000000..46ad0d9
--- /dev/null
+++ b/test/pages/components/recycler.vue
@@ -0,0 +1,499 @@
+<template>
+  <waterfall class="page" ref="waterfall" test-id="waterfall"
+  v-bind:style="{padding:padding}"
+  :column-width="columnWidth" :column-count="columnCount" :column-gap="columnGap"
+  :show-scrollbar="showScrollbar" :scrollable="scrollable"
+  @scroll="recylerScroll" @loadmore="loadmore" loadmoreoffset=3000
+  >
+  <!--<refresh class="refresh" @refresh="onrefresh" @pullingdown="onpullingdown" :display="refreshing ? 'show' : 'hide'">
+      <loading-indicator class="indicator"></loading-indicator>
+      <text class="refreshText">{{refreshText}}</text>
+  </refresh>-->
+    <header class="header" ref="header" test-id="header1" v-if="showHeader">
+      <div class="banner">
+       <image class="absolute" src="https://gw.alicdn.com/tps/TB1ESN1PFXXXXX1apXXXXXXXXXX-1000-600.jpg" resize="cover"></image>
+       <div class="bannerInfo">
+          <image class="avatar" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg" resize="cover"></image>
+          <text class="name">Adam Cat</text>
+          <div class="titleWrap">
+            <text class="title">Genius</text>
+          </div>
+        </div>
+        <div class="bannerPhotoWrap">
+          <image class="bannerPhoto" v-for="photo in banner.photos" :src="photo.src"></image>
+        </div>
+      </div>
+    </header>
+    <header  class="stickyHeader" >
+      <div class="header2" test-id="header2">
+      <div v-if="stickyHeaderType === 'none'" class="stickyWrapper">
+        <text class="stickyText" test-id="stickyText1">Sticky Header</text>
+      </div>
+      <div v-if="stickyHeaderType === 'appear'" class="stickyWrapper">
+        <div class="stickyTextImageWrapper">
+          <text class="stickyText">Last Appear:</text>
+          <image class="stickyImage" :src="appearImage"></image>
+        </div>
+        <div class="stickyTextImageWrapper">
+          <text class="stickyText">Last Disappear:</text>
+          <image class="stickyImage" :src="disappearImage"></image>
+        </div>
+      </div>
+     
+      <div v-if="stickyHeaderType === 'scroll'" class="stickyWrapper">
+        <text class="stickyText">Content Offset:{{contentOffset}}</text>
+      </div>
+     </div>
+    </header>
+  <cell v-for="(item, index) in items" :key="item.src" class="cell" :test-id="'cell' + index" ref="index">
+      <div class="item" @click="onItemclick(item.behaviour, index)" @appear="itemAppear(item.src)" @disappear="itemDisappear(item.src)">
+        <text v-if="item.name" class="itemName">{{item.name}}</text>
+        <image class="itemPhoto" :src="item.src"></image>
+        <text v-if="item.desc" class="itemDesc">{{item.desc}}</text>
+        <text v-if="item.behaviourName" class="itemClickBehaviour"> {{item.behaviourName}}</text>
+      </div>
+    </cell>
+    <header>
+      <div  class="footer" ref="footer" test-id="footer1">
+      <text class="stickyText">Footer</text>
+      </div>
+    </header>
+    <div ref="fixed" class="fixedItem" test-id="fixed1" @click="scrollToNext">
+      <text class="fixedText">bot</text>
+    </div>
+  </waterfall>
+</template>
+
+<style>
+  .page {
+    background-color: #EFEFEF;
+  }
+  .refresh {
+    height: 128;
+    width: 750;
+    flex-direction: row;
+    align-items: center;
+    justify-content: center;
+  }
+  .refreshText {
+    color: #888888;
+    font-weight: bold;
+  }
+  .indicator {
+    color: #888888;
+    height: 40;
+    width: 40;
+    margin-right: 30;
+  }
+  .absolute {
+  position: absolute;
+  top: 0px;
+  width: 750;
+  height: 377;
+}
+  .banner {
+    height: 377;
+    flex-direction: row;
+  }
+  .bannerInfo {
+    width:270;
+    align-items: center;
+    justify-content: center;
+  }
+  .avatar {
+    width: 148;
+    height: 108;
+    border-radius: 54;
+    border-width: 4;
+    border-color: #FFFFFF;
+    margin-bottom: 14;
+  }
+  .name {
+    font-weight: bold;
+    font-size:32;
+    color:#ffffff;
+    line-height:32;
+    text-align:center;
+    margin-bottom: 16;
+  }
+  .titleWrap {
+    width: 100;
+    height: 24;
+    margin-bottom: 10;
+    background-color: rgba(255,255,255,0.80);
+    border-radius: 12;
+    justify-content: center;
+    align-items: center;
+  }
+  .title {
+    font-size: 20;
+    color: #000000;
+  }
+  .bannerPhotoWrap {
+    width: 449;
+    height: 305;
+    background-color: #FFFFFF;
+    border-radius: 12;
+    margin-top: 35;
+    padding: 12;
+    flex-direction: row;
+    justify-content: space-between;
+    flex-wrap:wrap;
+  }
+  .bannerPhoto {
+    width: 137;
+    height: 137;
+    margin-bottom: 6;
+  }
+  .stickyHeader {
+    position: sticky;
+    /*height: 94;
+    flex-direction: row;
+    padding-bottom:6;*/
+  }
+  .header2 {
+    position: sticky;
+    height: 94;
+    flex-direction: row;
+    padding-bottom:6;
+  }
+  .stickyWrapper {
+    flex-direction: row;
+    background-color:#00cc99;
+    justify-content: center;
+    align-items: center;
+    flex:1;
+  }
+  .stickyTextImageWrapper {
+    flex:1;
+    justify-content: center;
+    align-items: center;
+    flex-direction: row;
+  }
+  .stickyText {
+    color: #FFFFFF;
+    font-weight: bold;
+    font-size:32;
+    margin-right: 12;
+  }
+  .stickyImage {
+    width: 64;
+    height: 64;
+    border-radius: 32;
+  }
+
+  .cell {
+    padding-top: 6;
+    padding-bottom: 6;
+  }
+  .item {
+    background-color: #FFFFFF;
+    align-items: center;
+  }
+  .itemName {
+    font-size:28;
+    color:#333333;
+    line-height:42;
+    text-align:left;
+    margin-top: 24;
+  }
+  .itemPhoto {
+    margin-top: 18;
+    width: 220;
+    height: 220;
+    margin-bottom: 18;
+  }
+  .itemDesc {
+    font-size:24;
+    margin:12;
+    color:#999999;
+    line-height:36;
+    text-align:left;
+  }
+  .itemClickBehaviour {
+    font-size:36;
+    color:#00cc99;
+    line-height:36;
+    text-align:center;
+    margin-top: 6;
+    margin-left: 24;
+    margin-right: 24;
+    margin-bottom: 30;
+  }
+  .footer {
+    height: 94;
+    justify-content: center;
+    align-items: center;
+    background-color: #00cc99;
+  }
+
+  .fixedItem {
+    position: fixed;
+    width:78;
+    height:78;
+    background-color:#00cc99;
+    right: 32;
+    bottom: 32;
+    border-radius: 39;
+    align-items: center;
+    justify-content: center;
+  }
+  .fixedText {
+    font-size: 32;
+    color: white;
+    line-height: 32;
+  }
+
+</style>
+
+<script>
+  export default {
+    data: function() {
+      const items = [
+        {
+          src:'https://gw.alicdn.com/tps/TB1Jl1CPFXXXXcJXXXXXXXXXXXX-370-370.jpg',
+          name: 'Thomas Carlyle',
+          desc:'Genius only means hard-working all one\'s life',
+          behaviourName: 'Change width',
+          behaviour: 'changeColumnWidth'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1Hv1JPFXXXXa3XXXXXXXXXXXX-370-370.jpg',
+          desc:'The man who has made up his mind to win will never say "impossible "',
+          behaviourName: 'Change gap',
+          behaviour: 'changeColumnGap'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1eNKuPFXXXXc_XpXXXXXXXXXX-370-370.jpg',
+          desc:'There is no such thing as a great talent without great will - power',
+          behaviourName: 'Change count',
+          behaviour: 'changeColumnCount'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1DCh8PFXXXXX7aXXXXXXXXXXX-370-370.jpg',
+          name:'Addison',
+          desc:'Cease to struggle and you cease to live',
+          behaviourName: 'Show scrollbar',
+          behaviour: 'showScrollbar'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1ACygPFXXXXXwXVXXXXXXXXXX-370-370.jpg',
+          desc:'A strong man will struggle with the storms of fate',
+          behaviourName: 'Listen appear',
+          behaviour: 'listenAppear'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1IGShPFXXXXaqXVXXXXXXXXXX-370-370.jpg',
+          name:'Ruskin',
+          desc:'Living without an aim is like sailing without a compass',
+          behaviourName: 'Set scrollable',
+          behaviour: 'setScrollable',
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1xU93PFXXXXXHaXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'waterfall padding',
+          behaviour: 'setPadding'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB19hu0PFXXXXaXaXXXXXXXXXXX-240-240.jpg',
+          name:'Balzac',
+          desc:'There is no such thing as a great talent without great will - power',
+          behaviourName: 'listen scroll',
+          behaviour: 'listenScroll'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1ux2vPFXXXXbkXXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'Remove cell',
+          behaviour: 'removeCell'
+        },
+        {
+          src:'https://gw.alicdn.com/tps/TB1tCCWPFXXXXa7aXXXXXXXXXXX-240-240.jpg',
+          behaviourName: 'Move cell',
+          behaviour: 'moveCell'
+       
+        }
+      ]
+
+      let repeatItems = [];
+      for (let i = 0; i < 3; i++) {
+        repeatItems.push(...items)
+      }
+
+      return {
+        padding: 0,
+        refreshing: false,
+        refreshText: '↓   pull to refresh...',
+        columnCount: 2,
+        columnGap: 12,
+        columnWidth: 'auto',
+        contentOffset: '0',
+        showHeader: true,
+        showScrollbar: false,
+        scrollable: true,
+        showStickyHeader: false,
+        appearImage: null,
+        disappearImage: null,
+        stickyHeaderType: 'none',
+        // fixedRect:'',
+        banner: {
+          photos: [
+            {src:'https://gw.alicdn.com/tps/TB1JyaCPFXXXXc9XXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1MwSFPFXXXXbdXXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1U8avPFXXXXaDXpXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB17Xh8PFXXXXbkaXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1cTmLPFXXXXXRXXXXXXXXXXXX-140-140.jpg'},
+            {src:'https://gw.alicdn.com/tps/TB1oCefPFXXXXbVXVXXXXXXXXXX-140-140.jpg'}
+          ]
+        },
+        items: repeatItems
+      }
+    },
+
+    created() {
+      // let self = this
+      // setTimeout(()=>{
+      //   weex.requireModule('dom').getComponentRect(this.$refs.fixed, result=>{
+      //     const x = result.size.left
+      //     const y = result.size.top
+      //     const width = result.size.width
+      //     const height = result.size.height
+      //     self.fixedRect = `${x}|${y}|${width}|${height}`
+      //   })
+      // }, 3000)
+    },
+
+    methods: {
+      recylerScroll: function(e) {
+        this.contentOffset = e.contentOffset.y
+      },
+      loadmore: function(e) {
+        console.log('receive loadmore event')
+        // this.$refs.waterfall.resetLoadmore()
+      },
+      showOrRemoveHeader: function() {
+        this.showHeader = !this.showHeader
+      },
+      onItemclick: function (behaviour, index) {
+        console.log(`click...${behaviour} at index ${index}`)
+        switch (behaviour) {
+          case 'changeColumnCount':
+            this.changeColumnCount()
+            break
+          case 'changeColumnGap':
+            this.changeColumnGap()
+            break
+          case 'changeColumnWidth':
+            this.changeColumnWidth()
+            break
+          case 'showScrollbar':
+            this.showOrHideScrollbar()
+            break
+          case 'listenAppear':
+            this.listenAppearAndDisappear()
+            break
+          case 'setScrollable':
+            this.setScrollable()
+            break
+          case 'setPadding':
+            this.setRecyclerPadding()
+            break
+          case 'listenScroll':
+            this.listenScrollEvent()
+            break
+          case 'removeCell':
+            this.removeCell(index)
+            break
+          case 'moveCell':
+            this.moveCell(index)
+            break
+        }
+      },
+
+      itemAppear: function(src) {
+        this.appearImage = src;
+      },
+
+      itemDisappear: function(src) {
+        this.disappearImage = src;
+      },
+
+      changeColumnCount: function() {
+        if (this.columnCount === 2) {
+          this.columnCount = 3
+        } else {
+          this.columnCount = 2
+        }
+      },
+
+      changeColumnGap: function() {
+        if (this.columnGap === 12) {
+          this.columnGap = 'normal'
+        } else {
+          this.columnGap = 12
+        }
+      },
+
+      changeColumnWidth: function() {
+        if (this.columnWidth === 'auto') {
+          this.columnWidth = 600
+        } else {
+          this.columnWidth = 'auto'
+        }
+      },
+
+      showOrHideScrollbar: function() {
+        this.showScrollbar = !this.showScrollbar
+      },
+
+      setScrollable: function() {
+        this.scrollable = !this.scrollable
+      },
+
+      listenAppearAndDisappear: function() {
+        this.stickyHeaderType = (this.stickyHeaderType === 'appear' ? 'none' : 'appear')
+      },
+
+      listenScrollEvent: function() {
+        this.stickyHeaderType = (this.stickyHeaderType === 'scroll' ? 'none' : 'scroll')
+      },
+
+      scrollToNext: function() {
+        weex.requireModule('dom').scrollToElement(this.$refs.footer,{})
+      },
+
+      setRecyclerPadding: function() {
+        this.padding = (this.padding == 0 ? 12 : 0);
+      },
+
+      removeCell: function(index) {
+        this.items.splice(index, 1)
+      },
+
+      moveCell: function(index) {
+        if (index == 0) {
+          this.items.splice(this.items.length - 1, 0, this.items.splice(index, 1)[0]);
+        } else {
+          this.items.splice(0, 0, this.items.splice(index, 1)[0]);
+        }
+      },
+
+      onrefresh (event) {
+        this.refreshing = true
+        this.refreshText = "loading..."
+        setTimeout(() => {
+          this.refreshing = false
+          this.refreshText = '↓   pull to refresh...'
+        }, 2000)
+      },
+
+      onpullingdown (event) {
+        // console.log(`${event.pullingDistance}`)
+        if (event.pullingDistance < -64) {
+          this.refreshText = '↑   release to refresh...'
+        } else {
+          this.refreshText = '↓   pull to refresh...'
+        }
+      }
+    }
+  }
+</script>
diff --git a/test/pages/components/scroller-fixed.vue b/test/pages/components/scroller-fixed.vue
new file mode 100644
index 0000000..50c7c82
--- /dev/null
+++ b/test/pages/components/scroller-fixed.vue
@@ -0,0 +1,64 @@
+<template>
+  <scroller ref="container" class="container" @scroll="onscroll">
+      <div><text>{{vp}}|{{p1}}|{{p2}}</text></div>
+    <div v-for="item in items" style="background-color:yellow;height:300"><text >row</text></div>
+    <div ref="panel" class="fixed-panel"></div>
+    <div ref="panel2" class="fixed-panel2"></div>
+  </scroller>
+</template>
+<style>
+  .container {
+    width: 750;
+  }
+  .fixed-panel {
+    position: fixed;
+    bottom: 0;
+    left: 0;
+    height: 200;
+    background-color: #ff0000;
+    width: 200;
+  }
+  .fixed-panel2 {
+    position: fixed;
+    right: 0;
+    top: 0;
+    height: 200;
+    background-color: #ff0000;
+    width: 200;
+  }
+</style>
+<script>
+    const dom = weex.requireModule('dom')
+    module.exports = {
+        data:function(){
+            return {
+            items:[1,1,1,1,1,1,1,1],
+            height:100,
+            vp:-1,
+            p1:-1,
+            p2:-1
+            }
+        },
+        mounted:function(){
+            var self = this;
+            dom.getComponentRect(this.$refs.container,function(data){
+                self.vp = data.size.height;
+            })
+        },
+        methods:{
+            onscroll:function(e){
+                var self = this;
+                dom.getComponentRect(this.$refs.container,function(data){
+                    self.vp = Math.round(data.size.height);
+                });
+                dom.getComponentRect(this.$refs.panel,function(data){
+                    self.p1 = Math.round(data.size.top+data.size.height);
+                });
+                dom.getComponentRect(this.$refs.panel2,function(data){
+                    self.p2 = data.size.top;
+                });
+                //should vp != 0 && p1 == vp && p2 ==0
+            }
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/test/pages/components/text-layout.vue b/test/pages/components/text-layout.vue
new file mode 100644
index 0000000..e73e64c
--- /dev/null
+++ b/test/pages/components/text-layout.vue
@@ -0,0 +1,30 @@
+<template>
+  <scroller class="wrapper">
+    <text test-id ="text-only">Hello World</text>
+    <text test-id ="lines" style="lines:2;line-height:32px;font-size:36px;color:#0000FF">永和九年,岁在癸丑,暮春之初,会于会稽山阴之兰亭。\n\t群贤毕至,少长咸集。此地有崇山峻领,茂林脩竹;又有清流激湍,暎带左右。引以为流觞曲水,列坐其次。\n\tLet us not seek to satisfy our thirst for freedom. \n\tAgain and again, we must rise to the majestic heights of meeting physical force with soul force.</text>
+    <text test-id ="font" style="lines:3;font-size:48px;color:#FF0000">其形也,翩若惊鸿,婉若游龙,荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞。迫而察之,灼若芙蕖出渌波。秾纤得衷,修短合度。肩若削成,腰如约素。延颈秀项,皓质呈露,芳泽无加,铅华弗御。云髻峨峨,修眉联娟,丹唇外朗,皓齿内鲜。明眸善睐,靥辅承权,瓌姿艳逸,仪静体闲。柔情绰态,媚于语言。奇服旷世,骨像应图。披罗衣之璀粲兮,珥瑶碧之华琚。戴金翠之首饰,缀明珠以耀躯。践远游之文履,曳雾绡之轻裾。微幽兰之芳蔼兮,步踟蹰于山隅。于是忽焉纵体,以遨以嬉。左倚采旄,右荫桂旗。攘皓腕于神浒兮,采湍濑之玄芝。</text>
+    <text test-id ="fixed-size" style="width:300px; height:100px;color:#FF00FF">壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下。清风徐来,水波不兴。举酒属客,诵明月之诗,歌窈窕之章。少焉,月出于东山之上,徘徊于斗牛之间。白露横江,水光接天。纵一苇之所如,凌万顷之茫然。浩浩乎如冯虚御风,而不知其所止;飘飘乎如遗世独立,羽化而登仙。</text>
+    <div style="flex-direction:row;width:500px;height:300px;background-color:red">
+      <text style="flex:1;line-height:36px;background-color:#AC34Ef" test-id="flexgrow-alignitems">Hello </text>
+    </div>
+
+    <div style="flex-direction:row;width:500px;height:300px;background-color:red;align-items:center">
+      <text style="flex:1;line-height:40px;background-color:#12CDEE" test-id="flexgrow">World</text>
+    </div>
+
+    <div style="width:500px;height:300px;background-color:red">
+      <text style="flex:1;line-height:36px;background-color:blue" test-id="flexgrow-alignitems-coloumn">Hello </text>
+    </div>
+
+    <div style="width:500px;height:300px;background-color:red;align-items:center">
+      <text style="flex:1;line-height:40px;background-color:blue" test-id="flexgrow-column">World</text>
+    </div>
+  </scroller>
+</template>
+
+<style>
+.wrapper{
+    width: 750px;
+    background-color: yellow;
+}
+</style>
\ No newline at end of file
diff --git a/test/pages/components/textarea-maxlength.vue b/test/pages/components/textarea-maxlength.vue
new file mode 100644
index 0000000..503a59f
--- /dev/null
+++ b/test/pages/components/textarea-maxlength.vue
@@ -0,0 +1,50 @@
+<template>
+  <scroller class="wrapper">
+    <text test-id="status" style="font-size:30">{{value}}</text>
+    <textarea test-id="textarea" id="textarea" class="textarea" value="" autofocus="true" maxlength=4 @input="oninput" @change="onchange" ></textarea>
+  </scroller>
+</template>
+<script>
+  const modal = weex.requireModule('modal')
+  export default {
+    data () {
+      return {
+        value:'1'
+      }
+    },
+    methods: {
+      oninput (event) {
+        this.value = event.value
+        console.log('oninput:', event.value)
+        modal.toast({
+          message: `oninput: ${event.value}`,
+          duration: 0.8
+        })
+      },
+      onchange (event) {
+        console.log('onchange:', event.value)
+        modal.toast({
+          message: `onchange: ${event.value}`,
+          duration: 0.8
+        })
+      },
+    }
+  }
+</script>
+<style>
+  .textarea {
+    font-size: 50px;
+    width: 650px;
+    margin-top: 50px;
+    margin-left: 50px;
+    padding-top: 20px;
+    padding-bottom: 20px;
+    padding-left: 20px;
+    padding-right: 20px;
+    color: #666666;
+    border-width: 2px;
+    border-style: solid;
+    border-color: #41B883;
+    maxlength:10;
+  }
+</style>
\ No newline at end of file
diff --git a/test/pages/css/border.vue b/test/pages/css/border.vue
new file mode 100644
index 0000000..5c433ad
--- /dev/null
+++ b/test/pages/css/border.vue
@@ -0,0 +1,283 @@
+<template>
+  <scroller>
+    <div class="container">
+        <text class="radius box solid"></text>
+        <text class="topleft box solid"></text>
+        <text class="topright box solid"></text>
+        <text class="bottomleft box solid"></text>
+        <text class="bottomright box solid"></text>
+        <text>solid</text>
+    </div>
+    <div class="container">
+        <text class="radius box dotted"></text>
+        <text class="topleft box dotted"></text>
+        <text class="topright box dotted"></text>
+        <text class="bottomleft box dotted"></text>
+        <text class="bottomright box dotted"></text>
+        <text class="box dotted dottedLarge"></text>
+        <text>dotted</text>
+    </div>
+    <div class="container">
+        <text class="radius box dashed"></text>
+        <text class="topleft box dashed"></text>
+        <text class="topright box dashed"></text>
+        <text class="bottomleft box dashed"></text>
+        <text class="bottomright box dashed"></text>
+        <text class="box dashed dashedLarge"></text>
+        <text>dashed</text>
+    </div>
+    <div class="container">
+        <text class="constrained1"></text>
+        <text class="constrained2"></text>
+        <text class="constrained1 dashed"></text>
+        <text class="constrained2 dashed" ></text>
+        <text class="constrained1 dotted" ></text>
+        <text class="constrained2 dotted" ></text>
+        <text>constrained</text>
+    </div>
+    <div class="container">
+        <text class="box radius differentWidth1"></text>
+        <text class="box radius differentWidth2"></text>
+        <text class="box radius differentWidth3"></text>
+        <text class="box radius differentWidth4" ></text>
+        <text class="box radius differentWidth5" ></text>
+        <text>different width</text>
+    </div>
+     <div class="container">
+        <text class="box borderClipping1"></text>
+        <text class="box borderClipping2"></text>
+        <text class="box borderClipping3"></text>
+        <text>border clipping</text>
+    </div>
+    <div class="container">
+        <text class="boxShadow1"></text>
+        <text class="boxShadow2"></text>
+        <text test-id="test-text">box shadow</text>
+    </div>
+    <div class="container">
+        <text class="circle transparent1"></text>
+        <text class="circle transparent2"></text>
+        <text class="circle transparent3"></text>
+        <text class="circle transparent4"></text>
+        <text>transparent</text>
+    </div>
+    <div class="container">
+        <image class="box topleft" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="box topright" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="box bottomleft" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="box bottomright" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="box" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <image class="circle" src="https://gw.alicdn.com/tps/TB1EP9bPFXXXXbpXVXXXXXXXXXX-150-110.jpg"></image>
+        <text>image</text>
+    </div>
+  </scroller>
+</template>
+
+<style>
+.container {
+  flex-direction: row;
+}
+.box {
+  width: 100px;
+  height: 100px;
+  margin: 2px;
+  background-color: #ccc;
+  border-width: 6px;
+  border-color: #f00;
+}
+/* the different border-radii styles defined in CSS3 */
+.radius {
+  border-radius: 20px;
+}
+.topleft {
+  border-top-left-radius: 20px; 
+}
+.topright {
+  border-top-right-radius: 20px; 
+}
+.bottomright {
+  border-bottom-right-radius: 20px; 
+}
+.bottomleft {
+  border-bottom-left-radius: 20px; 
+}
+.dottedLarge {
+  border-width: 21px;
+  border-radius: 40px;
+  border-left-color: rgba(0,0,255,1);
+  border-bottom-color: rgba(0,128,0,0.5);
+  border-right-color: rgba(0,128,0,0.5);
+}
+.dashedLarge {
+  border-top-width: 19px;
+  border-bottom-width: 19px;
+  border-left-width: 38px;
+  border-right-width: 38px;
+  border-top-left-radius: 50px;
+  border-top-right-radius: 50px;
+  border-bottom-left-radius: 25px;
+  border-bottom-right-radius: 25px;
+  border-left-color: rgba(0,0,255,1);
+}
+
+/* the different border styles defined in CSS3 */
+.dotted { 
+  border-style: dotted;
+}
+.dashed {
+  border-style: dashed;
+}
+.solid {
+  border-style: solid;
+}
+
+.constrained1 {
+  width: 100px;
+  height: 40px;
+  border-width: 10px ;
+  border-color: #f00;
+  border-top-left-radius: 15px;
+  border-top-right-radius: 40px;
+  border-bottom-left-radius: 40px;
+  border-bottom-right-radius: 15px;
+}
+    
+.constrained2 {
+  width: 40px;
+  height: 100px;
+  margin-left: 10px;
+  border-width: 10px ;
+  border-color: #f00;
+  border-top-left-radius: 15px;
+  border-top-right-radius: 40px;
+  border-bottom-left-radius: 40px;
+  border-bottom-right-radius: 15px;
+}
+
+.differentWidth1
+{
+  border-top-width: 10px;
+  border-right-width: 15px;
+  border-bottom-width: 20px;
+  border-left-width: 30px;
+}
+.differentWidth2
+{
+  border-top-width: 10px;
+  border-right-width: 25px;
+  border-bottom-width: 40px;
+  border-left-width: 25px;
+}
+.differentWidth3
+{
+  border-top-width: 10px;
+  border-right-width: 25px;
+  border-bottom-width: 10px;
+  border-left-width: 25px;
+}
+.differentWidth4
+{
+  border-top-width: 16px;
+  border-right-width: 4px;
+  border-bottom-width: 110px;
+  border-left-width: 32px;
+}
+.differentWidth5
+{
+  border-right-width: 50px;
+}
+
+.borderClipping1 {
+  border-radius: 30px;
+  border-top-color: red;
+  border-top-width: 10px;
+  border-left-color: blue;
+  border-left-width: 10px;
+  border-right-color: green;
+  border-right-width: 30px;
+  border-bottom-color: yellow;
+  border-bottom-width: 30px;
+}
+.borderClipping2 {
+  border: solid rgba(255,0,0,1);
+  border-top-width: 20px;
+  border-bottom-width: 20px;
+  border-left-width: 40px;
+  border-right-width: 40px;
+  border-top-left-radius: 50px;
+  border-top-right-radius: 50px;
+  border-bottom-left-radius: 25px;
+  border-bottom-right-radius: 25px;
+  border-left-color: rgba(0,0,255,1);
+  border-bottom-color: rgba(0,128,0,0.5);
+  border-right-color: rgba(0,128,0,0.5);
+}   
+.borderClipping3 {
+  border-width:10px;
+  border-radius: 50px;
+  border-top-right-radius: 0px;
+  border-bottom-left-radius: 0px;
+  border-left-color: rgba(0,0,255,1);
+  background-color: green;
+  border-top-width: 5px;
+  border-bottom-width: 5px;
+  border-left-width: 18px;
+  border-right-width: 0px;
+}
+
+.boxShadow1 {
+  width: 100px;
+  height: 45px;
+  background-color: #000000;
+  border-top-left-radius: 30px;
+  border-top-right-radius: 30px;
+  box-shadow: 0px 0px 1px 1px #000000;
+  margin-top: 20px;
+}
+.boxShadow2 {
+  width: 100px;
+  height: 45px;
+  background-color: #000000;
+  box-shadow: 30px 15px 0px -10px lime;
+  border-bottom-right-radius: 50px;
+  margin:30px;
+}
+
+.circle {
+  width: 100px;
+  height: 100px;
+  border-width: 33px;
+  border-color: rgba(255, 0, 0, 0.5);
+  border-style: solid;
+  border-radius:50px;
+}
+.transparent1 {
+  border-right-color: transparent;
+}
+.transparent2 {
+  border-right-color: transparent; 
+  border-right-width: 33px;
+}
+.transparent3 {
+  border-right-color: transparent; 
+  border-right-width: 0;
+  border-bottom-color: transparent;
+  border-bottom-width: 0;
+}
+.transparent4 {
+  border-right-color: transparent; 
+  border-right-width: 0;
+  border-bottom-color: transparent;
+}
+</style>
+
+<script>
+  module.exports = {
+    data : function(){
+      return {
+      }
+    },
+    methods : {
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/test/pages/dom-operation.vue b/test/pages/dom-operation.vue
new file mode 100644
index 0000000..334803d
--- /dev/null
+++ b/test/pages/dom-operation.vue
@@ -0,0 +1,33 @@
+<template>
+    <scroller>
+            <text v-if="display" test-id="maynotexist">item</text>
+            <div v-for="item in repeat_items">
+                <text :test-id="'item'+item">repeat item:{{item}}</text>
+            </div>
+        <text test-id="btn1" @click="onclick">display</text>
+        <text test-id="status" @click="onclick2">display</text>
+        <text test-id="status2" @click="onclick3">{{text}}</text>
+    </scroller>
+</template>
+<script>
+    module.exports = {
+        data:function(){
+            return {
+            display:false,
+            repeat_items:[1,2,3,4,5],
+            text:"display"
+            }
+        },
+        methods:{
+          onclick:function(){
+            this.display=true;
+            this.repeat_items.push(6);
+          },
+          onclick2:function(){
+            this.display = false;
+            this.repeat_items.pop();
+            this.text = "finished"
+          }
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/test/pages/dom-operation.we b/test/pages/dom-operation.we
deleted file mode 100644
index 5a7a18c..0000000
--- a/test/pages/dom-operation.we
+++ /dev/null
@@ -1,32 +0,0 @@
-<template>
-    <div>
-        <div style="height:100;background-color:blue">
-            <text if="display">item</text>
-        </div>
-        <div>
-            <div repeat="repeat_items">
-                <text>repeat</text>
-            </div>
-        </div>
-        <text onclick="onclick">display</text>
-        <text onclick="onclick2">display</text>
-    </div>
-</template>
-<script>
-    module.exports = {
-        data:{
-            display:false,
-            repeat_items:[1,2,3,4,5]
-        },
-        methods:{
-          onclick:function(){
-            this.display=true;
-            this.repeat_items.push(6);
-          },
-          onclick2:function(){
-            this.display = false;
-            this.repeat_items.pop();
-          }
-        }
-    }
-</script>
\ No newline at end of file
diff --git a/test/pages/image-onload.vue b/test/pages/image-onload.vue
new file mode 100644
index 0000000..0c0b309
--- /dev/null
+++ b/test/pages/image-onload.vue
@@ -0,0 +1,21 @@
+<template>
+  <scroller>
+    <image style="width: 500;height: 500;" src="https://gw.alicdn.com/tps/TB1bEMYKXXXXXaLaXXXXXXXXXXX-360-388.png" @load="onload"></image>
+    <text test-id='imgSize' style="font-size:30">{{size}}</text>
+  </scroller>
+</template>
+<script>
+  module.exports = {
+    data : function(){
+      return {
+      size:"-1,-1"
+      }
+    },
+    methods : {
+      onload : function(e) {
+        nativeLog(JSON.stringify(e))
+        this.size = e.size.naturalWidth + ',' + e.size.naturalHeight;
+      }
+    }
+  }
+</script>
\ No newline at end of file
diff --git a/test/pages/index.vue b/test/pages/index.vue
new file mode 100644
index 0000000..2ede5f5
--- /dev/null
+++ b/test/pages/index.vue
@@ -0,0 +1,30 @@
+<template>
+    <scroller>
+        <text test-id="title">hello world.</text>
+        <input ref="input" test-id="input" value="input" @blur="onblur"></input>
+        <text style="color:red" test-id="status">{{status}}</text>
+        <text @click="onclick" test-id="button">button</text>
+        <text @click="toggleblur" test-id="button2">blur input</text>
+    </scroller>
+</template>
+<script>
+    export default {
+        data:function(){
+            return {
+                status:"___"
+            }
+        },
+        methods:{
+            onclick:function(e){
+                this.status = "btn click."
+            },
+            toggleblur:function(e){
+                this.$refs.input.blur();
+                // this.$el("input").blur();
+            },
+            onblur:function(e){
+                this.status = "input blur."
+            }
+        }
+    }
+</script>
diff --git a/test/pages/index.we b/test/pages/index.we
deleted file mode 100644
index 395ebc5..0000000
--- a/test/pages/index.we
+++ /dev/null
@@ -1,27 +0,0 @@
-<template>
-    <div>
-        <text>hello world.</text>
-        <input id="input" value="input" onblur="onblur"></input>
-        <text style="color:red">{{status}}</text>
-        <text onclick="onclick">button</text>
-        <text onclick="toggleblur">blur input</text>
-    </div>
-</template>
-<script>
-    module.exports = {
-        data:{
-            status:"___"
-        },
-        methods:{
-            onclick:function(e){
-                this.status = "btn click."
-            },
-            toggleblur:function(e){
-                this.$el("input").blur();
-            },
-            onblur:function(e){
-                this.status = "input blur."
-            }
-        }
-    }
-</script>
diff --git a/test/pages/list-scroll.vue b/test/pages/list-scroll.vue
new file mode 100644
index 0000000..0a264b7
--- /dev/null
+++ b/test/pages/list-scroll.vue
@@ -0,0 +1,33 @@
+<template>
+        <list style="background-color: beige; width: 750px; height: 900px" offset-accuracy="10" @scroll="onscroll">
+            <header><text test-id="status" ref="status" style="font-size: 40px;">{{status}}</text></header>
+            <cell v-for="(index, row) in rows" :key="index" style="padding: 10px;">
+                <text style="width: 750px; height: 150px; background-color: aqua">
+                    {{row.id}}
+                </text>
+            </cell>
+        </list>
+        
+</template>
+
+<script>
+    module.exports = {
+        data: function(){
+            return {
+                rows: [],
+                status: '-'
+            }
+        },
+        created: function () {
+                for (var i = 0; i < 20; i++) {
+                    this.rows.push({"id": "Cell " + i});
+                }
+            },
+        methods: {
+            
+            onscroll: function (e) {
+                this.status = e.contentOffset.y;
+            }
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/test/pages/list-scroll.we b/test/pages/list-scroll.we
deleted file mode 100644
index 07699e7..0000000
--- a/test/pages/list-scroll.we
+++ /dev/null
@@ -1,31 +0,0 @@
-<template>
-    <div>
-        <list style="background-color: beige; width: 750px; height: 900px" offset-accuracy="10" onscroll="onscroll">
-            <cell repeat="{{row in rows}}" style="padding: 10px;">
-                <text style="width: 750px; height: 150px; background-color: aqua">
-                    {{row.id}}
-                </text>
-            </cell>
-        </list>
-        <text id="status" style="font-size: 40px;">{{status}}</text>
-    </div>
-</template>
-
-<script>
-    module.exports = {
-        data: {
-            rows: [],
-            status: '-'
-        },
-        methods: {
-            ready: function () {
-                for (var i = 0; i < 20; i++) {
-                    this.rows.push({"id": "Cell " + i});
-                }
-            },
-            onscroll: function (e) {
-                this.status = e.contentOffset.y;
-            }
-        }
-    }
-</script>
\ No newline at end of file
diff --git a/test/pages/scroller-scroll.we b/test/pages/scroller-scroll.vue
similarity index 64%
rename from test/pages/scroller-scroll.we
rename to test/pages/scroller-scroll.vue
index ed960c2..81335a4 100644
--- a/test/pages/scroller-scroll.we
+++ b/test/pages/scroller-scroll.vue
@@ -1,28 +1,28 @@
 <template>
-    <div>
-        <scroller style="background-color: beige; width: 750px; height: 900px" offset-accuracy="10" onscroll="onscroll">
-            <div repeat="{{row in rows}}" style="padding: 10px;">
+        <scroller style="background-color: beige; width: 750px; height: 900px" offset-accuracy="10" @scroll="onscroll">
+            <text style="font-size: 40px;position:fixed;top:0;left:0;" test-id="status">{{status}}</text>
+            <div v-for="row in rows" style="padding: 10px;">
                 <text style="width: 750px; height: 150px; background-color: aqua">
                     {{row.id}}
                 </text>
             </div>
         </scroller>
-        <text style="font-size: 40px;">{{status}}</text>
-    </div>
 </template>
 
 <script>
-    module.exports = {
-        data: {
+    export default {
+        data: function(){
+            return {
             rows: [],
             status: '-'
+            }
         },
-        methods: {
-            ready: function () {
+        created: function () {
                 for (var i = 0; i < 20; i++) {
                     this.rows.push({"id": "Row " + i});
                 }
             },
+        methods: {
             onscroll: function (e) {
                 this.status = e.contentOffset.y;
             }
diff --git a/test/pages/slider-infinite.vue b/test/pages/slider-infinite.vue
new file mode 100644
index 0000000..726e376
--- /dev/null
+++ b/test/pages/slider-infinite.vue
@@ -0,0 +1,54 @@
+<template>
+    <scroller>
+        <text test-id="txt1">{{d1}}</text>
+        <slider auto-play="true" @change="change" style="width: 750px;height: 400px;background-color: blue" interval="500" infinite="false">
+            <div style="flex: 1;background-color: beige;align-items: center;" v-for="item in items">
+                <text style="font-size: 60px;">
+                    {{item}}
+                </text>
+            </div>
+            <indicator style="height: 20px"></indicator>
+        </slider>
+        
+        <text test-id="txt2" style="margin-top:60">{{d2}}</text>
+        <slider :auto-play="is_auto" @change="change2" style="width: 750px;height: 400px;background-color: blue;" interval="500">
+            <div style="flex: 1;background-color: beige;align-items: center;" v-for="item in items">
+                <text style="font-size: 60px;">
+                    {{item}}
+                </text>
+            </div>
+            <indicator style="height: 20px"></indicator>
+        </slider>
+    </scroller>
+</template>
+
+<script>
+    var itemCount = 2;
+    module.exports = {
+        data: function(){
+                return {
+                    d1:0,
+                    d2:0,
+                    items: [],
+                    is_auto: true
+                }
+        },
+        created: function () {
+                for (var index = 0; index < itemCount ; index++) {
+                    this.items[index] = 'Page: ' + index;
+                }
+                let self = this
+                setTimeout(function(){
+                    self.is_auto = false
+                },5000);
+        },
+        methods: {
+            change: function(e){
+              this.d1 = parseInt(this.d1) + 1;
+            },
+            change2: function(e) {
+              this.d2 = parseInt(this.d2) + 1;
+            }
+        }
+    }
+</script>
\ No newline at end of file
diff --git a/test/run.sh b/test/run.sh
index 6c0edd0..95fef20 100755
--- a/test/run.sh
+++ b/test/run.sh
@@ -1,4 +1,10 @@
 #!/bin/bash -eu
+set -e
+
+function startMacacaServer {
+    macaca server --verbose &
+    while ! nc -z 127.0.0.1 3456; do sleep 5; done
+}
 
 function buildAndroid {
     dir=$(pwd)
@@ -11,7 +17,8 @@
 }
 function runAndroid {
     buildAndroid
-    platform=android macaca run -d $1
+    startMacacaServer
+    platform=android ./node_modules/mocha/bin/mocha  $1 -f '@ignore-android' -i --recursive --bail
 }
 
 function buildiOS {
@@ -36,24 +43,34 @@
     echo 'Run in iOS...'
     echo $1
     buildiOS
-    sleep 1m
     echo 'killAll Simulator......'
     killAll Simulator || echo 'killall failed'
     # ps -ef
-    platform=ios macaca run -d $1
+    startMacacaServer
+    platform=ios ./node_modules/mocha/bin/mocha  $1 -f '@ignore-ios' -i --recursive --bail --verbose
+}
+
+function runWeb {
+    echo 'run web'
+    startMacacaServer
+    browser=chrome ./node_modules/mocha/bin/mocha  $1 -f '@ignore-web' -i --recursive --bail
+}
+
+function killserver {
+    ps -ef | grep 'macaca-cli-server' | grep -v grep | awk '{print $2}' | xargs kill || echo 'nothing to kill'
 }
 
 platform_android='android'
- platform=${1:-$platform_android}
+platform=${1:-$platform_android}
  
- #get test folder
- 
- #setup devices
- 
- #run tests
- if [ $platform = $platform_android ]; then
-     runAndroid ./test/scripts/
- else
-     runiOS ./test/scripts/
- fi
-
+killserver
+#run tests
+if [ $platform = $platform_android ]; then
+    runAndroid ./test/scripts/
+elif [ $platform = 'web' ]; 
+then
+    runWeb ./test/scripts/
+else
+    runiOS ./test/scripts/
+fi
+killserver
diff --git a/test/screenshot/border-ios.png b/test/screenshot/border-ios.png
new file mode 100644
index 0000000..667233d
--- /dev/null
+++ b/test/screenshot/border-ios.png
Binary files differ
diff --git a/test/screenshot/compositing-ios.png b/test/screenshot/compositing-ios.png
new file mode 100644
index 0000000..85669fa
--- /dev/null
+++ b/test/screenshot/compositing-ios.png
Binary files differ
diff --git a/test/scripts/attributes/compositing.test.js b/test/scripts/attributes/compositing.test.js
new file mode 100644
index 0000000..ce4c5e9
--- /dev/null
+++ b/test/scripts/attributes/compositing.test.js
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var util = require("../util.js");
+var assert = require('chai').assert
+
+describe('compositing test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  if (process.env.platform !== 'ios') {
+    return;
+  }
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/attributes/compositing.js'))
+      .waitForElementById('test-text',util.getGETActionWaitTimeMills() + 2000,1000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+
+  it('#1 compositing screenshot diff', () => {
+    return driver
+    .takeScreenshot()
+    .then(imgData => {
+      var newImg = new Buffer(imgData, 'base64');
+      var screenshotFolder = path.resolve(__dirname, '../../screenshot');
+      var oldImgPath = path.join(screenshotFolder, process.env.platform === 'android' ? 'compositing-android.png' : 'compositing-ios.png');
+      var diffImgPath = path.join(screenshotFolder, process.env.platform === 'android' ? 'compositing-android-diff.png' : 'compositing-ios-diff.png');
+      return util.diffImage(oldImgPath, newImg, 1, diffImgPath);
+    })
+    .then(result => {
+      console.log(result)
+      assert.isOk(result)
+    })
+  })
+});
+
+
diff --git a/test/scripts/components/image-onload.test.js b/test/scripts/components/image-onload.test.js
new file mode 100644
index 0000000..c3a7570
--- /dev/null
+++ b/test/scripts/components/image-onload.test.js
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('image onload @ignore-ios', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/image-onload.js'))
+      .waitForElementById('imgSize',util.getGETActionWaitTimeMills(),1000)
+  });
+
+  after(function () {
+      return util.quit(driver);
+  })
+
+
+  it('#1 download image', () => {
+    return driver
+    .sleep(5000)
+    .elementById('imgSize')
+    .text()
+    .then((text)=>{
+        if(text == '-1,-1') {
+            return;
+        }
+        assert.equal(text, '360,388')
+    })
+  })
+});
+
+
diff --git a/test/scripts/components/recycler.test.js b/test/scripts/components/recycler.test.js
new file mode 100644
index 0000000..3508363
--- /dev/null
+++ b/test/scripts/components/recycler.test.js
@@ -0,0 +1,405 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+const platform = process.env.platform.toLowerCase() || 'android';
+const isAndroid = platform === 'android';
+
+const isApproximate = (x, y) =>  {
+  return Math.abs(x - y) <= (isAndroid ? 2 : 1.5)
+}
+
+describe('recycler @ignore-android @ignore-ios', function () {
+  this.timeout(util.getTimeoutMills())
+  const driver = util.createDriver(wd)
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/recycler.js'))
+      .waitForElementById('waterfall',util.getGETActionWaitTimeMills(),1000)
+  });
+
+  after(function () {
+      return util.quit(driver); 
+  })
+
+  let scaleFactor = 0
+  let screenHeight = 0
+  let recyclerWidth = 0
+  let navBarHeight = 0
+  let cell1Height = 0
+  let cell2Height = 0
+  it('#1 test recyler layout', () => {
+    return driver
+    .getWindowSize()
+    .then(size=>{
+      scaleFactor = size.width / 750
+      screenHeight = size.height
+      recyclerWidth = 750 * scaleFactor
+      console.log(`screen size:${JSON.stringify(size)}`)
+      console.log(`scale factor:${scaleFactor}`)
+      console.log(`recyclerWidth:${recyclerWidth}`)
+      console.log(`screenHeight:${screenHeight}`)
+    })
+    .sleep(2000)
+    .elementById('waterfall')
+    .getRect()
+    .then((rect)=>{
+      console.log(`recycler rect:${JSON.stringify(rect)}`)
+      navBarHeight = rect.y
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+      assert.isOk(isApproximate(rect.height, screenHeight - navBarHeight))
+    })
+    .elementById('header1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`header 1 rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+      assert.isOk(isApproximate(rect.height, 377 * scaleFactor))
+    })
+    .elementById('header2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`header 2 rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 377 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+      assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
+    })
+    .elementById('cell0')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 1 rect:${JSON.stringify(rect)}`)
+      cell1Height = rect.height
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+    .elementById('cell1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 2 rect:${JSON.stringify(rect)}`)
+      cell2Height = rect.height
+      assert.isOk(isApproximate(rect.x, 381 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+    .elementById('cell2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 3 rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 381 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+    .elementById('cell3')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 4 rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+  })
+
+  it('#2 test column count', () => {
+    return driver
+    .elementById('cell2')
+    .click()
+    .elementById('cell0')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 1 rect after changing column count to 3:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
+    })
+    .elementById('cell1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 2 rect after changing column count to 3:${JSON.stringify(rect)}`)
+      cell2Height = rect.height
+      assert.isOk(isApproximate(rect.x, 254 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
+    })
+   .elementById('cell2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 3 rect after changing column count to 3:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 508 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
+    })
+   .elementById('cell3')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 4 rect after changing column count to 3:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 254 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
+      assert.isOk(isApproximate(rect.width, 242 * scaleFactor))
+    })
+    .elementById('cell2')
+    .click()
+  })
+
+  it('#3 test column gap', () => {
+    return driver
+    .elementById('cell1')
+    .click()
+    .elementById('cell0')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 1 rect after changing column gap to normal:${JSON.stringify(rect)}`)
+      cell1Height = rect.height
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
+    })
+     .elementById('cell1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 2 rect after changing column gap to normal:${JSON.stringify(rect)}`)
+      cell2Height = rect.height
+      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
+    })
+    .elementById('cell2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 3 rect after changing column gap to normal:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 391 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell2Height))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
+    })
+     .elementById('cell3')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 4 rect after changing column gap to normal:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
+      assert.isOk(isApproximate(rect.width, 359 * scaleFactor))
+    })
+    .elementById('cell1')
+    .click()
+  })
+
+  it('#4 test column width', () => {
+    return driver
+     .elementById('cell0')
+    .click()
+    .elementById('cell0')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 1 rect after changing column width to 600:${JSON.stringify(rect)}`)
+
+      cell1Height = rect.height
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+    })
+    .elementById('cell1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 2 rect after changing column width to 600:${JSON.stringify(rect)}`)
+      cell2Height = rect.height
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight + 471 * scaleFactor + cell1Height))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+    })
+    .elementById('cell0')
+    .click()
+  })
+
+  it('#5 test deleting header', () => {
+    return driver
+    .elementById('header2')
+    .click()
+     .elementById('header1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`header 2 rect after deleting header 1:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+    })
+   .elementById('header2')
+    .click()
+  })
+
+  it('#6 test footer', () => {
+    return driver
+   .elementById('fixed1')
+    .click()
+    .sleep(500)
+    .elementById('footer1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`footer rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, screenHeight - 94 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+      assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
+    })
+  })
+
+  it('#7 test sticky and fixed', () => {
+    return driver  
+   .elementById('fixed1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`fixed rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 640 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, screenHeight - 110 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 78 * scaleFactor))
+      assert.isOk(isApproximate(rect.height, 78 * scaleFactor))
+    })
+    .elementById('header2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`sticky header rect:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, navBarHeight))
+      assert.isOk(isApproximate(rect.width, recyclerWidth))
+      assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
+    })
+  })
+
+  it('#8 test removing cell', () => {
+    return driver
+    .elementById('cell28')
+    .click()
+    .elementById('cell27')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 28 rect after removing cell 29:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 0))
+      assert.isOk(isApproximate(rect.y, screenHeight - 94 * scaleFactor - rect.height))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+  })
+
+  it('#9 test moving cell', () => {
+    return driver
+    .elementById('cell29')
+    .click()
+    .elementById('fixed1')
+    .click()
+    .elementById('cell27')
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 28 rect after moving cell 30 to 1:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.y, screenHeight - 94 * scaleFactor - rect.height))
+      assert.isOk(isApproximate(rect.width, 369 * scaleFactor))
+    })
+  })
+
+  it('#10 test recycler padding', () => {
+    return driver
+    .elementById('cell26')
+    .click()
+    .elementById('fixed1')
+    .click()
+    .elementById('header2')
+    .getRect()
+    .then((rect)=>{
+      console.log(`sticking header rect after setting padding to 12:${JSON.stringify(rect)}`)
+  
+      assert.isOk(isApproximate(rect.x, 12 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, navBarHeight + (isAndroid ? 12 * scaleFactor : 0)))
+      assert.isOk(isApproximate(rect.width, recyclerWidth - 24 * scaleFactor))
+      assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
+    })
+    .elementById('footer1')
+    .getRect()
+    .then((rect)=>{
+      console.log(`footer rect after setting padding to 12:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 12 * scaleFactor))
+      assert.isOk(isApproximate(rect.y, screenHeight - 106 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, recyclerWidth - 24 * scaleFactor))
+      assert.isOk(isApproximate(rect.height, 94 * scaleFactor))
+    })
+    .elementById((isAndroid ? 'cell26' : 'cell27'))
+    .getRect()
+    .then((rect)=>{
+      console.log(`cell 27 rect after setting padding to 12:${JSON.stringify(rect)}`)
+      assert.isOk(isApproximate(rect.x, 12 * scaleFactor))
+      assert.isOk(isApproximate(rect.width, 357 * scaleFactor))
+    })
+  })
+
+  it('#11 test onscroll', () => {
+    let originContentOffset = 0
+    return driver
+    .elementById((isAndroid ? 'cell27' : 'cell28'))
+    .click()
+    .elementById('stickyText1')
+    .text() 
+    .then(text => {
+      console.log(text)
+      originContentOffset = Number.parseInt(text.replace('Content Offset:-',''))
+    })
+    .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
+    .sleep(1000)
+    .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
+    .elementById('stickyText1')
+    .text()
+    .then(text => {
+      console.log(text)
+      const contentOffset = Number.parseInt(text.replace('Content Offset:-',''))
+       assert.isOk(originContentOffset - contentOffset > screenHeight / scaleFactor)
+    })
+    .elementById('fixed1')
+    .click()
+  })
+
+  it('#12 test scrollable', () => {
+    let originContentOffset = 0
+    return driver
+    .elementById((isAndroid ? 'cell25' : 'cell26'))
+    .click()
+    .elementById('stickyText1')
+    .text()
+    .then(text => {
+      console.log(text)
+      originContentOffset = Number.parseInt(text.replace('Content Offset:-',''))
+    })
+    .touch('drag', {fromX:recyclerWidth / 2, fromY:screenHeight / 5, toX:recyclerWidth / 2, toY: screenHeight * 4 / 5})
+    .elementById('stickyText1')
+    .text()
+    .then(text => {
+      console.log(text)
+      const contentOffset = Number.parseInt(text.replace('Content Offset:-',''))
+      assert.equal(contentOffset, originContentOffset)
+    })
+  })
+});
+
+
diff --git a/test/scripts/components/scroll-event.test.js b/test/scripts/components/scroll-event.test.js
index 2ddb5db..1ad1cdb 100644
--- a/test/scripts/components/scroll-event.test.js
+++ b/test/scripts/components/scroll-event.test.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict';
 
 var _ = require('macaca-utils');
@@ -9,22 +27,16 @@
 
 describe('list scroll event', function () {
   this.timeout(util.getTimeoutMills());
-  var driver = wd(util.getConfig()).initPromiseChain();
-  driver.configureHttp({
-    timeout: 100000
-  });
+  var driver = util.createDriver(wd);
 
   before(function () {
-    return driver
-      .initDriver()
-      .get('wxpage://' + util.getDeviceHost() +'/list-scroll.js')
-      .waitForElementByXPath('//div/text[1]',util.getGETActionWaitTimeMills(),1000)
+    return util.init(driver)
+      .get(util.getPage('/list-scroll.js'))
+      .waitForElementById('status',util.getGETActionWaitTimeMills(),1000)
   });
 
   after(function () {
-      return driver
-      .sleep(1000)
-      .quit()
+      return util.quit(driver);
   })
 
 
@@ -46,7 +58,7 @@
       duration: 0.5
     })
     .sleep(2000)
-    .elementByXPath('//div/text')
+    .elementById('status')
     .text()
     .then((text)=>{
       var y = Math.abs(parseInt(text))
@@ -57,22 +69,16 @@
 
 describe('scroller scroll event', function () {
   this.timeout(util.getTimeoutMills());
-  var driver = wd(util.getConfig()).initPromiseChain();
-  driver.configureHttp({
-    timeout: 100000
-  });
+  var driver = util.createDriver(wd);
 
   before(function () {
-    return driver
-      .initDriver()
-      .get('wxpage://' + util.getDeviceHost() +'/scroller-scroll.js')
-      .waitForElementByXPath('//div/text[1]',util.getGETActionWaitTimeMills(),1000)
+    return util.init(driver)
+      .get(util.getPage('/scroller-scroll.js'))
+      .waitForElementById('status',util.getGETActionWaitTimeMills(),1000)
   });
 
   after(function () {
-      return driver
-      .sleep(1000)
-      .quit()
+      return util.quit(driver)
   })
 
 
@@ -82,11 +88,13 @@
     .sleep(2000)
     .touch('drag', {fromX:200, fromY:500, toX:100, toY:200})
     .sleep(2000)
-    .elementByXPath('//div/text')
+    .elementById('status')
     .text()
     .then((text)=>{
       var y = Math.abs(parseInt(text))
       assert.equal(y > 200,true)
     })
   })
-});
\ No newline at end of file
+});
+
+
diff --git a/test/scripts/components/scroller-fixed.test.js b/test/scripts/components/scroller-fixed.test.js
new file mode 100644
index 0000000..7add2a5
--- /dev/null
+++ b/test/scripts/components/scroller-fixed.test.js
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('scroller fixed position item ', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/scroller-fixed.js'))
+      .waitForElementByXPath('//scroller[1]/div[1]',util.getGETActionWaitTimeMills(),1000)
+  });
+
+  after(function () {
+      return util.quit(driver)
+  })
+
+
+  it('#1 position:fixed items', () => {
+    return driver
+    .touch('drag', {fromX:200, fromY:500, toX:200, toY: 400})
+    .sleep(2000)
+    .touch('drag', {fromX:200, fromY:400, toX:200, toY: 500})
+    .sleep(2000)
+    .elementByXPath('//scroller[1]/div[1]/text[1]')
+    .text()
+    .then((text)=>{
+        var parts = text.split("|");
+        assert.equal(parts[0],parts[1]);
+        assert.equal(parts[2],0);
+    })
+  })
+});
diff --git a/test/scripts/components/slider-infinite.test.js b/test/scripts/components/slider-infinite.test.js
new file mode 100644
index 0000000..b032d6e
--- /dev/null
+++ b/test/scripts/components/slider-infinite.test.js
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('slider infinite scroll', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/slider-infinite.js'))
+      .waitForElementById('txt1',util.getGETActionWaitTimeMills(),1000)
+  });
+
+  after(function () {
+      return util.quit(driver);
+  })
+
+
+  it('#1 waiting for auto play', () => {
+    return driver
+    .sleep(5000)
+    .elementById('txt1')
+    .text()
+    .then((text)=>{
+        assert.equal(text>=1, true);
+    })
+    .elementById('txt2')
+    .text()
+    .then((text)=>{
+        assert.equal(text>2, true);
+    })
+  })
+});
+
+
diff --git a/test/scripts/components/text.test.js b/test/scripts/components/text.test.js
new file mode 100644
index 0000000..0c867cf
--- /dev/null
+++ b/test/scripts/components/text.test.js
@@ -0,0 +1,131 @@
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('weex text @ignore-ios', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/text-layout.js'))
+      .waitForElementById("lines", util.getGETActionWaitTimeMills(), 1000)
+  });
+
+  after(function () {
+    // return util.quit(driver);
+  })
+
+
+  let scaleFactor = 0
+  let screenWidth = 0
+  it('#1 Window size', () => {
+    return driver
+      .getWindowSize()
+      .then(size => {
+        screenWidth = size.width
+        scaleFactor = screenWidth / 750
+      })
+  })
+
+  it('#2 Text Content', () => {
+    return driver
+      .elementById('text-only')
+      .text()
+      .then((text) => {
+        assert.equal(text, 'Hello World')
+      })
+  })
+
+  it('#3 Line Height', () => {
+    return driver
+      .elementById('lines')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, screenWidth)
+        assert.closeTo(rect.height, 32 * scaleFactor * 2, 2)
+        scroll(rect.height)
+      })
+  })
+
+  it('#4 Font Size', () => {
+    return driver
+      .elementById('font')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, screenWidth)
+        assert.isAtLeast(rect.height, Math.floor(2 * 48 * scaleFactor))
+        scroll(rect.height)
+      })
+  })
+
+  it('#5 Fixed-Size', () => {
+    return driver
+      .elementById('fixed-size')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, Math.floor(300 * scaleFactor))
+        assert.equal(rect.height, Math.floor(100 * scaleFactor))
+        scroll(rect.height)
+      })
+  })
+
+  it('#6 flex:1; align-Items: stretch; flex-direction:row', () => {
+    return driver
+      .elementById('flexgrow-alignitems')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, Math.floor(500 * scaleFactor))
+        assert.equal(rect.height, Math.floor(300 * scaleFactor))
+        scroll(rect.height)
+      })
+  })
+
+  it('#7 flex:1; align-Items: center; flex-direction:row', () => {
+    return driver
+      .elementById('flexgrow')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, Math.floor(500 * scaleFactor))
+        assert.closeTo(rect.height, 40 * scaleFactor, 1)
+        scroll(rect.height)
+      })
+  })
+
+  it('#8 flex:1; align-Items: stretch; flex-direction:column', () => {
+    return driver
+      .elementById('flexgrow-alignitems-coloumn')
+      .getRect()
+      .then(rect => {
+        assert.equal(rect.width, Math.floor(500 * scaleFactor))
+        assert.closeTo(rect.height, 300 * scaleFactor, 1)
+        scroll(rect.height)
+      })
+  })
+
+  it('#9 flex:1; align-Items: auto; flex-direction:column', () => {
+    return driver
+      .elementById('flexgrow-column')
+      .getRect()
+      .then(rect => {
+        assert.isBelow(rect.width, 500 * scaleFactor / 2)
+        assert.closeTo(rect.height, 300 * scaleFactor, 1)
+        scroll(rect.height)
+      })
+  })
+
+  function scroll(height) {
+    driver.touch('drag', {
+      fromX: 100,
+      fromY: 300 + height,
+      toX: 100,
+      toY: 300,
+      duration: 0.5
+    })
+  }
+});
\ No newline at end of file
diff --git a/test/scripts/components/textarea-maxlength.test.js b/test/scripts/components/textarea-maxlength.test.js
new file mode 100644
index 0000000..d72329d
--- /dev/null
+++ b/test/scripts/components/textarea-maxlength.test.js
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var _ = require('macaca-utils');
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var os = require('os');
+var util = require("../util.js");
+
+describe('textarea maxlength vue test2 ', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/components/textarea-maxlength.js'))
+      .waitForElementById('textarea',util.getGETActionWaitTimeMills(),1000)
+  });
+
+  after(function () {
+      return util.quit(driver)
+  })
+
+  it('#1 textarea maxlenght', () => {
+    return driver
+      .elementById('textarea')
+      .sendKeys('12345678')
+      .sleep(2000)
+      .elementById('status')
+      .text()
+      .then((text)=>{
+      assert.equal(text,'1234')
+     })
+  })
+
+});
diff --git a/test/scripts/css/border.test.js b/test/scripts/css/border.test.js
new file mode 100644
index 0000000..c1dcee4
--- /dev/null
+++ b/test/scripts/css/border.test.js
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+'use strict';
+
+var assert = require('chai').assert
+var wd = require('weex-wd')
+var path = require('path');
+var util = require("../util.js");
+var assert = require('chai').assert
+
+describe('border test', function () {
+  this.timeout(util.getTimeoutMills());
+  var driver = util.createDriver(wd);
+
+  if (process.env.platform !== 'ios') {
+    return;
+  }
+
+  before(function () {
+    return util.init(driver)
+      .get(util.getPage('/css/border.js'))
+      .waitForElementById('test-text',util.getGETActionWaitTimeMills() + 2000,1000)
+  });
+
+  after(function () {
+    return util.quit(driver);
+  })
+
+
+  it('#1 border screenshot diff', () => {
+    return driver
+    .takeScreenshot()
+    .then(imgData => {
+      var newImg = new Buffer(imgData, 'base64');
+      var screenshotFolder = path.resolve(__dirname, '../../screenshot');
+      var oldImgPath = path.join(screenshotFolder, process.env.platform === 'android' ? 'border-android.png' : 'border-ios.png');
+      var diffImgPath = path.join(screenshotFolder, process.env.platform === 'android' ? 'border-android-diff.png' : 'border-ios-diff.png');
+      return util.diffImage(oldImgPath, newImg, 1, diffImgPath);
+    })
+    .then(result => {
+      console.log(result)
+      assert.isOk(result)
+    })
+  })
+});
+
+
diff --git a/test/scripts/dom.test.js b/test/scripts/dom.test.js
index c275dd2..cebebc3 100644
--- a/test/scripts/dom.test.js
+++ b/test/scripts/dom.test.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict';
 
 var _ = require('macaca-utils');
@@ -9,31 +27,25 @@
 
 describe('weex mobile index', function () {
   this.timeout(util.getTimeoutMills());
-  var driver = wd(util.getConfig()).initPromiseChain();
-  driver.configureHttp({
-    timeout: 100000
-  });
+  var driver = util.createDriver(wd);
 
   before(function () {
-    return driver
-      .initDriver()
-      .get('wxpage://' + util.getDeviceHost() +'/dom-operation.js')
-      .waitForElementByXPath('//div/text[2]',util.getGETActionWaitTimeMills(),1000);
+    return util.init(driver)
+      .get(util.getPage('/dom-operation.js'))
+      .waitForElementById('status',util.getGETActionWaitTimeMills(),1000);
   });
 
   after(function () {
-      return driver
-      .sleep(1000)
-      .quit()
+      return util.quit(driver)
   })
 
   it('#1 Repeat', ()=>{
     return driver
-    .elementsByXPath("//div/div[2]/div")
-    .then((elems)=>{
-        assert.equal(elems.length,5)
+    .elementById("item5")
+    .then((elem)=>{
+        assert.notEqual(elem ,undefined)
     })
-    .elementByXPath("//div/div[1]/text")
+    .elementById("maynotexist")
     .then((noexist)=>{
         assert.equal(noexist,undefined)
     })
@@ -41,33 +53,42 @@
 
   it('#2 Add new item', ()=>{
     return driver
-    .elementByXPath("//div/text[1]")
+    .elementById("btn1")
     .click()
-    .sleep(1000)
-    .elementsByXPath("//div/div[2]/div")
-    .then((elems)=>{
-        assert.equal(elems.length,6)
+    .sleep(2000)
+    .elementById("item6")
+    .then((elem)=>{
+        assert.notEqual(elem ,undefined)
     })
-    .elementByXPath("//div/div[1]/text")
+    .elementById("maynotexist")
     .then((existed)=>{
         assert.notEqual(existed,undefined)
     })
   })
 
-  it('#2 Remove item', ()=>{
+  it('#3 Remove item', ()=>{
     return driver
-    .elementByXPath("//div/text[2]")
+    .elementById("status")
     .click()
-    .sleep(1000)
-    .elementsByXPath("//div/div[2]/div")
-    .then((elems)=>{
-        assert.equal(elems.length,5)
+    .sleep(2000)
+    .elementById("item6")
+    .then((elem)=>{
+        assert.equal(elem,undefined)
     })
-    .elementByXPath("//div/div[1]/text")
+    .elementById("maynotexist")
     .then((noexist)=>{
         assert.equal(noexist,undefined)
     })
   })
 
+  it('#4 Update DOM attr', ()=>{
+      return driver
+      .elementById("status2")
+      .text()
+      .then((text)=>{
+          assert.equal("finished",text);
+      })
+  })
+
   
 });
diff --git a/test/scripts/index.test.js b/test/scripts/index.test.js
index 7e62f28..8f9bddf 100644
--- a/test/scripts/index.test.js
+++ b/test/scripts/index.test.js
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict';
 
 var _ = require('macaca-utils');
@@ -9,28 +27,22 @@
 
 describe('weex mobile index', function () {
   this.timeout(util.getTimeoutMills());
-  var driver = wd(util.getConfig()).initPromiseChain();
-  driver.configureHttp({
-    timeout: 100000
-  });
+  var driver = util.createDriver(wd);
 
   before(function () {
-    return driver
-      .initDriver()
-      .get('wxpage://' + util.getDeviceHost() +'/index.js')
-      .waitForElementByXPath('//div/text[1]',util.getGETActionWaitTimeMills(),1000);
+    return util.init(driver)
+      .get(util.getPage('/index.js'))
+      .waitForElementById('title',util.getGETActionWaitTimeMills(),1000);
   });
 
   after(function () {
-      return driver
-      .sleep(1000)
-      .quit()
+      return util.quit(driver);
   })
 
 
   it('#1 Index', () => {
     return driver
-    .elementByXPath('//div/text[1]')
+    .elementById('title')
     .text()
     .then((text)=>{
       assert.equal(text,'hello world.')
@@ -39,9 +51,9 @@
 
   it('#2 Click Button', () => {
     return driver
-    .elementByXPath('//div/text[3]')
+    .elementById('button')
     .click()
-    .elementByXPath('//div/text[2]')
+    .elementById('status')
     .text()
     .then((text)=>{
       assert.equal(text,'btn click.')
@@ -50,11 +62,11 @@
 
   it('#3 Input Blur', () => {
     return driver
-    .elementByXPath('//div/input')
+    .elementById('input')
     .click()
-    .elementByXPath('//div/text[4]')
+    .elementById('button2')
     .click()
-    .elementByXPath('//div/text[2]')
+    .elementById('status')
     .text()
     .then((text)=>{
       assert.equal(text,'input blur.')
diff --git a/test/scripts/util.js b/test/scripts/util.js
index a1b60f1..81dc100 100644
--- a/test/scripts/util.js
+++ b/test/scripts/util.js
@@ -1,16 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 'use strict'
 
 var path = require('path');
 var os = require('os')
+var fs = require('fs')
+const BlinkDiff = require('blink-diff');
 
 var platform = process.env.platform || 'android';
 platform = platform.toLowerCase();
+var browser = process.env.browser || '';
 
 const isIOS = platform === 'ios';
 const isRunInCI = process.env.run_in_ci?true:false;
 
 var iOSOpts = {
   deviceName: 'iPhone 6',
+  target: 'ios',
   platformName: 'iOS',
   slowEnv: isRunInCI,
   app: path.join(__dirname, '..', '../ios/playground/build/Debug-iphonesimulator/WeexDemo.app')
@@ -18,10 +40,17 @@
 
 var androidOpts = {
   platformName: 'Android',
+  target: 'android',
   slowEnv: isRunInCI,
   app: path.join(__dirname, '..', `../android/playground/app/build/outputs/apk/playground.apk`)
 };
 
+var androidChromeOpts = {
+  platformName: 'Android',
+  target: 'web',
+  browserName: 'Chrome'
+};
+
 if(isRunInCI){
     console.log("Running in CI Envirment");
 }
@@ -40,18 +69,88 @@
     return addresses[0];
 }
 
+function diffImage(imageAPath, imageB, threshold, outputPath) {
+  if (!fs.existsSync(imageAPath)) {
+    fs.writeFileSync(imageAPath, imageB, 'base64', function(err) {
+        console.log(err);
+    });
+  }
+  
+  return new Promise((resolve, reject) => {
+    var diff = new BlinkDiff({
+      imageAPath: imageAPath, // Path
+      imageB: imageB,         // Buffer
+      thresholdType: BlinkDiff.THRESHOLD_PIXEL,
+      threshold: threshold,
+      imageOutputPath: outputPath,
+      cropImageA:{y : (isIOS ? 128 : 0)},
+      cropImageB:{y : (isIOS ? 128 : 0)}
+    });
+
+    diff.run((err, result) => {
+      if (err) {
+        return reject(err);
+      }
+      var ifPassed = diff.hasPassed(result.code);
+      console.log(ifPassed ? 'Image Comparison Passed' : 'Image Comparison Failed');
+      console.log(`Found ${result.differences} pixel differences between two images.`);
+      resolve(ifPassed);
+    });
+  });
+}
+
 
 module.exports = {
     getConfig:function(){
+        if(browser){
+            return androidChromeOpts;
+        }
         return isIOS? iOSOpts : androidOpts;
     },
     getDeviceHost:function(){
         return getIpAddress()+":12581";
     },
+    getPage:function(name){
+        let url
+        if(browser){
+             url = 'http://'+ getIpAddress()+':12581/vue.html?page=/test/build-web'+name
+        }else{
+            url = 'wxpage://' + getIpAddress()+":12581/test/build"+name;
+        }
+        console.log(url)
+        return url
+    },
     getTimeoutMills:function(){
         return ( isRunInCI ? 60 : 10 ) * 60 * 1000;
     },
     getGETActionWaitTimeMills:function(){
         return (isRunInCI ? 120 : 5 ) * 1000;
+    },
+    diffImage, 
+    createDriver:function(wd){
+        var driver = global._wxDriver;
+        if(!driver){
+            console.log('Create new driver');
+            driver = wd(this.getConfig()).initPromiseChain();
+            driver.configureHttp({
+                timeout: 100000
+            });
+            global._wxDriver = driver;
+        }
+        
+        return driver;
+    },
+    init:function(driver){
+        if(driver._isInit)
+            return driver.status()
+        else{
+            driver._isInit = true;
+            return driver.initDriver()
+        }
+    },
+    quit:function(driver){
+        if(browser)
+            return driver.quit()
+        return driver.sleep(1000).back().sleep(1000);
     }
 }
diff --git a/test/serve.sh b/test/serve.sh
index a34d998..1b3f18a 100755
--- a/test/serve.sh
+++ b/test/serve.sh
@@ -1,4 +1,4 @@
-# /bin/bash -eu
-
-npm run build:ui-test
+#!/bin/bash -eu
+npm run build:vue
+npm run build:ci &
 npm run serve:ui-test 
\ No newline at end of file
diff --git a/vue.html b/vue.html
index 06a1c18..cf2e264 100644
--- a/vue.html
+++ b/vue.html
@@ -3,21 +3,64 @@
 <head>
   <meta charset="utf-8">
   <title>Weex Vue Demo</title>
+
+  <!-- You should set 'weex-viewport' to your design pixel width, and the
+    viewport meta should be set like below, OTHERWISE it won't work.-->
+  <meta name="weex-viewport" content="750">
   <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
+
   <meta name="apple-mobile-web-app-capable" content="yes" />
   <meta name="apple-mobile-web-app-status-bar-style" content="black" />
   <meta name="apple-touch-fullscreen" content="yes" />
   <meta name="format-detection" content="telephone=no, email=no" />
 
-  <!-- <script src="./node_modules/vue/dist/vue.runtime.min.js"></script> -->
-  <script src="./node_modules/vue/dist/vue.runtime.js"></script>
+  <!-- About style below: html's height should set to 100%, and this
+    style should be added before the weex-vue-render script loaded.
+    OTHERWISE the 'weex.config.env.deviceHeight' will not work. -->
+  <style>
+    html, body {
+      -ms-overflow-style: scrollbar;
+      -webkit-tap-highlight-color: transparent;
+      padding: 0;
+      margin: 0;
+      width: 100%;
+      height: 100%;
+      background-color: green;
+      overflow-x: hidden;
+    }
+    #info {
+      position: fixed;
+      z-index: 999999;
+      top: 100px;
+      left: 0;
+      width: 100%;
+      height: 400px;
+      font-size: 24px;
+      color: green;
+      padding: 10px;
+      overflow-x: hidden;
+      overflow-y: scroll;
+      background-color: #eee;
+      opacity: 0.7;
+    }
+  </style>
+
+  <!--<script src="./node_modules/vue/dist/vue.runtime.min.js"></script>-->
+   <script src="./node_modules/vue/dist/vue.runtime.js"></script> 
+   <!--<script src="dist/vue.runtime.js"></script> -->
   <!-- <script src="./node_modules/weex-vue-render/index.min.js"></script> -->
-  <script src="./packages/weex-vue-render/index.js"></script>
+   <script src="./packages/weex-vue-render/dist/index.js"></script> 
+  <!--<script src="./packages/weex-vue-render/dist/index.min.js"></script>-->
 </head>
 <body>
   <div id="root"></div>
   <script>
-    (function () {
+    /**
+     * these iife is just for the convenience for the showcase of demos.
+     * you can import a jsbundle by wrapping it in a <script> tag.
+     * e.g. <script src="examples/build/vue-web/vue/index.js"></*script>
+     */
+    ; (function () {
       function getUrlParam (key) {
         var reg = new RegExp('[?|&]' + key + '=([^&]+)')
         var match = location.search.match(reg)
@@ -37,7 +80,7 @@
       var bundle = document.createElement('script')
       bundle.src = page
       document.body.appendChild(bundle)
-    })();
+    })()
   </script>
 </body>
 </html>